What:git下载docker仓库,源码编译19.03.5版本
Who:数字基建工人-Yison
Why:甲方给钱
When:2022年某月某日
Where:aarch64;openEuler20.03;4核4G
How:如下
- 神说要有git、go、docker-ce,编译docker-ce之前要先安装docker-ce,这是个鸡生蛋,蛋生鸡的玩意啊!版本如下图
yum install git go docker-ce -y
- 从github上克隆docker-ce.git,此处经过漫长的等待!
git clone https://github.com/docker/docker-ce.git
- 在docker-ce.git中切换到docker的19.03.9版本
mv docker-ce docker-ce.git && cd docker-ce.git && git checkout v19.03.5-beta2
- 执行如下命令,开始编译,并打RPM包,报错误:Unable to find image ‘alpine:latest’ locally,此处一万匹草泥马掠过,如下图
make rpm
处理流程:
1 由图中信息可知Entering directory '/root/docker-ce.git/components/packaging/rpm,目前现场在这个目录;
2 由图中信息可知,-v /root/docker-ce.git/components/packaging/rpm/rpmbuild/SOURCES这个目录找不到alpine镜像
3 修改/etc/docker/daemon.json文件(没有就创一个),修改docker源为网易的,内容如下
{
“debug”:true,
“storage-driver”:“overlay2”,
“storage-opts”:[“overlay2.override_kernel_check=true”],
“registry-mirrors”:[“http://hub-mirror.c.163.com”]
}
然后执行如下命令,重启docker生效
# systemctl restart docker
4 执行如下命令,拉取alpine的docker镜像,然后再编译,这个魔法就成功了!
# docker pull alpine:latest
- 然后又中了另一个魔法,如下图
解除魔法的参考链接:https://stackoverflow.com/questions/66188688/error-internal-load-metadata-for-docker-io-library-python-alpine3-8latest
说是buildkit的毛病,结果我又突然发现Makefile中与链接相似的东东,把DOCKER_BUILDKIT=1改成0就OK了!
- 又又又中了毒魔法,意思是网易的docker源也不是什么都有的搞,如下图
我试了源码里的所有发行版本centos-7 、centos-8 、fedora-30 、fedora-31、 fedora-32、rhel-7,幸好feodra-30给了我一丝慰藉,可以通过docker pull拉取,但是需要修改docker-ce.git/components/packaging/rpm下的Makefile,使得只打包fedora-30的rpm包,如下图
毒魔法再次解除,可以继续编译了!如下图
- 又双叕中了毒魔法,如下图
然鹅,又由图信息可知,
1 最终锁定到源码components/engine/hack/dockerfile/install,那只能再次前往案发现场了~,如下图;
2 克隆tini.git时,是执行了hack/dockerfile/install/install.sh tini;为了验证一下,我还执行了install.sh vndr,没错;
处理流程:找度娘,搜OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104错误,参考链接如下:https://www.cnblogs.com/zhanqing/p/giterror.html
tini.installer中克隆使用的协议https改为ssh,即git,如下图
- 又一个毒魔法,如下图
处理流程:修改源码中components/packaging/rpm/SPECS/docker-ce.spec文件,取消安装不存在的distribution_based_engine.json文件,如下图
- 再次出现如下图问题,之前clone 时,也出现Empty reply from server,重新make rpm编译就行,要么是clone次数太多,它烦了~,要么网络问题。
接着我手贱的make clean了,结果libnetwork.git 都无法git clone了,不clean重复make rpm了5次,都出现git clone的问题,卧槽哇,诸葛亮都没它们难请,GG!
我麻木地一直make rpm,功夫不负有心人,终于打包成功,如下图