4.8. インツリー依存関係のシンボリックリンク
一部のカーネルモジュールは、ノードのオペレーティングシステムに同梱されている他のカーネルモジュールに依存します。これらの依存関係が kmod イメージにコピーされるのを回避するために、Kernel Module Management (KMM) は、ビルドとワーカー Pod の両方のファイルシステムに /usr/lib/modules
をマウントします。
/opt/usr/lib/modules/<kernel_version>/<symlink_name>
から /usr/lib/modules/<kernel_version>
へのシンボリックリンクを作成することにより、depmod
はビルドノードのファイルシステム上のインツリー kmods を使用して依存関係を解決できます。
実行時に、ワーカー Pod は <symlink_name>
シンボリックリンクを含むイメージ全体を抽出します。このシンボリックリンクは、ノードのファイルシステムからマウントされるワーカー Pod 内の /usr/lib/modules/<kernel_version>
を指します。modprobe
はそのリンクをたどり、必要に応じてインツリーの依存関係をロードできます。
次の例では、host
は /opt/usr/lib/modules/<kernel_version>
の下のシンボリックリンク名です。
ARG DTK_AUTO FROM ${DTK_AUTO} as builder # # Build steps # FROM ubi9/ubi ARG KERNEL_FULL_VERSION RUN dnf update && dnf install -y kmod COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_a.ko /opt/lib/modules/${KERNEL_FULL_VERSION}/ COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_b.ko /opt/lib/modules/${KERNEL_FULL_VERSION}/ # Create the symbolic link RUN ln -s /lib/modules/${KERNEL_FULL_VERSION} /opt/lib/modules/${KERNEL_FULL_VERSION}/host RUN depmod -b /opt ${KERNEL_FULL_VERSION}
ARG DTK_AUTO
FROM ${DTK_AUTO} as builder
#
# Build steps
#
FROM ubi9/ubi
ARG KERNEL_FULL_VERSION
RUN dnf update && dnf install -y kmod
COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_a.ko /opt/lib/modules/${KERNEL_FULL_VERSION}/
COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_b.ko /opt/lib/modules/${KERNEL_FULL_VERSION}/
# Create the symbolic link
RUN ln -s /lib/modules/${KERNEL_FULL_VERSION} /opt/lib/modules/${KERNEL_FULL_VERSION}/host
RUN depmod -b /opt ${KERNEL_FULL_VERSION}
depmod
は、kmod イメージビルドを実行するノードに存在するカーネルモジュールに基づいて依存関係ファイルを生成します。
KMM がカーネルモジュールをロードするノードでは、modprobe
は、ファイルが /usr/lib/modules/<kernel_version>
の下に存在し、同じファイルシステムレイアウトであることを期待します。ビルドノードとターゲットノードで同じオペレーティングシステムとリリースを共有することを強く推奨します。