如果需要在Alibaba Cloud Linux内核中启用特定的功能或模块,或者禁用默认内核中的某些功能以满足特定的性能或安全要求,您可以基于Alibaba Cloud Linux内核源代码进行修改,并使用rpm软件包管理工具进行重新编译和构建自定义的内核rpm包。这样可以确保所使用的内核与Alibaba Cloud Linux发行版本的兼容性,并且可以灵活地满足特定需求。本文为您介绍如何基于Alibaba Cloud Linux的ECS环境,在容器中修改并编译Alibaba Cloud Linux内核的rpm包。
前提条件
已创建基于Alibaba Cloud Linux的ECS实例。具体操作,请参见使用向导创建实例。
镜像:Alibaba Cloud Linux 2或者Alibaba Cloud Linux 3
实例规格:建议选择32 vCPU及以上的实例规格
说明编译
rpm包过程比较耗时,建议您使用32 vCPU及以上规格的ECS实例进行编译,提高编译效率。
步骤一:准备环境
远程连接ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,下载Docker镜像并进入容器。
#安装docker sudo yum install -y docker #拉取docker镜像 sudo docker pull <image_url> #拉起容器 sudo docker run -itd --net host --name alinux-build <image_url> bash # 进入容器 sudo docker exec -it alinux-build bash<image_url>需替换为Alibaba Cloud Linux 2/3对应的Docker镜像地址。产品
Docker镜像地址
Alibaba Cloud Linux 2
alibaba-cloud-linux-2-registry.cn-hangzhou.cr.aliyuncs.com/alinux2/alinux2
Alibaba Cloud Linux 3
alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
本文以下载Alibaba Cloud Linux 3对应的Docker镜像为例。
sudo yum install -y docker sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 sudo docker run -itd --net host --name alinux-build alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 bash sudo docker exec -it alinux-build bash
步骤二:下载源码
运行以下命令,下载并安装待修改的rpm包。
#下载源码包
yum install -y wget
wget <rpm_url>/<src.rpm_name>
#安装源码包
rpm -ivh <src.rpm_name><rpm_url>是Alibaba Cloud Linux 2/3对应的rpm包地址。产品
rpm包地址
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/
<src.rpm_name>为待修改的src.rpm包名称,请您根据需要替换。
本文以下载Alibaba Cloud Linux 3的rpm包为例,其中src.rpm包的名称为kernel-5.10.134-13.1.al8.src.rpm。
yum install -y wget
wget https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/kernel-5.10.134-13.1.al8.src.rpm
rpm -ivh kernel-5.10.134-13.1.al8.src.rpm源码包安装完成后,文件保存在/root/rpmbuild目录中,您可以通过ls /root/rpmbuild命令查询。查询结果如下图所示。

步骤三:修改源码
运行以下命令,安装依赖组件。
yum install -y rpm-build yum-utils yum-builddep -y <src.rpm_name><src.rpm_name>为待修改的src.rpm包名,请您根据需要替换。本文src.rpm包名称为kernel-5.10.134-13.1.al8.src.rpm。yum install -y rpm-build yum-utils yum-builddep -y kernel-5.10.134-13.1.al8.src.rpm运行以下命令,解压源码包。
# 先进入到源码目录 cd /root/rpmbuild/SOURCES # 再对源码包进行解压 tar xf <源码压缩包名称>本示例的
<源码压缩包名称>为linux-5.10.134-13.1.al8.tar.xz,请您根据实际情况替换。cd /root/rpmbuild/SOURCES tar xf linux-5.10.134-13.1.al8.tar.xz运行以下命令,进入解压后的目录。
cd <解压后的源码包名称>本示例的
<解压后的源码包名称>为linux-5.10.134-13.1.al8,请您根据实际情况替换。cd linux-5.10.134-13.1.al8(可选)修改
config配置。请您根据实际需求对源码或
config配置文件进行相应修改。源码的修改方法应根据实际需求而定。对于config的修改方法,您可以参考以下操作。运行以下命令,查看并选择待修改的
config文件。ls /root/rpmbuild/SOURCES
在
/root/rpmbuild/SOURCES目录下有四个config文件,具体说明如下。config文件
说明
kernel-5.10.134-aarch64.config
Arm架构、release版本的config配置。
kernel-5.10.134-aarch64-debug.config
Arm架构、debug版本的config配置,仅能用于测试。
kernel-5.10.134-x86_64.config
x86架构、release版本的config配置。
kernel-5.10.134-x86_64-debug.config
x86架构、debug版本的config配置,仅能用于测试。
根据平台是
Arm还是x86架构,选择kernel-5.10.134-aarch64.config或者kernel-5.10.134-x86_64.config文件即可,也可以同时修改两个平台的配置。运行以下命令,修改
config文件。本文以
x86架构的kernel-5.10.134-x86_64.config文件为例。复制
config文件到源码目录下。cd /root/rpmbuild/SOURCES cp kernel-5.10.134-x86_64.config linux-5.10.134-13.1.al8/.config进入源码目录。
cd linux-5.10.134-13.1.al8刷新
config文件中的默认值。make olddefconfig通过
menuconfig进行修改,确保能正确处理好config依赖。make menuconfig进入
menuconfig的界面。您可以按/键搜索待修改项,然后根据需要对待修改项进行变更。
拷贝修改后的
config文件,覆盖原有配置。cp .config ../kernel-5.10.134-x86_64.config返回上级目录。
cd ..
说明您可以按照同样的方法修改Arm架构的config配置。
运行以下命令,更新版本号。
cd /root/rpmbuild/SPECS vi kernel.spec按
i键进入编辑模式。修改完成后按Esc键,输入:wq后按Enter键,保存并退出配置文件。修改建议:
如果是类似
5.10.134-12这种大版本号,建议将其版本更新为5.10.134-12.0.1这类x.y.z的形式,以便与官方的版本号区分。如果是类似
5.10.134-13.1这种x.y的小版本号,建议将其版本更新为5.10.134-13.1.1。
本文以将
5.10.134-13.1版本号更新为5.10.134-13.1.1为例。在该文件中,找到
%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1}字段,将其更新为%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1.1}。
同时您还可以在
kernel.spec的changelog中补充此次的变更说明。
步骤四:重新构建rpm包
运行以下命令,重新压缩src.rpm包。
本文示例的源码包名称是
linux-5.10.134-13.1.al8,示例命令如下。进入SOURCES目录。
cd /root/rpmbuild/SOURCES/修改源码目录的文件名。
上述示例中将
5.10.134-13.1版本号更新为5.10.134-13.1.1,因此修改源码目录的文件名为linux-5.10.134-13.1.1.al8,请您根据实际情况进行修改。mv linux-5.10.134-13.1.al8 linux-5.10.134-13.1.1.al8重新压缩为tar包。
tar cJf linux-5.10.134-13.1.1.al8.tar.xz linux-5.10.134-13.1.1.al8移除解压的目录以及旧的压缩包。
rm -rf linux-5.10.134-13.1.al8 rm -f linux-5.10.134-13.1.al8.tar.xz
运行以下命令,重新构建
src.rpm包。cd /root rpmbuild -bs rpmbuild/SPECS/kernel.spec执行完成后返回如下信息,表示
src.rpm包存放在/root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpm。
(可选)运行以下命令,降级
dwarves软件包。如果您安装的
src.rpm中的内核版本小于等于5.10.134-13.1.al8,需使用dwarves-1.22-1.al8进行编译,否则可能会编译报错。yum downgrade dwarves-1.22-1.al8 -y运行以下命令,重新构建rpm包。
rpmbuild --rebuild /root/rpmbuild/SRPMS/<src.rpm_name>其中
<src.rpm_name>是修改后的src.rpm包名称,本文示例修改后的src.rpm包名称是kernel-5.10.134-13.1.1.al8.src.rpm,请您根据实际情况替换。rpmbuild --rebuild /root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpm编译rpm包时间较长,请您耐心等待。返回如下信息时,表示rpm包已构建成功。
