Ubuntu 22.04でaptが使えなくなったときの備忘録（2023/7/7）

# ０．はじめに
&emsp;色々と触っていたときに「sudo apt update」で以下のエラーが出てしまい、どうしよもなくなってしまったので、その時の対処方を備忘録として残しておきます。
```terminal:output
E: ソース https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ / に関してオプション Signed-By の値が競合します: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg != 
E: ソースのリストを読むことができません。
```
何をやったらこうなったのか不明なため参考になるかわかりませんが、よかったら参考にしてください。

# １．対処法
&emsp;結論から言うと[NVIDIA公式のトラブルシューティング](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/troubleshooting.html)に書いてありました！
一応手順を書いておきます↓
（エラーに書いてあるとおりですが、同じリポジトリへの別の参照が存在しているためこのエラーが出ているみたいです。）
### ・競合するリポジトリの参照
```terminal:terminal
grep "nvidia.github.io" /etc/apt/sources.list.d/*
```
nvidia.github.ioの名前がついた一覧が表示されます。

### ・競合する参照を持つファイルのリストを取得
```terminal:terminal
grep -l "nvidia.github.io" /etc/apt/sources.list.d/* | grep -vE "/nvidia-container-toolkit.list\$"
```
grepコマンド
・-v : パターンに一致しない行を出力
・-E : 拡張正規表現を使用（egrep コマンドと同じ動作）

### ・リスト化されたファイルを削除する
```terminal:terminal
cd /etc/apt/
ls -la
rm sources.list.d
```
（ls -laは「sources.list.d」があるか確認のため）
#### 以上！　これで「sudo apt update」が使えるようになるはずです。
・
・
・
しかし、今度はdocker runができず↓
```terminal:output
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container
process: error during container init: error running hook #0: error running hhok: exit status 1, stdout* ,stdrr: Auto-detected mode as `legacy'
nvidia-container-cli* initialization error: nvm error: friver not loaded: unknown
```
nvidia-smiを実行してみても認識できておらず、設定のグラフィックを確認しても有効化グラフィックドライバーが使用しているGPUと違っていました。


そのため、以下コマンドを実行し、一度すべてのnvidiaパッケージを削除して再インストールを行います。
```terminal:terminal
sudo apt --fix-broken install
sudo apt remove *nvidia*
sudo apt install nvidia-driver-530
```
ここから先はピンクの画面がでるため[Ubuntu 22.04 LTSにてDocker内でGPUを動かすための環境構築手順](https://qiita.com/cpx/items/8069cb7c9896e16febcf#22-nvidia-driver%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)の2.2. NVIDIA driverインストールに書かれているとおりやればできます。

### ※docker runで以下のエラーが出た場合の対処法
```terminal:output
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
```
以下のコマンドを実行
（参考：[docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. ERRO[0000] error waiting for container: context canceledを解決する](https://qiita.com/murakamixi/items/5f6cf5c1ab6b4090f64a)）
```terminal:terminal
sudo apt-get install nvidia-container-runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey |   sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list |   sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
sudo apt-get install nvidia-container-runtime
service docker restart
```

# 2.参考文献
・[NVIDIA公式のトラブルシューティング](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/troubleshooting.html)
・[Ubuntu 22.04 LTSにてDocker内でGPUを動かすための環境構築手順](https://qiita.com/cpx/items/8069cb7c9896e16febcf#22-nvidia-driver%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
・[docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. ERRO[0000] error waiting for container: context canceledを解決する](https://qiita.com/murakamixi/items/5f6cf5c1ab6b4090f64a)