カーネルモジュールパッケージガイドライン
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
パッケージの分離
システム上に複数のカーネルをインストールしたいというユーザーのために、カーネルモジュールを含むパッケージには特別な扱いが必要です。
カーネルモジュールと他の補助ファイル・ユーティリティが含まれているソフトウェアをパッケージ化するときは、補助ファイルとカーネルモジュールを分離してください。
ガイドライン
カーネルモジュールが含まれているソフトウェア (例えば NVIDIA ドライバー) をパッケージにするときは:
- 標準カーネルのカーネルモジュールだけが含まれる
nvidiaパッケージを作成。 - 補助ファイルが含まれる
nvidia-utilsパッケージを作成。 nvidiaがnvidia-utilsに依存するように設定 (何か理由があれば設定しなくてもかまいません)。kernel26-mmなど他のカーネル用のモジュールの場合、そのカーネルに対応するカーネルモジュールが含まれたnvidia-mmを作成して、同じようにnvidia-utilsに依存させます。nvidiaは最新のカーネルバージョンに依存するようにしてください。例:
depends=('kernel26>=2.6.24-2' 'kernel26<2.6.25-0' 'nvidia-utils')
上記の例で 2.6.24-1 ではなく 2.6.24-2 となっているのは、カーネルのサブシステムに重要な変更があったために、全てのモジュールを再ビルドする必要があるからです。そのような場合では depends のバージョンを変更しないと、古いバージョンのカーネルを使っているユーザーからモジュールが壊れていると報告を受ける可能性があります。
原則
別のカーネル向けにビルドされたカーネルモジュールを別のディレクトリに保存することでカーネルモジュールを共存させることができ、補助ファイルはひとつの場所にまとめることができます。モジュールと補助ファイルの両方がパッケージに含まれている場合、パッケージの補助ファイルが衝突してしまうため pacman でモジュールをインストールできなくなってしまいます。
モジュールと他のファイルを分離することで同一マシン上に複数のカーネルが存在する場合でも複数のカーネルモジュールパッケージをインストールして補助ファイルを共有することが可能になります。
ファイルの配置場所
既存の同じ名前のモジュールを上書きするようなカーネルモジュールの場合、/lib/modules/xx.yy.zz-ARCH/updates ディレクトリにモジュールを配置してください。depmod が実行されたとき、/lib/modules/xx.yy.zz-ARCH/updates ディレクトリのモジュールが優先されます。