「動的カーネルモジュールサポート」の版間の差分
細 (→初期 RAM ディスク: リンクの修正) |
Kusanaginoturugi (トーク | 投稿記録) 細 (Kusanaginoturugi がページ「Dynamic Kernel Module Support」を「動的カーネルモジュールサポート」に移動しました: 意訳) |
(相違点なし)
|
2024年8月14日 (水) 23:24時点における版
Wikipedia より:
- Dynamic Kernel Module Support (DKMS) はカーネルのソースツリーの外にソースが存在する Linux カーネルモジュールの生成を可能にするプログラム/フレームワークです。新しいカーネルがインストールされたときに DKMS モジュールは自動的にリビルドされます。
これはユーザーが会社・プロジェクト・パッケージメンテナが新しいバージョンのモジュールをリリースするのを待つ必要がないということを意味します。Pacman#フックが導入されたことで、カーネルがアップグレードされたときにモジュールのリビルドは自動的に処理されるようになっています。
目次
インストール
dkms パッケージとターゲットカーネル/カーネルヘッダーをインストールしてください。例えば、デフォルトの linux カーネルの場合は、linux-headers になります。他のカーネルの場合は、それぞれ独自のヘッダーパッケージがあります。
カーネルのソースツリーの外にあるモジュールについてはかなりの数の DKMS のパッケージが作られています。いくらかは 公式リポジトリ にも存在しますが、ほとんどのモジュールは AUR にあります。
アップグレード
大抵はカーネルのアップグレード時に DKMS モジュールのリビルドが行われますが、リビルドが失敗する可能性がときどきあります。pacman の出力をよく見てください。起動するのに DKMS モジュールに依存している環境の場合や公式リポジトリに存在しないカスタムカーネルで DKMS を使用する場合は特に重要です。
カーネルの変更に対処したり、バグを修正したり、必要な機能を追加するため、再起動する前に DKMS パッケージをアップグレードするようにしてください。
使用方法
DKMS を手動で使用する方法です。
タブ補完は次を実行することで使えます:
# source /usr/share/bash-completion/completions/dkms
モジュールの確認
モジュールの現在の状態、バージョンやツリーのカーネルを確認するには:
$ dkms status
モジュールのリビルド
全てのモジュールをリビルド:
# dkms autoinstall
もしくは特定のカーネルのモジュールをリビルド:
# dkms autoinstall -k 3.16.4-1-ARCH
特定のモジュールをビルド (例: 現在使用しているカーネル):
# dkms install -m nvidia -v 334.21
もしくは:
# dkms install nvidia/334.21
全てのカーネルでモジュールをビルドするには:
# dkms install nvidia/334.21 --all
モジュールの削除
モジュールを削除するには (古いモジュールが勝手に削除されることはありません):
# dkms remove -m nvidia -v 331.49 --all
もしくは:
# dkms remove nvidia/331.49 --all
dkms パッケージを削除した場合、モジュールのビルドファイルに関連する情報が消失します。その場合 /usr/lib/modules/KERNELVERSION-ARCH
から使用しないファイルやディレクトリを削除してください。
DKMS パッケージの作成
DKMS パッケージガイドライン を見てください。
初期 RAM ディスク
初期 RAM ディスク 内で使用されているカーネルモジュールを DKMS を通してインストールした場合(例: zfs-dkmsAUR)、pacman フックを記述して初期 RAM ディスクイメージの再生成手順を自動化できます。
例えば、linux と mkinitcpio を使用している場合に、zfs-dkmsAUR がアップグレードされる度に ZFS モジュールを更新するには:
/etc/pacman.d/hooks/90-mkinitcpio-dkms-linux.hook
[Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=zfs-dkms Target=linux [Action] Description=Update dkms modules in Linux initcpio Depends=mkinitcpio When=PostTransaction NeedsTargets Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -p linux'
他のカーネルをインストールしている場合には、フックに target を追加したり、フックの追加コピーを作成したりもできます。90-
接頭辞は、フックが DKMS フックの後に実行されるようにするために必要であることに注意してください。