Featured image of post 【Linux】Fedora43:NVIDIAドライバーとSecureBootを構成

【Linux】Fedora43:NVIDIAドライバーとSecureBootを構成

こんにちは。

今回は、Fedora 43 Workstation上に、NVIDIAドライバーを入れ、セキュアブートenabledで起動できる状態にしていきます。

基本的にはRPMFusionのやり方に従っていますが、いくつかポイントがあります。

◆前提条件

  • セキュアブート無効の状態でFedora43をインストール済み
  • NVIDIAのGPU(Quadro/Tesla世代以上)を積んでいる

◆RPMFusionリポジトリ有効化

◇リポジトリの確認

Fedora公式のリポジトリには、オープンソースのフリーソフトウェアのみが入っています。
しかし、ユーザーとしてはNVIDIAのドライバーや各種オーディオコーデックなど、プロプライエタリなパッケージを使わざるを得ない場面があります。
Fedora向きに、フリーではないソフトウェアをまとめたリポジトリがRPMFusionです。

最近のFedoraは、インストール時に「プロプライエタリのリポジトリ」を有効化するか聞かれるようです。
有効化されている場合は、既にRPMFusionのNVIDIA/Steamパッケージに限ったものが有効化されています。

確認する

dnf repolist

rpmfusion-nonfree-nvidia-driverがあれば大丈夫。

◇リポジトリの追加

なかった場合は、追加します。(参考:RPMFusion

# Free, Nonfree リポジトリ追加
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

# openh264有効化
sudo dnf config-manager setopt fedora-cisco-openh264.enabled=1

# 更新
sudo dnf upgrade 

◆NVIDIAドライバーをインストール

ここからが本番です!

# ドライバーとCUDAをインストールする
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda

# akmod実行(カーネルをビルド)
sudo akmods --force 

akmodsコマンドの終了には時間がかかることがありますが、気長に待ちましょう。

◇罠:待つ

コマンドが終わったら直ぐに再起動と行きたいところですが、実はakmodsは終了しても裏で動き続けているのです。
これを無視して再起動すると、起動中にビルドしようとし、結局失敗してしまうこともあります。私はここで手こずりました。
裏のakmodsが終わるまで待つ必要があります。終わったか確認するには、

# akmodsが裏で走っているか確認する
ps aux | grep akmods 

これでいろいろ出てきたら、まだビルド中です。
プロセスが一つだけ(このコマンドを自己参照)だけになったら、終了です。再起動しましょう。

# 再起動
systemctl reboot

さて、起動中kernel NVIDIA driver missing...とか出ていなければ大丈夫。
無事に有効化できたか確認します。

# NVIDIA GPUの状態を確認する
nvidia-smi

四角に囲まれたかっこいいのが出てきたら成功です。

◆セキュアブートを有効化

まだ戦いは終わりません。セキュアブートを有効化します。
Fedoraはデフォルトで署名がついていてセキュアブートに対応していますが、今回はakmodsを使ってカーネルを実機でビルドしているので、実機で署名をする必要があります。

ここではエラーが多くなるので、注意して進みましょう。ちなみに、セキュアブートの設定はセキュリティーの面から見ても必須ではありません。単純に壊れるきっかけが増えるので、特別美しい構成が好きな方以外はここで終わりにするのもアリです。

◇MOKキーをインポートする

自己署名をUEFIで信頼するために用いられるのが、MOKキーです。
OS側で作って、UEFIで追加します。

# 必要なツールをインストール
sudo dnf install kmodtool akmods mokutil openssl

# キーを作成
sudo kmodgenca -a

# key exist的なエラーは無視して大丈夫。既に鍵があるという意味です。

# MOKキーとしてインポート
sudo mokutil --import /etc/pki/akmods/certs/public_key.der

# パスワードを聞かれるんで、決めます。これは、再起動後のUEFIでのみ使う使い捨てのパスワードです。

# 再起動
systemctl reboot

見慣れない画面が出てくるかと思います。MOK管理画面です。矢印キーとEnterで操作、Enroll MOK > Continueを選択し、パスワードを入力します。

正しいパスワードを入力すると、MOKキーが追加されます。rebootを選択。

◇akmods再ビルドし、自動署名を有効化

この時点で、akmodsでビルドしたカーネルに、自動で署名がつくようになります。
再ビルドし、署名をつけます。

# akmods再ビルド
sudo akmods --force --rebuild

コマンドが終わっても、油断禁物です。akmodsはとにかく待つ。
先程の終わったか確認するコマンドを打って確認、終わったら再起動します。

無事に再起動し、nvidia-smiも正常なら、ビルド成功です。

◇UEFIで、SecureBootを有効化

ここまででやっと、OS側のセキュアブート対応が準備万端になりました。 ようやく、セキュアブートを有効にできます。

UEFIのBootのメニューから、SecureBootをenableに設定し、保存して再起動します。

再起動できたら、2つコマンドを打って、うまく行ったか確認します。

# NVIDIAが動いているか確認
nvidia-smi

# セキュアブートの有効を確認
mokutil --sb-state

◆ポイントは「待つ」こと

ここらへんの情報は溢れていますが、意外と見落としがちな「待つ」という行為がakmods使いには必要です。
カーネル更新のたびにakmodsが走るので、再起動のタイミングには充分注意して生きるようにしましょう!

nvidia-smi

Hugo で構築されています。
テーマ StackJimmy によって設計されています。