UbuntuにRTX2080用のNvidiaドライバのインストールに手こずった

## 経緯

自作PCでi9-9900k、RTX2080を持っているのにゲームだけではもったいない！！
せや、機械学習用にもできたらいいな！！

と、思いゲーム用に組んだPCにUbuntu及びNvidiaドライバ、CUDAをインストールしようとしたところ
1. Ubuntuインストール後、Nvidiaドライバが入っていない状態でUbuntuデフォルトのディスプレイドライバが認識しなく画質が落ちていた。
2. Nvidia公式サイトから`.run`ファイルをDLしてインストールを試みるが

```log
installing dkms kernel module~~
```

というところでバーが5%のところで永遠に止まる。
3. Ubuntu18.4の他に16, 19も試すがどちらもだめ。

といった状態でした。

## PC構成

- CPU: Intel Core i9-9900k
- M/B: ROG MAXIMUS XI HERO (WI-FI)
- RAM: CORSAIR DDR4 CMK32GX4M2A2666C16
- ROM
    - WD Red 3TB * 2 (ゲームデータ保存用とその他保存用)
    - Crucial SSD 500GB MX500 CT500MX500SSD1/JP(WindowsOS)
    - Crucial SSD 250GB MX500 CT250MX500SSD1/JP(Ubuntu)
- GPU: ASUS NVIDIA GeForce RTX 2080 搭載 トリプルファンモデル 8GB ROG-STRIX-RTX2080-O8G-GAMING
- OS: Windows 10 Enterprise(homeを学校からもらったライセンスでアップデート)

## 解決策

原因を単刀直入に言うと、

```text
BIOSのセキュアブートが有効になっていた。
```

でした。
そのため、セキュアブートの無効化からNvidiaドライバのインストールまで解説しようかと思います。

## インストール手順

### Step.1

Ubuntuをインストール→USBに書き込み
version: ubuntu18.04LTS
`English`でインストールしておく(ISO作成時にトラブルの元になるので)

### Step.2

BIOSのセキュアブートを無効化。

>カーネルのほうで、署名なしドライバを読み込めるように設定を変える。 → （＊）こちら （UEFIからローダ画面に移る際にモードを選択する画面が出るようになる）
https://qiita.com/chiral/items/3105c52fc9fdb528dbd7

こちらの設定ではうまくインストールできなかったためちゃんと無効化しましょう。

ASUSのBIOSではセキュアブートの無効化が特殊です。

```text
Advanced Mode
起動→セキュアブートメニュー→OSタイプを非UEFIモードに設定
&
セキュアブートキーの削除(もとに戻せるので安心して削除)
```
[詳しく](https://bbs.kakaku.com/bbs/K0000800527/SortID=20715303/#20715303)

### Step.3

必要なものをインストール

```bash
sudo apt update
sudo apt upgrade
sudo apt install -y vim gcc make
```

必要に応じてSSH設定もインストール

```bash
sudo apt-get install ssh
systemctl start sshd
```
[参考](https://qiita.com/shimidai2100/items/bc210a3e09ee3dd0fc1a)

### Step.4

CUDAのインストール。
一緒にNvidiaドライバも入ってくることがあるため。
(実際入ってこなかった)

[CUDA Toolkit 10.1 Download](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=debnetwork)

(必要に応じて違うバージョンのCUDAをインストールしてください。)

### Step.5

Nvidiaドライバの入手。
[nvidia公式](https://www.nvidia.co.jp/Download/index.aspx?lang=jp)

`NVIDIA-Linux-x86_64-vvv.xx.run`をダウンロードし、わかり易い場所に保存。
sshで接続している場合は

```bash
scp [NVIDIA-Linux-x86_64-vvv.xx.runのpass] [PC-name]@[local-ip]:[保存先のpass]
```

### Step.6

nouveau無効化。

まず、デフォルトで入っていないかもしれないため

```bash
lsmod | grep -i nouveau 
```

を試し、何も表示されなかったらスルーしてOK

以下、無効化

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

### Step.7

GUIモードからCUIモードに。
(このとき、ユーザー名とPW、Nvidiaドライバの保存先を覚えておく)

```bash
sudo telinit 3
```

ユーザー名→PW
を入力して、

```bash
# Nvidiaドライバのあるディレクトリに移動(例はデスクトップに保存した場合)
cd ~/Desktop
```

### Step.8

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

```bash
sudo bash NVIDIA-Linux-x86_64-vvv.xx.run
```

あとは命令に沿ってインストール。

```bash
# 再起動
sudo reboot
```

### 最後(正常にインストールできたかの確認)

- Nvidiaドライバがインストールされたかの確認

```bash
nvidia-smi
```
↓このような画面が表示されればインストール完了。

```log
Sat Feb  1 11:49:41 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.44       Driver Version: 440.44       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2080    Off  | 00000000:01:00.0 Off |                  N/A |
| 25%   29C    P8    11W / 245W |    204MiB /  7982MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1414      G   /usr/lib/xorg/Xorg                           124MiB |
|    0      1602      G   /usr/bin/gnome-shell                          77MiB |
+-----------------------------------------------------------------------------+
```

- CUDAがインストールされたかの確認

BashにCUDAのパスを通した後、

```bash
# pathが表示されればOK
which nvcc

# バージョンが表示されればOK
nvcc -V
```

## さいごに

このせいで半年程格闘してました。おのれ、、、セキュアブート、、、、
ちなみにセキュアブート無効化してもWindowsは起動できました。

良い、AIライフを。。。