如果需要在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包已構建成功。