Translated message

A translation of this page exists in English.

%kernel_module_package マクロを使用してツリー外のカーネルモジュール RPM を構築する際のエラーおよび回避策

更新 -

ツリー外のカーネルモジュールの RPM 結果を構築するために %kernel_module_package マクロを使用しようとすると、次のエラーが発生します。

  1. カーネルパッケージのバージョンを正しく判別できません。これにより、make 呼び出しで誤った -C 引数が発生しました。

  2. 誤って定義された %kernel_source macro により、カーネルソースディレクトリーに CPU アーキテクチャーが二重に追加されました。

  3. フレーバーカーネルのバージョン管理スキームが変更されたため、デフォルト以外のカーネルフレーバー (たとえば、debug または zfcpdump) を使用できません。これにより、make 呼び出しで誤った -C 引数が発生しました。

  4. デフォルトのファイルリストの生成が正しくないため、RPM のファイルを収集できません。

  5. *.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