From 0b92a3446aba6e07ca9bad00f33656e6f9690c60 Mon Sep 17 00:00:00 2001 From: tingyin Date: Thu, 17 Jul 2025 07:43:33 +0000 Subject: [PATCH] =?UTF-8?q?Anolis=E5=86=85=E6=A0=B8=E8=A1=A5=E4=B8=81?= =?UTF-8?q?=E5=90=88=E5=85=A5=E5=AE=9E=E8=B7=B5=20=E9=BE=99=E8=9C=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B3=BB=E7=BB=9F=EF=BC=88Anolis=20OS?= =?UTF-8?q?=EF=BC=89=E6=98=AF=20OpenAnolis=20=E9=BE=99=E8=9C=A5=E7=A4=BE?= =?UTF-8?q?=E5=8C=BA=E5=8F=91=E8=A1=8C=E7=9A=84=E5=BC=80=E6=BA=90=20Linux?= =?UTF-8?q?=20=E5=8F=91=E8=A1=8C=E7=89=88=EF=BC=8C=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E4=B8=BB=E6=B5=81=20Linux=20=E5=8F=91=E8=A1=8C=E7=89=88?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=B9=A0=E6=83=AF=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E8=AE=A1=E7=AE=97=E6=9E=B6=E6=9E=84=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E7=A8=B3=E5=AE=9A=E3=80=81=E9=AB=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E3=80=81=E5=AE=89=E5=85=A8=E3=80=81=E5=8F=AF=E9=9D=A0=E7=9A=84?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B3=BB=E7=BB=9F=E6=9C=8D=E5=8A=A1=E3=80=82?= =?UTF-8?q?=E5=86=85=E6=A0=B8=E6=98=AF=E6=93=8D=E4=BD=9C=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=A0=B8=E5=BF=83=E7=9A=84=E8=BD=AF=E4=BB=B6=E5=8C=85=EF=BC=8C?= =?UTF-8?q?=E5=9C=A8=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=8A=9F=E8=83=BD=E6=88=96?= =?UTF-8?q?=E8=80=85=E8=BF=9B=E8=A1=8Cbug=20fix=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=90=88=E5=85=A5=E8=A1=A5=E4=B8=81=E3=80=82?= =?UTF-8?q?=E6=9C=AC=E6=96=87=E4=BB=8B=E7=BB=8D=E4=BA=86=E4=B8=80=E7=A7=8D?= =?UTF-8?q?=E5=9C=A8=E6=9C=AC=E5=9C=B0=E8=BF=9B=E8=A1=8C=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E8=A1=A5=E4=B8=81=E5=90=88=E5=85=A5=E5=92=8C=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E7=9A=84=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tingyin --- ...10\345\205\245\345\256\236\350\267\265.md" | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 "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" 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 0000000..b7ddcdb --- /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龙蜥社区优秀贡献者。 + + -- Gitee