CTyunOS上部署k8s-install遇到的包编译问题汇总
编译的包的名字
moby、runc、containerd、cri-tools、kubernetes、libcgroup、containernetworking-plugins、socat、conntrack-tools、container-selinux
编译工具安装
yum install -y rpm-build
编译步骤
1. 修改macros.dist
cat /etc/rpm/macros.dist
将openEuler 2
修改为vendor ctyunos
,如图所示
2. 下载包
git clone -b openEuler-24.03-LTS https://gitee.com/src-openeuler/kubernetes.git
3. 将包的路径链接到/root/rpmbuild/SOURCES
ln -s /root/kubernetes /root/rpmbuild/SOURCES
编译下一个包时需要将SOURCES链接删除(rm SOURCES
),再重新链接
不使用cp
的原因是链接更加方便修改内容
4. 编译
rpmbuild -ba kubernetes.spec
共有问题
1. No space left on device
解决:
内存不够,扩大内存2G-->6G
2. 缺少patch.tar.gz
解决:
使用命令tar -zcvf patch.tar.gz patch
压缩patch
3. 显示patch找不到
解决:
清空/rpmbuild/BUILD
文件夹,上一个包编译完成后,BUILD里面保存了上一个包的patch,导致正在编译的包匹配不到正确的patch
编译moby遇到的问题
1. No build ID note find in ......
解决:
在moby.spec文件中任意位置添加如下参数:
%define __debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}
2. 需要高版本golang
解决:
下载1.21.4-8.ctl2.src.rpm,编译安装高版本golang
也可以从openEuler源下载编译高版本golang
wget https://repo.ctyun.cn/hostos/ctyunos-22.09/update/sources/aarch64/Packages/golang-1.21.4-8.ctl2.src.rpm
rpm2cpio 包路径|cpio -idvm -D 指定解压到的目录名
rpmbuild -ba golang.spec
rpm -ivh golang-*
编译golang遇到的问题
1. Obsoletes无版本错误
解决:
vi golang.spec
添加版本限制:
Obsoletes: %{name}-bin < 2.0.0
Obsoletes: %{name}-shared < 2.0.0
Obsoletes: %{name}-docs < 2.0.0
2. %check退出状态不好
解决:
使用命令rpmbuild -ba golang.spec --nocheck
编译
3. 安装golang遇到循环依赖
使用--nodeps
命令强制安装
rpm -ivh --nodeps golang-1.21.4-8.ctl3.x86_64.rpm
或者将要安装的包写在一起安装
rpm -ivh golang-*
编译container-selinux遇到的问题
1. container.if报错
解决:
查看是否存在多个container.if
文件,删除多余的
tar -xzvf container-selinux-2.230.0.tar.gz
cd container-selinux-2.230.0/
find / -name container.if
cp /usr/share/selinux/devel/include/contrib/container.if /usr/share/selinux/devel/include/contrib/container.if.bak
rm -rf /usr/share/selinux/devel/include/contrib/container.if
压缩tar -zcvf container-selinux-2.230.0.tar.gz container-selinux-2.230.0
文件夹后重新编译
2. container.te报错
解决:
tar -xzvf container-selinux-2.230.0
cd container-selinux-2.230.0/
vi container.te
删除第898行
重新编译
反复解压缩文件修改,可以写脚本进行编译,./build.sh
:
vi build.sh
#!/bin/bash
rm -rf v2.230.0.tar.gz
tar zcf v2.230.0.tar.gz container-selinux-2.230.0
rpmbuild -ba container-selinux.spec
3. ctl2系统在上述步骤解决后还存在问题
应该是ctl2系统和该高版本的container-selinux不匹配,降低版本编译
wget https://repo.ctyun.cn/hostos/ctyunos-22.06/sources/Packages/container-selinux-2.138.0-1.ctl2.src.rpm
编译conntrack-tools遇到的问题
需要高版本libnetfilter_conntrack
解决:
编译安装1.0.9版本的libnetfilter_conntrack
git clone -b openEuler-24.03-LTS https://gitee.com/src-openeuler/libnetfilter_conntrack.git
编译cri-tools遇到的问题
解决:
使用1.21版本golang
总结
低版本系统编译高版本包问题会比较多
golang版本很重要