%kernel_module_package マクロを使用してツリー外のカーネルモジュール RPM を構築する際のエラーおよび回避策
ツリー外のカーネルモジュールの RPM 結果を構築するために %kernel_module_package
マクロを使用しようとすると、次のエラーが発生します。
-
カーネルパッケージのバージョンを正しく判別できません。これにより、
make
呼び出しで誤った-C
引数が発生しました。 -
誤って定義された
%kernel_source macro
により、カーネルソースディレクトリーに CPU アーキテクチャーが二重に追加されました。 -
フレーバーカーネルのバージョン管理スキームが変更されたため、デフォルト以外のカーネルフレーバー (たとえば、
debug
またはzfcpdump
) を使用できません。これにより、make
呼び出しで誤った -C 引数が発生しました。 -
デフォルトのファイルリストの生成が正しくないため、RPM のファイルを収集できません。
-
*.ko
ファイルに対してdebuginfo
が生成されないため、debuginfo
機構が失敗します。パッケージはアーキテクチャー固有であるため、これは予想されることです。
これらの問題を克服するには、以下を行います。
-
問題 1 を回避するために、
%kernel_module_package
呼び出しの前にカーネルバージョンを明示的に指定してください。%global kernel_version 5.14.0-2.el9.%{_target_cpu} %kernel_module_package ...
-
問題 2 および 3 を回避するために、
%kernel_module_package
呼び出しの後に、%kernel_source
マクロの正しい定義を指定してください。%kernel_module_package ... %global kernel_source() $([ default = "%{1}" ] && echo "/usr/src/kernels/%kverrel" || %{kmodtool} kernel_source "%{kverrel}" "%{1}" 2>/dev/null || { ls -Ud \"/usr/src/kernels/%{kverrel}"[.+]"%{1}" | sort -V | tail -n 1; } || echo "/usr/src/kernels/%kverrel.%1")
-
問題 4 を回避するために、ファイルリストを明示的にバンドルします。
$ cat SOURCES/kmod-kmp_test.filelist /lib/modules/ $ grep -i source1 SPECS/kmod-test.spec Source1: %{name}.filelist %kernel_module_package -f "%{SOURCE1}" default
この手順は、複数のカーネルフレーバーのカーネルモジュールを構築する機能と競合します。もう 1 つのオプションは、
%install
段階で欠落しているファームウェアディレクトリーを作成することです。mkdir -p "$RPM_BUILD_ROOT/lib/firmware"
-
問題 5 を回避するには、
%debug_package
マクロ定義をオーバーライドします。%global debug_package %{nil}
もう 1 つのオプションは、
*.ko
ファイルに設定した後に実行可能ビットを設定することです。これは、カーネルモジュール署名の一部の実装と競合する可能性があります。find . -name "*.ko" -type f -exec chmod u+x '{}' +
Comments