1.5. カーネルモジュールコンテナーのビルドおよびテスト
カーネルモジュールを OpenShift Container Platform クラスターにデプロイする前に、プロセスを別の RHEL システムでテストできます。
プロセスをテストする前に、カーネルモジュール、KVC フレームワーク、および kmod-via-containers ソフトウェアのソースコードを集めてください。その後、RHEL システム上でモジュールを構築してテストできます。
手順
RHEL 8 システムを登録します。
# subscription-manager registerRHEL 8 システムにサブスクリプションを割り当てます。
# subscription-manager attach --autoソフトウェアとコンテナーのビルドに必要なソフトウェアをインストールします。
# yum install podman make git -ykmod-via-containersリポジトリーをクローンします。リポジトリーのフォルダーを作成します。
$ mkdir kmods; cd kmodsリポジトリーのクローンを作成します。
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
RHEL 8 ビルドホストに KVC フレームワークインスタンスをインストールし、モジュールをテストします。これにより、
kmods-via-containersystemd サービスが追加され、読み込まれます。kmod-via-containersディレクトリーに移動します。$ cd kmods-via-containers/KVC フレームワークインスタンスをインストールします。
$ sudo make installsystemd マネージャー設定を再読み込みします。
$ sudo systemctl daemon-reload
カーネルモジュールのソースコードを取得します。ソースコードは、制御下になく、他から提供されるサードパーティーモジュールをビルドするために使用される可能性があります。システムに対してクローン作成できる以下の
kvc-simple-kmodサンプルのコンテンツと同様のコンテンツが必要になります。$ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmodこの例では、設定ファイル
simple-kmod.confを編集し、Dockerfile の名前をDockerfile.rhelに変更します。kvc-simple-kmodディレクトリーに移動します。$ cd kvc-simple-kmodDockerfile の名前を変更します。
$ cat simple-kmod.confDockerfile の例
KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod"
この例ではカーネルモジュール
simple-kmodのkmods-via-containers@.serviceのインスタンスを作成します。$ sudo make installkmods-via-containers@.serviceインスタンスを有効にします。$ sudo kmods-via-containers build simple-kmod $(uname -r)systemd サービスを有効にし、起動します。
$ sudo systemctl enable kmods-via-containers@simple-kmod.service --nowサービスのステータスを確認します。
$ sudo systemctl status kmods-via-containers@simple-kmod.service出力例
● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...
カーネルモジュールがロードされていることを確認するには、
lsmodコマンドを使用してモジュールをリスト表示します。$ lsmod | grep simple_出力例
simple_procfs_kmod 16384 0 simple_kmod 16384 0オプション:
simple-kmod の例が正しく動作していることを確認するには、他の方法を使用してください。dmesgを使用してカーネルリングバッファーで "Hello world" メッセージを探します。$ dmesg | grep 'Hello world'出力例
[ 6420.761332] Hello world from simple_kmod./procでsimple-procfs-kmodの値を確認します。$ sudo cat /proc/simple-procfs-kmod出力例
simple-procfs-kmod number = 0spkutコマンドを実行して、モジュールの詳細情報を取得します。$ sudo spkut 44出力例
KVC: wrapper simple-kmod for 4.22.0-147.3.1.el8_1.x86_64 Running userspace wrapper using the kernel module container... + podman run -i --rm --privileged simple-kmod-dd1a7d4:4.22.0-147.3.1.el8_1.x86_64 spkut 44 simple-procfs-kmod number = 0 simple-procfs-kmod number = 44
結果
システム起動後、サービスは新しいカーネルが実行されているかどうかを確認します。新規カーネルがある場合は、サービスは新規バージョンのカーネルモジュールをビルドし、これをロードします。モジュールがすでにビルドされている場合は、これをロードします。