Fedoraでakmodsをマスターする:カーネル更新時のドライバー破損の悩みから解放されよう

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

カーネル更新後のドライバー消失:誰もが経験する悩み

私はFedoraをメインの作業マシンとして2年以上愛用しています。すべてが順調に思えても、sudo dnf updateを実行した後に問題が起こることがあります。再起動後、Nvidiaのグラフィックボードが突然「ストライキ」を起こし、画面解像度が800×600に固定されたり、VirtualBoxが致命的なモジュール不足エラーを吐き出したりするのです。

問題はFedoraの更新速度にあります。このディストリビューションは新しいカーネルの採用が非常に早く、通常は安定版がリリースされてからわずか数日後には提供されます。カーネルが変更されると、Nvidia、BroadcomのWi-Fi、VirtualBoxなどの「out-of-tree」ドライバー(カーネル本体のソースコードに含まれないドライバー)は、古いバージョン向けにビルドされているため、互換性が失われます。これらは再コンパイルしない限り、即座に動作を停止してしまいます。

この煩わしさを解消するために、DKMSakmodsという2つの選択肢があります。この記事では、Fedoraエコシステムにおいて「正規エンジニア」のような役割を果たすソリューションであるakmodsの使い方を解説します。

なぜアップデート後にドライバーが「壊れる」のか?

Linuxカーネルはハードウェアとソフトウェア間の通信を管理しています。カーネルのソースコードに含まれていないドライバーは、.ko(Kernel Object)ファイルとしてコンパイルされます。

これらのファイルは、Kernel ABI(Application Binary Interface)を通じて特定のカーネルバージョンに密接に紐付けられています。例えば、カーネル6.7から6.8にアップグレードすると、ABIの構造が変化します。カーネル6.8は、システムクラッシュを防ぐために古い.koファイルのロードを拒否します。これが、ドライバーが正式に動作しなくなる原因です。

AKMODS vs DKMS:何が違うのか?

どちらもモジュールの再コンパイルを自動化しますが、その運用思想は大きく異なります。

1. DKMS (Dynamic Kernel Module Support)

UbuntuやDebianで一般的なDKMSは、ドライバーのソースコードを直接コンパイルし、生成された.koファイルをシステムディレクトリに配置します。しかし、DNFパッケージマネージャーを介さないため、不要なファイルが残ったり、完全にアンインストールしようとした際に競合が発生したりすることがあります。

2. AKMODS (Akmod Management System)

これはFedoraとRPM Fusionの「特産品」です。akmodsは単にファイルをコピーするのではなく、より体系的なプロセスを実行します。ソースコードを取得し、完全なRPMパッケージとしてビルドしてから、DNFを通じてシステムにインストールします。この手法により、ドライバーは正規のソフトウェアとして管理され、非常にクリーンでロールバックも容易になります。

akmods’のインストールと設定方法

akmodsを動作させるには、コンパイルツールセットとカーネルのヘッダーファイルが必要です。このプロセスは非常に高速で、エラーが発生することも稀です。

ステップ1:基本ツールのインストール

ターミナルを開き、以下のコマンドを入力してakmodsと依存パッケージをインストールします:

sudo dnf install akmods kernel-devel kernel-headers gcc make elfutils-libelf-devel

ヒント: kernel-develパッケージは、現在実行中のカーネルバージョンと正確に一致している必要があります。アップデートしたばかりでまだ再起動していない場合は、このコマンドを実行する前に一度マシンを再起動してください。

ステップ2:サービスの有効化

akmodsサービスが常に待機状態になるよう、以下のコマンドを実行します:

sudo systemctl enable --now akmods

実践:akmodを使用してNvidiaドライバーをインストールする

Nvidiaの公式サイトから.runファイルをダウンロードする(アップデート時にシステムを壊しやすい)代わりに、RPM Fusionリポジトリのakmodを使用することをお勧めします。Non-freeリポジトリを有効にした後、以下のコマンドを実行します:

sudo dnf install akmod-nvidia

この時、akmodsはバックグラウンドでkmod-nvidiaパッケージを静かにコンパイルします。Ryzen 5のようなミドルレンジのCPUでは、このプロセスに約2〜4分かかります。一時的にCPU使用率が高くなりますが、これはドライバーが準備されている良い兆候です。

トラブルシューティング:akmodsが自動実行されない場合

万が一、ビルドの途中で停電が発生したりディスク容量がいっぱいになったりすると、akmodsがモジュールのビルドを完了できないことがあります。その場合は、手動で作業を強制させることができます。

すべてのモジュールの再コンパイルを強制する

以下のコマンドは、すべてのakmodパッケージをスキャンし、現在のカーネルで不足しているものを再ビルドします:

sudo akmods --force

エラーログの確認

上記のコマンドが失敗した場合は、ログディレクトリで原因を探ります:

ls /var/cache/akmods/

ビルドごとに個別の.logファイルが作成されます。よくあるエラーの原因は、必要なライブラリの不足、あるいはリリースされたばかりの新しいカーネルにドライバーのバージョンがまだ対応していないことです。

システムを常に安定させるための3つの「黄金律」

週明けの月曜日の朝にドライバーの修復に追われないための、私の経験則を紹介します:

  1. ディスクの空き容量を確保する: ビルドプロセスには/varディレクトリ内に約1GBの空き容量が必要です。ディスク容量が不足していると、akmodsは確実に失敗します。
  2. アップデート後の忍耐: DNFが完了を報告しても、すぐに再起動しないでください。akmodsがバックグラウンドでRPMパッケージングプロセスを開始するまで、約1分ほど待ちましょう。
  3. GRUBメニューを活用する: Fedoraは常に3つの古いカーネルバージョンを保持しています。最新バージョンで問題が発生した場合は、落ち着いて古いバージョンを選択して起動し、コミュニティによってドライバーのコードが更新されるのを数日待ちましょう。

まとめ

akmodsは単なるツールではなく、Linuxを管理するためのプロフェッショナルなアプローチです。FedoraでNvidiaやVirtualBoxを使用しているなら、今すぐakmodに切り替えましょう。最新のカーネルテクノロジーを享受しながら、アップデートのたびにドライバーが壊れる心配をする必要がなくなります。

Share: