在 MAC 零碎中,从 GitHub 上下载代码,并尝试编译的过程中,呈现了编译谬误,根本都是找不到 package 这样的,例如:
cannot find package "bufio" in any of
non-static build: k8s.io/kubernetes/./vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen
touch: _output/bin/prerelease-lifecycle-gen: No such file or directory
hack/make-rules/helpers/go2make/go2make.go:20:2: cannot find package "bytes" in any of
问题剖析和修复
go 装置有问题
老手在开始尝试 Go 编码研发的时候,还是要先搞清楚 GoPATH,GOROOT,以及相干环境变量配置,相干 Go 的操作命令的区别,否则就会踩到一些搞不懂的坑。
- GOROOT,能够了解为是 go 程序包的装置目录,这外面蕴含了 Go 的运行时命令,比方 bin 目录,以及局部零碎类库,比方 src
- GOPATH, 了解为 GO 的默认工作空间
GO 的官方网站上有安装包,然而这些安装包也是有区别的:
- Source, 这种解压下来只有源码,没有 bin 命令
- Archive,这种蕴含源码和 Bin
- Installer,这种最简略,傻瓜式装置,蕴含源码和 Bin
不想麻烦的话,应用傻瓜式装置最简略。
GOBIN 带来的问题
GOROOT 和 GOPATH 设置好之后,大部分的问题曾经解决了,然而还有一个疑难问题:
kubernetes make
+++ [1119 09:50:12] Building go targets for darwin/amd64:
./vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen
> non-static build: k8s.io/kubernetes/./vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen
touch: _output/bin/prerelease-lifecycle-gen: No such file or directory
make[1]: *** [_output/bin/prerelease-lifecycle-gen] Error 1
make: *** [generated_files] Error 2
GitHub 上有人解答了这个问题。
short answer: go env -w GOBIN=
k8s will install binary to GOBIN if it is not empty, but k8s try to find prerelease-lifecycle-gen under _output/bin
修复办法就是清空 GOBIN,起因是说,如果有 GOBIN 的话,k8s 会向 GOBIN 的目录下写入二进制文件,然而他会在_output/bin 下找
prerelease-lifecycle-gen,然而又找不到。
具体为什么要找这个文件,没有解释,可能须要去看编译的具体代码逻辑。
清空 GOBIN 之后,问题曾经解决,能够失常编译,编译胜利后,k8s 目录下呈现了一个_output 的目录,外面有 bin 下各种文件。
➜ kubernetes git:(master) ll _output
total 160
-rw-r--r-- 1 user staff 3.4K 11 19 10:05 AGGREGATOR_violations.report
-rw-r--r-- 1 user staff 3.4K 11 19 10:05 APIEXTENSIONS_violations.report
-rw-r--r-- 1 user staff 3.7K 11 19 10:05 CODEGEN_violations.report
-rw-r--r-- 1 user staff 64K 11 19 10:05 KUBE_violations.report
-rw-r--r-- 1 user staff 3.5K 11 19 10:05 SAMPLEAPISERVER_violations.report
lrwxr-xr-x 1 user staff 75B 11 19 10:16 bin -> /Users/user/go/src/k8s.io/kubernetes/_output/local/bin/darwin/amd64
drwxr-xr-x 4 user staff 128B 11 19 10:03 local