GPUドライバのインストールで少しレアな現象に悩まされた

# 現象
nvidia-smiが突然使えなくなり、driverの再インストールを試みたが上手くいかなかった

# 結論
最新版のドライバで --no-cc-version-check が使えず、gccのversion mismatchが起こり続けていた。gccのバージョン上げてシンボリックリンクを正しくすると解決

# 環境
* Ubuntu 22.04
* GPUドライバ (NVIDIA-Linux-x86_64-535.146.02)

# 内容と推測
Ubuntu 22.04で使っていたGPUがいつの間にか反応しなくなり、nvidia-smiをしたところ反応せず。
GPUのドライバが使えない状況になっていた。

Ubuntuのセキュリティアップグレード等をしたかもしれないので、その影響かも

# やったこと
### GPUドライバのインストール
いつも通りNVIDIAのホームページからGPUドライバをダウンロード

* 事前準備
画面が消えるので、SSHでアクセスできるようにしている
```
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install openssh-server
ip address
```

* nouveauの無効化
```
sudo vi /etc/modprobe.d/blacklist-nouveau.conf
　　blacklist nouveau
　　options nouveau modeset=0
sudo update-initramfs -u
```
* gdmのサービス停止
```
sudo service gdm stop
```

* ドライバインストール
```
sudo sh ./<ドライバ名> --dkms
```
gccのバージョンミスマッチが起きていたので、臨時対処でオプション追加

```
sudo sh ./<ドライバ名> --dkms --no-cc-version-check
```
これでもgccのバージョンをチェックされてインストールできない。。。

### おとなしくgccのバージョンアップを実施
エラーログを見るとv12を要求されていたのでインストール
```
sudo apt-get update
sudo apt-get -y install gcc-12
```

これだけだと既にあるv11が使用されるため不十分

### シンボリックリンクの確認と変更
シンボリックリンクを変えないと、ドライバインストール時に参照されるのがv11のままになってしまう
ここからは具体的な実行結果も
* gccの確認
```
user@user:~$ ls /usr/bin/gcc* -l
user@user:/usr/bin$ ls -l gcc*
lrwxrwxrwx 1 root root  6  1月 14 23:08 gcc -> gcc-11
lrwxrwxrwx 1 root root 23  5月 13  2023 gcc-11 -> x86_64-linux-gnu-gcc-11
lrwxrwxrwx 1 root root 23  5月 13  2023 gcc-12 -> x86_64-linux-gnu-gcc-12
lrwxrwxrwx 1 root root  9  8月  5  2021 gcc-ar -> gcc-ar-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-ar-11 -> x86_64-linux-gnu-gcc-ar-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-ar-12 -> x86_64-linux-gnu-gcc-ar-12
lrwxrwxrwx 1 root root  9  8月  5  2021 gcc-nm -> gcc-nm-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-nm-11 -> x86_64-linux-gnu-gcc-nm-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-nm-12 -> x86_64-linux-gnu-gcc-nm-12
lrwxrwxrwx 1 root root 13  1月 14 23:10 gcc-ranlib -> gcc-ranlib-11
lrwxrwxrwx 1 root root 30  5月 13  2023 gcc-ranlib-11 -> x86_64-linux-gnu-gcc-ranlib-11
lrwxrwxrwx 1 root root 30  5月 13  2023 gcc-ranlib-12 -> x86_64-linux-gnu-gcc-ranlib-12
```
gcc-11に紐づけられていることが分かる

* シンボリックリンクの変更と確認
```
user@user:~$ cd /usr/bin/
user@user:~$ sudo ln -nfs gcc-12 /usr/bin/gcc
user@user:~$ sudo ln -nfs gcc-ranlib-12 /usr/bin/gcc-ranlib

user@user:/usr/bin$ ls -l gcc*
lrwxrwxrwx 1 root root  6  1月 14 23:08 gcc -> gcc-12
lrwxrwxrwx 1 root root 23  5月 13  2023 gcc-11 -> x86_64-linux-gnu-gcc-11
lrwxrwxrwx 1 root root 23  5月 13  2023 gcc-12 -> x86_64-linux-gnu-gcc-12
lrwxrwxrwx 1 root root  9  8月  5  2021 gcc-ar -> gcc-ar-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-ar-11 -> x86_64-linux-gnu-gcc-ar-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-ar-12 -> x86_64-linux-gnu-gcc-ar-12
lrwxrwxrwx 1 root root  9  8月  5  2021 gcc-nm -> gcc-nm-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-nm-11 -> x86_64-linux-gnu-gcc-nm-11
lrwxrwxrwx 1 root root 26  5月 13  2023 gcc-nm-12 -> x86_64-linux-gnu-gcc-nm-12
lrwxrwxrwx 1 root root 13  1月 14 23:10 gcc-ranlib -> gcc-ranlib-12
lrwxrwxrwx 1 root root 30  5月 13  2023 gcc-ranlib-11 -> x86_64-linux-gnu-gcc-ranlib-11
lrwxrwxrwx 1 root root 30  5月 13  2023 gcc-ranlib-12 -> x86_64-linux-gnu-gcc-ranlib-12
```
とりあえずgccとgcc-ranlibをgcc-12にリンクしなおした。正しいかは分からないのでご注意を

## GPUドライバインストール
```
sudo service gdm stop
sudo sh ./<ドライバ名> --dkms
```
インストールできた！