diff --git "a/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis\345\206\205\346\240\270\350\241\245\344\270\201\345\220\210\345\205\245\345\256\236\350\267\265.md" "b/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis\345\206\205\346\240\270\350\241\245\344\270\201\345\220\210\345\205\245\345\256\236\350\267\265.md" new file mode 100644 index 0000000000000000000000000000000000000000..b7ddcdba2030bf0cd7176a8d89113381fea6e5d1 --- /dev/null +++ "b/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis\345\206\205\346\240\270\350\241\245\344\270\201\345\220\210\345\205\245\345\256\236\350\267\265.md" @@ -0,0 +1,138 @@ +# 1 概述 + +龙蜥操作系统(Anolis OS)是 OpenAnolis 龙蜥社区发行的开源 Linux 发行版,兼容主流 Linux 发行版操作习惯,支持多计算架构,提供稳定、高性能、安全、可靠的操作系统服务。内核是操作系统核心的软件包,在添加新功能或者进行bug fix的时候需要合入补丁。本文介绍了一种在本地进行内核补丁合入和编译构建的方法。 + +# 2 补丁合入 + +## 2.1 操作系统安装 + +为保证编译构建效率,编译构建环境建议64以上核心,32G以上内存,编译目录存储空间大于100GB。 + +### 2.1.1 语言选择 + +![](https://oss.openanolis.cn/blog/gmycfpxaqfvbwtptnqiv) + +### 2.1.2 安装选项 + +操作系统安装的时候,选择server with gui模式,全包安装。 ![](https://oss.openanolis.cn/blog/mspyhjkihpsudfwsbihc) + +安装时不连接网络,避免安装时系统升级,通常是一种更好的实践。 ![](https://oss.openanolis.cn/blog/tutmxlfjrcjzglcxnobg) + +### 2.1.3 创建用户 + +安装时创建 mockbuild用户,作为补丁合入与内核编译的用户。 ![](https://oss.openanolis.cn/blog/usvqtzavqtudhwipuxjl) + +### 2.1.4 重启完成安装 + +安装完成后重启,完成安装。 +![](https://oss.openanolis.cn/blog/zdtanhzdgkealsedleyt) ![](https://oss.openanolis.cn/blog/emkhylukgleemzwaljnt) ![](https://oss.openanolis.cn/blog/ebgaopfeipsfdhoqxqvp) + +## 2.2 安装编译依赖 + +### 2.2.1 制作本地yum源 + +首先,备份系统的repo文件。 + +![](https://oss.openanolis.cn/blog/zycmrtgnfbahwhieepda) + +其次,挂载 ISO 镜像。 + +**mount /home/AnolisOS-8.2-QU2-x86\_64-dvd.iso /mnt/iso** + +再次,编辑本地repo文件。 + +**vim /etc/yum.repos.d/local.repo** + +[BaseOS] +name=BaseOS +baseurl=[file:///mnt/iso/BaseOS](file:///mnt/iso/BaseOS) +gpgcheck=0 +enabled=1 +[AppStream] +name=AppStream +baseurl=[file:///mnt/iso/AppStream](file:///mnt/iso/AppStream) +gpgcheck=0 +enabled=1 + +最后,执行yum makecache。 + +**yum clean all && yum makecache** + +### 2.2.2 安装编译依赖 + +**yum install audit-libs-devel binutils-devel dwarves elfutils-devel java-devel kabi-dw libbpf-devel libcap-devel libcap-ng-devel llvm-toolset ncurses-devel newt-devel numactl-devel openssl-devel pciutils-devel perl-ExtUtils-Embed perl-devel python3-devel python3-docutils xmlto xz-devel zlib-devel** + +提示缺少的dwarves和libbpf-devel从[https://mirrors.openanolis.cn/anolis/8.2/](https://mirrors.openanolis.cn/anolis/8.2/) 下载,然后使用yum install \*.rpm进行安装。 + +**libbpf-devel:** +wget [https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86\_64/os/Packages/libbpf-devel-0.0.4-5.el8.x86\_64.rpm](https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86_64/os/Packages/libbpf-devel-0.0.4-5.el8.x86_64.rpm) + +**dwarves:** +wget [https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86\_64/os/Packages/dwarves-1.15-5.0.2.an8.x86\_64.rpm](https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86_64/os/Packages/dwarves-1.15-5.0.2.an8.x86_64.rpm) +wget [https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86\_64/os/Packages/libdwarves1-1.15-5.0.2.an8.x86\_64.rpm](https://mirrors.openanolis.cn/anolis/8.2/PowerTools/x86_64/os/Packages/libdwarves1-1.15-5.0.2.an8.x86_64.rpm) + +![](https://oss.openanolis.cn/blog/nbsceizkltucbqqwitkc) + +## 2.3 安装内核源码 + +首先,切到mockbuild用户,然后下载安装内核源码。 +内核源码下载链接: +https://mirrors.openanolis.cn/anolis/8.2/BaseOS/source/Packages/kernel-4.18.0-193.70.1.an8\_2.src.rpm + +**su - mockbuild** + +然后,安装内核源码。 + +**rpm -ivh kernel-4.18.0-193.70.1.an8\_2.src.rpm** + +![](https://oss.openanolis.cn/blog/aidnerkcqcvxblrrgevn) + +## 2.4 添加内核补丁 + +### 2.4.1 拷贝补丁到rpmbuild/SOURCES/ + +以001\_iommu-amd-Use-cmpxchg\_double-when-updating-128-bit-IRT.patch内核补丁为例。 + +![](https://oss.openanolis.cn/blog/msamxuhwbudzfiqxrjpv) + +### 2.4.2 修改kernel.spec添加内核补丁 + +编辑spec文件添加内核补丁。 + +**vim rpmbuild/SPECS/kernel.spec** + +比如,合入001\_iommu-amd-Use-cmpxchg\_double-when-updating-128-bit-IRT.patch内核补丁,需要修改两处。 第一处: ![](https://oss.openanolis.cn/blog/yqynyjvjzkofinhpjjvj) + +第二处: ![](https://oss.openanolis.cn/blog/mmwmfhpejxlzdozvzxid) 添加多个补丁,同样如此。 + +## 2.5 rpmbuild编译内核 + +**cd rpmbuild/SPECS/** + +**nohup rpmbuild -ba kernel.spec 1>>build.log 2>>build.log &** + +执行编译命令后,可以通过查看编译构建日志检查补丁合入情况。 + +![](https://oss.openanolis.cn/blog/ypqxiaaqhhiacvdosnbg) + +编译构建成功后,会生成内核的安装包,包括debug相关的rpm安装包。 + +注:可以添加--define "buildid \_2"进行版本号定制。 + +在目标系统可以使用rpm -qa | grep \$(uname -r) 查看原来安装了哪些内核相关的包,然后使用 +rpm -ivh kernel-4.18.0-193.70.1.an8\_2.x86\_64.rpm kernel-core-4.18.0-193.70.1.an8\_2.x86\_64.rpm kernel-modules-4.18.0-193.70.1.an8\_2.x86\_64.rpm kernel-modules-extra-4.18.0-193.70.1.an8\_2.x86\_64.rpm +方式进行安装。如果原来已经安装了同样版本的内核,需要添加 --force 进行强制覆盖安装。安装后需要重启,进入新内核使用新功能。 + + + +→→EOF←← + +**关于作者** + +![](https://img.alicdn.com/tfs/TB1Eh._UFP7gK0jSZFjXXc5aXXa-35-35.svg?x-oss-process=image/resize,h_110,w_110,m_fill,limit_0) + +tingyin + +荣获2021龙蜥社区年度突出贡献奖&2024龙蜥社区优秀贡献者。 + +