前言
首先说明,本人使用的mips环境,处理器是Loongson-3A3000,系统是NeoKylin7 server。所有包的构建都是在这个环境下进行,由于没有其他mips环境,并不能保证其他mips环境能行。
由于业务需求,本人需要编译mips64le环境下的k3s 1.18.19版本。网上查了查,官方提供了编译方法,但是并不支持mips环境。mips环境下,只找到用go build
直接编译的方法。于是尝试了一下,go build
直接编译出来的k3s有200MB(官方的k3s只有40-60MB),这大小差了很多。那么这个k3s能不能用呢?能用,但是如果没安装kubernets-cni并将local-host放到PATH中的话,会报错。而且这个k3s别看他有200MB,但是helm, containerd等都没包含进去。如果这些你都无所谓,那么可以不用往下看了。直接用mips的golang go build
使用就可以。但是如果你和我一样觉得很不爽,觉得这不是完整的k3s,可以继续往下。
准备
首先是编译mips版本k3s的前期准备工作,你需要一个mips的环境,以及mips的golang。如何从源码编译mips版本的golang,这里不多赘述,网上教程很多。如果你不想自己编译,也可以用我编译好的golang 1.16.5,链接放在文末。
除了golang的环境,还要对应k3s版本的源码,下载至mips环境,并解压。 解压后的k3s源码目录大致如下:
e2e LICENSE README.md
build docker-compose.yml etc main.go scripts
BUILDING.md Dockerfile.dapper go.mod Makefile tests
channel.yaml Dockerfile.manifest go.sum manifests Vagrantfile
cmd Dockerfile.test.dapper install.sh package vendor
contrib Dockerfile.test.mod.dapper k3s.service pkg vendor.go
按照官方的编译教程,在这个地方直接执行mkdir -p build/data && ./scripts/download && go generate
然后再执行make
就能编译出完整的k3s,but! mips环境不可以,因为执行make后是在docker容器中进行的编译工作,而Dockerfile.dapper中使用的ubuntu镜像,没有mips版。那么既然这个镜像不行,用mips版的其他镜像不就可以了?于是我去查了查,发现有mips版的Debian镜像和golang镜像,于是我开心的不得了,把Dockerfile进行了修改,并且发现他确实能make, but!! 还是不行。因为Debian镜像中缺少了一些依赖安装不了,并且编译过程会卡住。尝试多次无果后,我放弃了。
既然镜像编译不行,难道就真的没办法了吗? no no no, 我以前编译k8s的时候,是可以在本地进行编译的,所以为啥不直接不使用镜像,在本地编译k3s。所以我打算本地编译,在编译前先执行
mkdir -p build/data && ./scripts/download