全部產品
Search
文件中心

Alibaba Cloud Linux:修改並編譯Alibaba Cloud Linux核心的rpm包

更新時間:Jul 17, 2024

如果需要在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執行個體進行編譯,提高編譯效率。

步驟一:準備環境

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 運行以下命令,下載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

https://mirrors.aliyun.com/alinux/2/plus/source/SRPMS/

Alibaba Cloud Linux 3

https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/

本文以下載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命令查詢。查詢結果如下:

image

步驟三:修改源碼

  1. 運行以下命令,安裝相依元件。

    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
  2. 運行以下命令,解壓源碼包。

    # 先進入到源碼目錄
    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
  3. 運行以下命令,進入解壓後的目錄。

    cd <解壓後的源碼包名稱>

    本文樣本的<解壓後的源碼包名稱>linux-5.10.134-13.1.al8,請您根據實際情況替換。樣本命令如下:

    cd linux-5.10.134-13.1.al8
  4. (可選)請您根據實際需要修改源碼或者config配置。修改源碼的方法根據實際需求而定,本文不做樣本。修改config的方法,您可以參考如下操作:

    1. 運行以下命令,查看並選擇待修改的config檔案。

      ls /root/rpmbuild/SOURCES

      image

      /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檔案即可,也可以同時修改兩個平台的配置。

    2. 運行以下命令,修改config檔案。

      本文以x86架構的kernel-5.10.134-x86_64.config檔案為例,樣本命令如下:

      1. 複製config檔案到源碼目錄下。

        cd /root/rpmbuild/SOURCES
        cp kernel-5.10.134-x86_64.config linux-5.10.134-13.1.al8/.config
      2. 進入源碼目錄。

        cd linux-5.10.134-13.1.al8
      3. 重新整理config檔案中的預設值。

        make olddefconfig
      4. 通過menuconfig進行修改,確保能正確處理好config依賴。

        make menuconfig

        進入menuconfig的介面。您可以按/鍵搜尋待修改項,然後根據需要對待修改項進行變更。

        image

      5. 拷貝修改後的config檔案,覆蓋原有配置。

        cp .config ../kernel-5.10.134-x86_64.config
      6. 返回上級目錄。

        cd ..
      說明

      您可以按照同樣的方法修改Arm架構的config配置。

  5. 運行以下命令,更新版本號碼

    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}1

    同時您還可以在kernel.specchangelog中補充此次的變更說明。2

步驟四:重新構建rpm包

  1. 運行以下命令,重新壓縮src.rpm包。

    本文樣本的源碼包名稱是linux-5.10.134-13.1.al8,樣本命令如下。

    1. 進入SOURCES目錄。

      cd /root/rpmbuild/SOURCES/
    2. 修改源碼目錄的檔案名稱。

      上述樣本中將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
    3. 重新壓縮為tar包。

      tar cJf linux-5.10.134-13.1.1.al8.tar.xz linux-5.10.134-13.1.1.al8
    4. 移除解壓的目錄以及舊的壓縮包。

      rm -rf linux-5.10.134-13.1.al8
      rm linux-5.10.134-13.1.al8.tar.xz
  2. 運行以下命令,重新構建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

    image

  3. (條件必選)運行以下命令,降級dwarves軟體包。

    如果您的核心版本(通過uname -r命令查詢)高於5.10.014版本,需使用老版本dwarves進行編譯,否則可能會編譯出錯。

    yum downgrade dwarves
  4. 運行以下命令,重新構建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包已構建成功。1