特定のシナリオでは、特定のパフォーマンスまたはセキュリティ要件を満たすために、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: 環境の準備
Alibaba Cloud LinuxカーネルのRPMパッケージを変更およびコンパイルするインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、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 | |
Alibaba Cloud Linux 3 |
この例では、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
コマンドを実行して、ファイルを照会します。 サンプルコマンド出力:
ステップ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
次のコマンドを実行して、ソースコードパッケージを解凍します。
# 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
次のコマンドを実行して、解凍されたソースコードパッケージがあるディレクトリに移動します。
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
オプションです。 必要に応じてソースコードまたは構成ファイルを変更します。 必要に応じてソースコードを変更できます。 このトピックでは、設定ファイルを変更する方法についてのみ説明します。 設定ファイルを変更するには、次の操作を実行します。
次のコマンドを実行して、すべての設定ファイルを一覧表示し、変更する設定ファイルを選択します。
ls /root/rpmbuild/SOURCES
次の表に、
/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
ファイルを選択することも、両方のプラットフォームの設定を同時に変更することもできます。次のコマンドを実行して、設定ファイルを変更します。
この例では、x86アーキテクチャ用の
kernel-5.10.134-x86_64.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
設定ファイルのデフォルト値を更新します。
make olddefconfig
menuconfigを使用して設定ファイルを変更し、適切な依存関係を設定します。
make menuconfig
menuconfigウィンドウに入ります。
/
キーを押すと、変更が必要なアイテムを検索し、必要に応じてアイテムを変更できます。変更した設定ファイルをコピーして、元の設定を上書きします。
cp .config ../kernel-5.10.134-x86_64.config
親ディレクトリに戻ります。
cd ..
説明Armアーキテクチャの設定ファイルも同じ方法で変更できます。
次のコマンドを実行して、カーネルのバージョンを更新します。
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}
に変更します。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 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パッケージが再作成されたことを示しています。