Ubuntu22.04 + RTX3060環境 にNvidia ドライバをインストールしたときのメモ

# はじめに
Ubuntu22.04にNvidia Driverをインストールしたときの作業メモです。
参考にさせていただいた記事。ありがとうございました。
-  [【注意】ubuntu-drivers devicesでお薦めされたNVIDIA GPUドライバーをインストールしたら事故になります。](https://qiita.com/y-vectorfield/items/72bfb66d8ec85847fe2f)
-  [Ubuntu22.04のUbuntu-drivers autoinstallでubuntu-drivers "UnboundLocalError: local variable 'version' referenced before assignment" when installing nvidia driversエラー](https://qiita.com/oozzZZZZ/items/5a48f1b89ed241a587b5)
-  [ubuntu-drivers autoinstall非推奨になってた件](https://blog.turai.work/entry/20230611/1686459567)

## PC環境

- OS: 
```
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04 LTS
Release:	22.04
Codename:	jammy
```
- GPU: GeForce RTX 3060

# Nvidiaドライバのインストール

成功例から記載しますが、失敗例も書いておきます。

## (成功) バージョン指定してインストール

参考： [【注意】ubuntu-drivers devicesでお薦めされたNVIDIA GPUドライバーをインストールしたら事故になります。](https://qiita.com/y-vectorfield/items/72bfb66d8ec85847fe2f)

事故にあったようです。OSから再インストールし直して作業しています。

### nouveauの無効化
```bash
$ lsmod | grep nouveau
nouveau              2367488  2
mxm_wmi                16384  1 nouveau
drm_ttm_helper         16384  1 nouveau
ttm                    98304  2 drm_ttm_helper,nouveau
drm_display_helper    184320  1 nouveau
drm_kms_helper        200704  2 drm_display_helper,nouveau
i2c_algo_bit           16384  1 nouveau
drm                   581632  7 drm_kms_helper,drm_display_helper,drm_ttm_helper,ttm,nouveau
wmi                    32768  5 asus_wmi,wmi_bmof,mfd_aaeon,mxm_wmi,nouveau
video                  65536  2 asus_wmi,nouveau
```
nouveauが働いてくれているので、起動しないようにブラックリストに追加する。

```bash
sudo sh -c "echo 'blacklist nouveau' > /etc/modprobe.d/blacklist-nouveau.conf"
sudo sh -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
sudo reboot
```

### Nvidia Driverのインストール
```
# リポジトリの追加
$ sudo add-apt-repository ppa:graphics-drivers/ppa
# パッケージリストの更新
$ sudo apt update
```

```bash
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002504sv000010DEsd00002504bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA106 [GeForce RTX 3060 Lite Hash Rate]
driver   : nvidia-driver-535-server-open - distro non-free recommended
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-535 - distro non-free
driver   : nvidia-driver-525 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

`nvidia-driver-535-server-open - distro non-free recommended`となっているが、openがついているのでこれをインストールしてはいけない。535か、実績の多そうな525かどちらかをインストールする。今回は525をインストールした。

```
$ sudo apt install -y nvidia-driver-525
```
ここでセキュアブート用の一時的なパスワードが求められる。リブート後にUEFIブートマネージャでMOK登録画面に進み、そこでこのパスワードを使用する。

```bash
$ sudo reboot
```
OSの起動前の選択で、Enroll MOKを選択する。ここで何もせずにOS起動するとドライバがインストールされない。一度失敗しました。Enroll MOK -> Continue -> Yes -> Password -> Reboot の順で入力していく。

再起動後、nvidia-smiが動作するのを確認する。
```bash
$ nvidia-smi
Mon Jul 10 00:35:46 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.06   Driver Version: 525.125.06   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   39C    P8    16W / 170W |    186MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1824      G   /usr/lib/xorg/Xorg                 64MiB |
|    0   N/A  N/A      1989      G   ...ome-remote-desktop-daemon        2MiB |
|    0   N/A  N/A      2030      G   /usr/bin/gnome-shell              117MiB |
+-----------------------------------------------------------------------------+
```
## (失敗) nvidia-driverインストール後にEnroll MOKを選択せずに再起動した

```bash
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. 
Make sure that the latest NVIDIA driver is installed and running.
```
この表示がとても悲しい。説明は読みましょう。

念の為、既存のドライバなどアンインストールして、再度インストールしました。
```bash
$ sudo apt-get --purge remove nvidia-*
```

## (失敗) autoinstallしてみた
```bash
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
```
```bash
$ sudo ubuntu-drivers autoinstall
Traceback (most recent call last):
  File "/usr/bin/ubuntu-drivers", line 513, in <module>
    greet()
  File "/usr/lib/python3/dist-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/decorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/bin/ubuntu-drivers", line 432, in autoinstall
    command_install(config)
  File "/usr/bin/ubuntu-drivers", line 187, in command_install
    UbuntuDrivers.detect.nvidia_desktop_pre_installation_hook(to_install)
  File "/usr/lib/python3/dist-packages/UbuntuDrivers/detect.py", line 839, in nvidia_desktop_pre_installation_hook
    with_nvidia_kms = version >= 470
UnboundLocalError: local variable 'version' referenced before assignment
```

同様のエラーが出ている方の記事([Ubuntu22.04のUbuntu-drivers autoinstallでubuntu-drivers "UnboundLocalError: local variable 'version' referenced before assignment" when installing nvidia driversエラー](https://qiita.com/oozzZZZZ/items/5a48f1b89ed241a587b5))。こちらによるとpythonで書かれたインストーラーの"-"を区切る場所がおかしいためにこのエラーが出るらしい。

インストーラを修正する。
```bash
$ sudo nano /usr/lib/python3/dist-packages/UbuntuDrivers/detect.py
```
で該当ファイルを開き
`version = int(package_name.split('-')[-1])`
この部分を
`version = int(package_name.split('-')[2])`
に修正する。

```bash
$ sudo ubuntu-drivers autoinstall
```

再起動して確認。
```bash
$ nvidia-smi 
No devices were found
```
そして、なぜかWifiもEtherもネットワークデバイスがすべて繋がらなくなった。
どうやら非推奨らしい。[ubuntu-drivers autoinstall非推奨になってた件](https://blog.turai.work/entry/20230611/1686459567)

OS丸ごとを再インストールしました。

# さいごに
先人の記事に感謝です。