特定のシナリオでは、特定のパフォーマンスまたはセキュリティ要件を満たすために、Alibaba Cloud Linux カーネルで特定の機能またはモジュールを有効にするか、デフォルトカーネルで特定の機能を無効にする必要がある場合があります。 これを行うには、Alibaba Cloud Linux カーネルのソースコードを変更し、Red Hat Package Manager (RPM) を使用してカスタムカーネル RPM パッケージを再コンパイルおよび再作成します。 これにより、使用中のカーネルが Alibaba Cloud Linux リリースと互換性があり、特定のビジネス要件に柔軟に対応できるようになります。 このトピックでは、Alibaba Cloud Linux Elastic Compute Service (ECS) 環境に基づくコンテナーで Alibaba Cloud Linux カーネルの RPM パッケージを変更およびコンパイルする方法について説明します。
前提条件
Alibaba Cloud Linux を実行する ECS インスタンスが作成されます。 詳細については、「ウィザードを使用してインスタンスを作成する」をご参照ください。
インスタンスは、Alibaba Cloud Linux 2 または 3 イメージを使用します。
インスタンスが使用するインスタンスタイプには、32 個以上の vCPU があります。
説明RPMパッケージのコンパイルは、完了するまでに長い時間がかかります。 コンパイル効率を向上させるために、32 個以上の vCPU を搭載したインスタンスタイプを使用することをお勧めします。
手順 1: 環境を準備する
Alibaba Cloud Linux カーネルの RPM パッケージを変更およびコンパイルする ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
次のコマンドを実行して、Alibaba Cloud Linux Docker イメージをダウンロードし、Docker コンテナーにアクセスします。
# Docker をインストールします。 sudo yum install -y docker # Docker イメージをプルします。 sudo docker pull <image_url> # Docker コンテナーを起動します。 sudo docker run -itd --net host --name alinux-build <image_url> bash # Docker コンテナーにアクセスします。 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 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
手順 2: ソースコードをダウンロードする
次のコマンドを実行して、変更する RPM パッケージをダウンロードします。
# ソースコードパッケージをダウンロードします。
yum install -y wget
wget <rpm_url>/<src.rpm_name>
# ソースコードパッケージをインストールします。
rpm -ivh <src.rpm_name>上記のコマンドで、
<rpm_url>を Alibaba Cloud Linux 2 または 3 に対応するRPMパッケージの URL に置き換えます。 次の表に、Alibaba Cloud Linux 2 または 3 に対応する RPM パッケージのダウンロード URL を示します。イメージ
RPM パッケージ URL
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/
上記のコマンドで、
<src.rpm_name>を変更するsrc.rpmパッケージの名前に置き換えます。
この例では、kernel-5.10.134-13.1.al8.src.rpm という名前の Alibaba Cloud Linux 3 に対応する パッケージがダウンロードされます。 コマンド例:
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 src.rpm パッケージをインストールすると、src.rpm パッケージのファイルは /root/rpmbuild ディレクトリに保存されます。 ls /root/rpmbuild コマンドを実行して、ファイルをクエリできます。 コマンド出力例:

手順 3: ソースコードを変更する
次のコマンドを実行して、依存関係をインストールします。
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次のコマンドを実行して、ソースコードパッケージを解凍します。
# ソースコードディレクトリに移動します。 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ファイルを一覧表示し、変更する config ファイルを選択します。ls /root/rpmbuild/SOURCES
次の表に、
/root/rpmbuild/SOURCESディレクトリにあるconfigファイルを示します。config ファイル
説明
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ファイルを選択するか、両方のプラットフォームの構成を変更できます。次のコマンドを実行して、
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.al8configファイルのデフォルト値を更新します。make olddefconfigmenuconfigを使用してconfigファイルを変更し、適切な依存関係構成を確保します。make menuconfigmenuconfigインターフェースにアクセスします。/キーを押して、変更が必要な項目を検索し、ビジネス要件に基づいて項目を変更できます。
変更された
configファイルをコピーして、元の構成を上書きします。cp .config ../kernel-5.10.134-x86_64.config親ディレクトリに戻ります。
cd ..
説明Arm アーキテクチャの config ファイルも同じ方法で変更できます。
次のコマンドを実行して、カーネルバージョンを更新します:
cd /root/rpmbuild/SPECS vi kernel.specIキーを押して挿入モードに入ります。Escキーを押し、:wqと入力して、Enterキーを押して config ファイルを保存して閉じます。変更の推奨事項:
カーネルに
*-x形式のメジャーバージョン (5.10.134-12など) がある場合は、メジャーバージョンを*-x.y.z形式のバージョンに変更することを推奨します (5.10.134-12.0.1など)。 このようにして、バージョンと公式バージョンを区別できます。カーネルに
*-x.y形式のマイナーバージョンがある場合(5.10.134-12など) 、マイナーバージョンを*-x.y.z形式のバージョンに変更することを推奨します(5.10.134-13.1.1など)。
次の例では、
5.10.134-13.1バージョン番号が5.10.134-13.1.1に更新されます。config ファイルで、
%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1}を見つけて、%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1.1}に変更します。
kernel.specファイルのchangelogセクションに変更の説明を追加することもできます。
手順 4: 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 packageが/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.rpmRPM パッケージのコンパイルは、完了するまでに長い時間がかかります。 次のコマンド出力例は、RPM パッケージが再作成されたことを示しています。
