k8s源代码编译问题记录

在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的官方网站上有安装包,但是这些安装包也是有区别的:

k8s源代码编译问题记录_第1张图片

  • 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

你可能感兴趣的