ホーム / z - How To / Linux 7.0カーネル更新でNVIDIAドライバのDKMSビルド失敗〜完全復旧までの記録

Linux 7.0カーネル更新でNVIDIAドライバのDKMSビルド失敗〜完全復旧までの記録

はじめに:Zorin OSの画面更新が突如停止

本日発生したZorin OS 17(Ubuntu 24.04 LTSベース)環境での事象であるが、AI(Gemini)を使って解決できたので紹介する。

HWE(Hardware Enablement)カーネルのアップデート(linux-image-7.0.0-28-generic 等)が降ってきた際、NVIDIAドライバのDKMS自動ビルドがクラッシュ。 それに引きずられ aptdpkg が破綻。パッケージ更新が完全に停止するトラブルが発生した、再起動したらKernel panicもあり、焦った。

というわけで今回の記事は、発生したエラーの根本原因の特定から、apt の保留(held back)ループの解体、NVIDIAドライバ(nvidia-driver-580)の正常適用までの全記録である。

1. 発生した症状とエラーログ

apt upgrade 実行時、dpkg がリターンコード 11 / 1 で異常終了。 パッケージ更新が中断・保留状態へ突入。

Plaintext

/etc/kernel/header_postinst.d/dkms:
 * dkms: running auto installation service for kernel 7.0.0-28-generic
...
Building module:
... (bad exit status: 2)
Error! Bad return status for module build on kernel: 7.0.0-28-generic (x86_64)
Consult /var/lib/dkms/nvidia/580.126.09/build/make.log for more information.
dpkg: パッケージ linux-headers-7.0.0-28-generic の処理中にエラーが発生しました

/var/lib/dkms/nvidia/580.126.09/build/make.log を解析。 原因はカーネル内部API変更に伴う C 言語のビルドエラー。

Plaintext

nvidia/nv-mmap.c:929:42: error: ‘VMA_LOCK_OFFSET’ undeclared (first use in this function)
make[4]: *** [/usr/src/linux-headers-7.0.0-28-generic/scripts/Makefile.build:289: nvidia/nv-mmap.o] エラー 1

原因の構造

  1. カーネル内部APIの破壊的変更: Linux 7.0 内の mmap / VMA 関連関数(VMA_LOCK_OFFSET 等)が削除。
  2. ドライバ側の追従不足: 使用していた NVIDIA ドライバ(580.126.09)のコードが 7.0 の変更に未対応でビルド失敗。
  3. apt / dpkg の不整合: post-installation スクリプトの失敗により依存関係がロック。Zorin OSのグラフィック関連パッケージを一括で保留(held back)状態へ追い込み。

2. 復旧手順(完全解決フロー)

STEP 1: 安定版カーネル(6.x系)での起動確認

再起動してみたところ、Kernel7系ではカーネルパニックで起動しない。そこで7.0 系を避け、正常動作する旧カーネル(6.17/6.8系)で起動。

Bash

uname -r
# 7.0.0-28-generic 以外で起動していることを確認

※PC再起動時に GRUB メニュー(Advanced options for Zorin)から旧カーネルを選択。

STEP 2: 保留状態・依存関係の連鎖解体

Zorin OS固有の依存関係が絡む状態でも、NVIDIAドライバ(nvidia-driver-580 および nvidia-dkms-580)の明示的な再インストール指定により、apt 側に依存関係を修正させることが可能となった。

Bash

sudo apt install --reinstall nvidia-driver-580 nvidia-dkms-580

apt が最新ビルド(580.173.02)を自動取得。 ヘッダーが存在する既存の安定カーネル(6.17.0-22-generic 等)向けに DKMS モジュールのビルド・配置が正常完了。

STEP 3: パッケージ依存関係のクリーンアップ

未完了処理の修復と不要パッケージの完全除去。

Bash

sudo apt --fix-broken install
sudo dpkg --configure -a
sudo apt autoremove --purge

3. 仕上げ:Failed to initialize NVML への対処

パッケージ処理成功後、nvidia-smi 実行時に発生したエラー。

Plaintext

$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
NVML library version: 580.173

原因は「メモリ上にロード済みの旧カーネルモジュール(580.126)」今回「新規適用されたユーザー空間ライブラリ(580.173)」のバージョン不一致。

解決策

OSを上記を組み込んだ新カーネルモジュール(7.0.0-28-generic)で再起動する。

Bash

sudo reboot

再起動後に nvidia-smi を実行。 GPUステータスおよび Driver Version: 580.173.02 の正常表示を確認。復旧完了。

まとめ:現場での教訓

  • 最新HWEカーネル(特にメジャーバージョンアップ直後)とNVIDIAドライバのバッティングは日常茶飯事
  • apt が保留(held back)ループに陥った際、壊れたカーネルメタパッケージを追うのは不毛。主要ドライバ(nvidia-driver-XXX)の明示的再インストール指定が最短の解決策。
  • 安定稼働を重視する環境では、NVIDIA側の対応確認まで linux-generic-hwe-24.04 等のカーネルメタパッケージを apt-mark hold で固定運用するのが現実解。

今回のようなカーネルとドライバの足並みの乱れは、Linux運用における定番の障害。 同様の状況で手詰まりになった際の参考になれば幸いである。