すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:Alibaba Cloud LinuxカーネルRPMパッケージの変更とコンパイル

最終更新日:Jul 03, 2024

特定のシナリオでは、特定のパフォーマンスまたはセキュリティ要件を満たすために、Alibaba Cloud Linuxカーネルの特定の機能またはモジュールを有効にするか、デフォルトカーネルの特定の機能を無効にする必要があります。 これらを行うには、Alibaba Cloud Linuxカーネルソースコードを変更し、Red Hat Package Manager (RPM) を使用してカスタムカーネルRPMパッケージを再コンパイルおよび再作成します。 これにより、使用中のカーネルがAlibaba Cloud Linuxリリースと互換性を持ち、特定のビジネス要件を柔軟に満たすことができます。 このトピックでは、Alibaba Cloud LinuxカーネルのRPMパッケージを、Alibaba Cloud Linux Elastic Compute Service (ECS) 環境に基づいてコンテナ内で変更およびコンパイルする方法について説明します。

前提条件

Alibaba Cloud Linuxを実行するECSインスタンスが作成されます。 詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。

  • インスタンスはAlibaba Cloud Linux 2または3イメージを使用しています。

  • インスタンスが使用するインスタンスタイプには、32個以上のvCPUがあります。

    説明

    RPMパッケージのコンパイルには長い時間がかかります。 コンパイル効率を向上させるために、32以上のvCPUを持つインスタンスタイプを使用することを推奨します。

ステップ1: 環境の準備

  1. Alibaba Cloud LinuxカーネルのRPMパッケージを変更およびコンパイルするインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. 次のコマンドを実行して、Alibaba Cloud Linux Dockerイメージをダウンロードし、Dockerコンテナにアクセスします。

    #Install Docker.
    sudo yum install -y docker
    #Pull a Docker image.
    sudo docker pull <image_url>
    #Start the Docker container.
    sudo docker run -itd --net host --name alinux-build <image_url> bash
    #Access the Docker container.
    sudo docker exec -it alinux-build bash

    上記のコマンドで、<image_url> をAlibaba Cloud Linux 2または3に対応するDockerイメージのURLに置き換えます。 DockerイメージのURLを次の表に示します。

    イメージ

    DockerイメージのURL

    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 pul l alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
    sudo docker run -itd -- net host -- name alinux-buil d alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 bash
    sudo docker exec -it alinux-build bash 

ステップ2: ソースコードをダウンロード

次のコマンドを実行して、変更するRPMパッケージをダウンロードします。

# Download the source code package.
yum install -y wget
wget <rpm_url>/<src.rpm_name>
# Install the source code package.
rpm -ivh <src.rpm_name>

上記のコマンドでは、<rpm_url> をAlibaba Cloud Linux 2または3に対応するRPMパッケージのURLに置き換え、<src.rpm_name> をソースコードを含むRPMパッケージの名前 (src.rpmパッケージ) に置き換えます。 次の表に、Alibaba Cloud Linux 2または3に対応するRPMパッケージのダウンロードURLを示します。

イメージ

RPMパッケージURL

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に対応する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 

src.rpmパッケージをインストールすると、src.rpmパッケージのファイルは /root/rpmbuildディレクトリに保存されます。 ls /root/rpmbuildコマンドを実行して、ファイルを照会します。 サンプルコマンド出力:

image

ステップ3: ソースコードの変更

  1. 次のコマンドを実行して依存関係をインストールします。

    yum install -y rpm-build yum-utils
    yum-builddep -y <src.rpm_name> 

    上記のコマンドで、<src.rpm_name> を変更するsrc.rpmパッケージの名前に置き換えます。 この例では、<src.rpm_name> は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. 次のコマンドを実行して、ソースコードパッケージを解凍します。

    # Enter the source code directory.
    cd /root/rpmbuild/SOURCES
    # Decompress the source code package.
    tar xf <Name of the compressed source code package>

    上記のコマンドで、必要に応じて <Name of the compressed source code package> を置き換えます。 この例では、<圧縮ソースコードパッケージの名前> が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 <Name of the decompressed source code package>

    上記のコマンドでは、必要に応じて <Name of the decompressed source code package> を置き換えます。 この例では、<解凍されたソースコードパッケージの名前> がlinux-5.10.134-13.1.al8に置き換えられています。 サンプルコマンド:

    cd linux-5.10.134-13.1.al8
  4. オプションです。 必要に応じてソースコードまたは構成ファイルを変更します。 必要に応じてソースコードを変更できます。 このトピックでは、設定ファイルを変更する方法についてのみ説明します。 設定ファイルを変更するには、次の操作を実行します。

    1. 次のコマンドを実行して、すべての設定ファイルを一覧表示し、変更する設定ファイルを選択します。

      ls /root/rpmbuild/SOURCES

      image

      次の表に、/root/rpmbuild/SOURCESディレクトリの設定ファイルを示します。

      設定ファイル

      説明

      kernel-5.10.134-aarch64.config

      Armアーキテクチャと構成構成のリリースバージョン。

      kernel-5.10.134-aarch64-debug.config

      テストにのみ使用できるArmアーキテクチャとデバッグバージョンの設定。

      kernel-5.10.134-x86_64.config

      x86アーキテクチャの構成ファイルとリリースバージョン。

      kernel-5.10.134-x86_64-debug.config

      テストにのみ使用されるx86アーキテクチャとデバッグバージョンの構成ファイル。

      ほとんどの場合、プラットフォームがArmアーキテクチャかx86アーキテクチャかに基づいてkernel-5.10.134-aarch64.configまたはkernel-5.10.134-x86_64.configファイルを選択することも、両方のプラットフォームの設定を同時に変更することもできます。

    2. 次のコマンドを実行して、設定ファイルを変更します。

      この例では、x86アーキテクチャ用のkernel-5.10.134-x86_64.configファイルが使用されています。 サンプルコマンド:

      1. 構成ファイルをソースコードディレクトリにコピーします。

        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. 設定ファイルのデフォルト値を更新します。

        make olddefconfig
      4. menuconfigを使用して設定ファイルを変更し、適切な依存関係を設定します。

        make menuconfig

        menuconfigウィンドウに入ります。 /キーを押すと、変更が必要なアイテムを検索し、必要に応じてアイテムを変更できます。

        image

      5. 変更した設定ファイルをコピーして、元の設定を上書きします。

        cp .config ../kernel-5.10.134-x86_64.config
      6. 親ディレクトリに戻ります。

        cd ..
      説明

      Armアーキテクチャの設定ファイルも同じ方法で変更できます。

  5. 次のコマンドを実行して、カーネルのバージョンを更新します。

    cd /root/rpmbuild/SPECS
    vi kernel.spec

    修正のための提案:

    • カーネルのメジャーバージョンが *-x形式 (5.10.134-12など) の場合、メジャーバージョンを *-x.y.z形式 (5.10.134-12.0.1など) に変更することを推奨します。 このようにして、バージョンと公式バージョンを区別できます。

    • カーネルのマイナーバージョンが *-x.y形式 (5.10.134-13.1など) の場合、マイナーバージョンを *-x.y.z形式 (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.spec changelogに変更の説明を追加することもできます。 2

ステップ4: 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