如果需要在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執行個體。
具體操作,請參見通過密碼或密鑰認證登入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>
是Docker鏡像地址,請您根據需要替換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包地址、<src.rpm_name>
是待修改的src.rpm包名稱,請您根據需要替換。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/ |
本文以下載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/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檔案。
ls /root/rpmbuild/SOURCES
在
/root/rpmbuild/SOURCES
目錄下有4個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
修改建議:
如果是類似
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 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軟體包。
如果您的核心版本(通過
uname -r
命令查詢)高於5.10.014
版本,需使用老版本dwarves進行編譯,否則可能會編譯出錯。yum downgrade dwarves
運行以下命令,重新構建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包已構建成功。