ubuntu環境構築

# 準備

Desktop:HP-550-240jp (graphics=GTX960)
HDDにWindows10が入っているため、SSDを買い、そちらにubuntuを入れることにした。

SSD:WesternDigitalの500GSSD(WDS500G2B0A)
あとは、3.5→2.5inchにするためのアダプタ？
SATAケーブル、電源分岐ケーブル

いざ、筐体を開けてみると、電源は余っていたので、分岐ケーブルはいらなかったのだよな、、、
開けてから買うべきだった。
電源を引っこ抜き、作業開始。
SATAの差込口は１個余っていたけど、随分端っこの方にあって、差し込みにくかった。
とりあえず、SSDを電源につなぐところまでやる。

電源もどして、普通にwin10を起動。
USBメモリを用意して、[本家](http://releases.ubuntu.com/18.04/)より、
ubuntu-18.04.2-desktop-amd64.isoをダウンロードし、書き込み。
[こちら](https://qiita.com/medalotte/items/4bb5cfa709e93d044f1c)を参考にさせてもらった。
フォーマットはFAT32にしておくこと（私のUSBはexFATでフォーマットしていたため、後ほど実施する、USBブートが動かなかった)

USBを挿したまま、Windows10をshutdown。
一度電源を抜いて、空のSSDのSATAケーブルをつなぐ。
HDD(Win10)の方に影響あるのが嫌なので、一旦HDDのSATAは外した。

再起動スタートしたら、間髪いれずF10を連打する。
UEFIの画面になるので、起動順序をUSBハードディスクにする（でもどうやら自動で見てくれるようで、この作業は不要かもしれない)

インストールが始まる。
[インストール手順](https://linuxfan.info/ubuntu-18-04-install-guide)を参考にさせてもらった。
※補足 このサイト内では、最初のGRUB画面でinstallを選択としているが、一番先頭のメニューを選んでも、起動後installerアイコンが画面にあるので、そちらを押して開始してもよい。
また、HDDを外しているので、インストール先も普通に「ディスクを削除してubuntuをインストール」で問題なし。
一通り、インストールして再起動。
ログイン画面にて、ID/passを入力して、デスクトップ環境に入る。

#Windows10とのデュアルブート
Win10とデュアルブートをする必要があるので、一旦shutdownする。
電源を引っこ抜き、HDDを再度つなぎ、電源をつなぎなおして、起動。
この時点で、起動順位は、SSD→USB→HDDとなっている。
grubはまだwindowsを認識していないので、何もしなくてもubuntuが上がる(というか、windowsは選べない)

grubにwindowsを認識させるために、ubuntu似て、以下を実行

```console
$ sudo update-grub
```

これで、grubがwindowsを認識する。
設定の内容は、/boot/grub/grub.cfg に書かれている。

再び、ubuntuを再起動
今度はgrubが上がり、3番目あたりに、Windows boot manager(デバイスのパス)というメニューが出てくるので、
それを選択。windows10が起動する。

〜テスト〜
windows10を再起動してみる。
やはり、grubが上がるので、このまま放置しておくと、ubuntuが上がる。
なお、windows updateをしたときの再起動は、起動順序がなぜか入れ替わっており
(ubuntuのインストールディスクよりもwin10のインストールディスクの方が先になっている)
これはどのような仕掛けになっているか不明。win10がUEFIを通して、入れ替えてるのではないかと思うが、、、、
こうなった場合は、bootのときにF10を押して、再度SSDが一番最初になるように(GRUBによる起動にするように)しなければならなかった。

#日本語環境
最初に日本語入力の設定。設定というほどのものではないけど。
まず、普通にAlt+半角/全角を押しても、日本語モードにならない。
調べてみると、右上の言語バーみたいなところで、日本語(mozc)というのを選択しておかないといけないらしい。
でも、これって１回だけやるだけなのね、、、、

#その他インストール後の設定
[こちら](https://linuxfan.info/ubuntu-18-04-basic-settings)を参考にさせてもらいました。
やったことは、
-パッケージのアップグレード
-言語サポートの設定
-capsとctrlの入れ替え

#ホームディレクトリ直下のディレクトリ
日本語設定で入ったためか、ホームの下の各フォルダが、「デスクトップ」とか「ドキュメント」とか日本語になっている。
GUIで操作しているときはいいのだけど、基本的にCUIで使うので、全部英語に戻す。

```console
$ LANG=C xdg-user-dirs-gtk-update
```
「update Names」を選択して完了。
すでにフォルダにファイルがある場合はrenameではなく、新規作成になるらしいので注意。

```console
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']"
```

#固定IPへの変更
サーバとしても使用するので、IPを固定する。
192.168.1.5

#sshサーバ
リモートログインするために設定する。

```console
$ sudo apt install -y openssh-server
```
基本的にはconohaでやったとおり。
/etc/ssh/sshd_configの設定をPasswordAuthentication、ChallengeResponseAuthenticationをyesにする。
一旦sshd再起動
sudo systemctl restart sshd
パスワードで入れるようになったので、公開鍵を送り込む。
ubuntuでは、公開鍵の場所設定がコメントアウトされていたので、有効に。

PasswordAuthentication、ChallengeResponseAuthenticationの設定を戻して再び再起動。

#NVIDIA driverのインストール
セキュアブートを無効化しておく。

```shell
$ sudo ubuntu-drivers autoinstall
```

他のサイトを見ていると、デフォルトで設定されているnouveauを停止するために、blackistに追加したりなどやらないと
いけないという話だったが、これで問題なかった。

```
Mon Jul 15 20:55:31 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 390.116                   |
|-------------------------------+----------------------+----------------------+
| 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 GTX 960     Off  | 00000000:01:00.0  On |                  N/A |
| 34%   36C    P2    25W / 120W |    383MiB /  1993MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1230      G   /usr/lib/xorg/Xorg                            24MiB |
|    0      1269      G   /usr/bin/gnome-shell                          48MiB |
|    0      1544      G   /usr/lib/xorg/Xorg                           148MiB |
|    0      1659      G   /usr/bin/gnome-shell                         156MiB |
+-----------------------------------------------------------------------------+
```
# CUDAのインストール
NVIDIAのサイトより、debファイルをダウンロード

```console
$ sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
$ sudo apt-get update
### cuda-toolkit-9-0 でなく、cudaとすると、NVIDIAのドライバから何からインストールしてしまう模様
$ sudo apt-get install cuda-toolkit-9-0
```
# CuDNNのインストール
7.4.2forCUDA9.0をインストール(特に理由はないが、新しいものだとtensorflowやkerasがうまくいくのか心配だっただけ)
dev、docもインストール。16用だけども。。。

# dockerインストール
docker-ceをインストールする。
[公式](https://docs.docker.com/install/linux/docker-ce/ubuntu/)にやり方が乗っているので、その通りに。
まずは、不足しているものをインストール

```shell
$ sudo apt install -y apt-transport-https gnupg-agent
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt install -y docker-ce
```
実行してみる

```shell
$ docker run --rm hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
```
権限が足らんらしい。自分のアカウントをdockerグループに追加。

```shell
$ sudo usermod -a -G docker {username}
```
再び実行する。イメージを落として、以下のようなメッセージが出て、OK。

```shell
$ docker run --rm hello-world
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

# goのインストール
最初は apt でインストールしようとしたのだけど、ubuntu18.04だとgoの最新が1.10で止まってる模様。18.04はLTSなんだし、デフォルトで用意してほしいものだけど、、、

公式をみていると、やり方が3つ。

1. ダウンロードしてから、/usr/localにtar.gzを展開。
1. aptにppaを追加して、apt-getでインストール
1. snapを使用してインストール

ダウンロードして展開するのはパッケージ管理的に気が進まず、なのでsnapを使おうかとも思ったのだけど、なんかsnappyって使ってる人少ない気がするのですよね、、、、
ということで、aptで実施することにする。←ハマりたくない人です笑

```shell
# パッケージリストにppaを追加
$ sudo add-apt-repository ppa:longsleep/golang-backports
# 更新
$ sudo apt-get update
# インストール
$ sudo apt-get install golang-go
# 確認
$ go version
go version go1.13.4 linux/amd64
```
# boot時のカーネル変更
ubuntuは何回かは apt-get update等はやっていたけど、 久しくdeepに触っていなかった。
久々にログインしていろいろ見てみるかと思って触っていたところ、nvidia-smiがエラーになっていることに気づく。え？なんでだろう、、、、
いろいろ調べてると、kernelのバージョンアップによるものらしい。いつの間にか、linuxカーネルって5.3(5.3.0-26-generic)まで進んでるのね。nvidiaのドライバは390と、古いものを使っていて恐らく新しいカーネルがサポートしてない的な感じだろうか。
しょうがないので、kernelを前のバージョンに戻してみる。
一番手軽なのが、boot時に選択できるadvanced-optionで、以前のkernelを選択するというもの。
見てみると、kernel5.0.0-37-genericが残っていて(他にも現バージョン/前バージョンカーネルのrecoveryモードがあるが、recoverモードはまず使用しないので、実質1世代前しか存在しない状況。何世代も選択できるようにできたりするのだろうか...)、こちらで起動してみた。

起動すると初期RAMディスクをロード中...とか出るのだけど、、、
(前からこんなん出たっけ？）と思いながら、普通に起動。
nvidia-smiも表示できた。

さて、これを通常の起動の際にも自動的に選択させたいのだが、、、
調べてみると、grub-set-defaultコマンドでやるらしい。
目的のカーネルは、advanced-optionの2番目(0が最初なので、1)のメニュー内の2番目(同じく0が最初なので、2)に存在する。以下のようにやるらしいが、、、

```shell
$ sudo grub-set-default 1>2
```
変更は、/etc/default/grub内の、GRUB_DEFAULT=xxx に反映されるはず、、、、
だが、変わらないじゃないか！！
しょうがないので、直接変更する。

```bash:/etc/default/grub
GRUB_DEFAULT="1>2"
```
以下のコマンドで更新を反映する。

```shell
$ sudo update-grub
```

稼働するようになった。
そろそろdriverも更新しないとな、、、というか、tensorflowも再び追っかけないと、、、

# 再びNVIDIAのdriver更新
使用可能なドライバの確認

```shell
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C03sv00001462sd00003283bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP106 [GeForce GTX 1060 6GB]
driver   : nvidia-driver-430 - distro non-free
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-440 - third-party free recommended
driver   : nvidia-driver-435 - distro non-free
driver   : nvidia-driver-410 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin
```
以前と同様にインストールする。

```shell
$ sudo ubuntu-drivers autoinstall
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    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 GTX 106...  On   | 00000000:01:00.0 Off |                  N/A |
|  0%   23C    P8     4W / 120W |    154MiB /  6075MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1690      G   /usr/lib/xorg/Xorg                            63MiB |
|    0      1817      G   /usr/bin/gnome-shell                          87MiB |
+-----------------------------------------------------------------------------+
```
CUDA Version:10.2って、そんなの入れてないんだけど、対応バージョンを書いてるってことかな。
これ自体は、実施したからといって、何がどうということはないのだが、後々 nvidiaのライブラリ関連をdockerで入れる予定なので、その準備とする。

# またまたドライバの更新 (2020/10/30)
apt upgradeをしていると、保留になっているものがあることに気づく

```shell
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  golang-1.13-go golang-1.13-src libatomic1:i386 libbsd0:i386 libdrm-amdgpu1:i386
  libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libelf1:i386 libexpat1:i386 libffi6:i386 libgl1:i386 libgl1-mesa-dri:i386 libglapi-mesa:i386
  libglvnd0:i386 libglx-mesa0:i386 libglx0:i386 libllvm10:i386 libllvm7 libllvm8:i386 libllvm9
  libllvm9:i386 libnvidia-common-390 libpciaccess0:i386 libsensors4:i386 libstdc++6:i386
  libwayland-client0:i386 libwayland-server0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386 libxcb-sync1:i386
  libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxshmfence1:i386
  libxxf86vm1:i386 linux-hwe-5.4-headers-5.4.0-42 linux-hwe-5.4-headers-5.4.0-45
  linux-hwe-5.4-headers-5.4.0-47
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージは保留されます:
  libnvidia-cfg1-440 libnvidia-compute-440 libnvidia-decode-440 libnvidia-encode-440
  libnvidia-extra-440 libnvidia-fbc1-440 libnvidia-gl-440 libnvidia-ifr1-440
  nvidia-compute-utils-440 nvidia-dkms-440 nvidia-driver-440 nvidia-kernel-common-440
  nvidia-kernel-source-440 nvidia-utils-440 xserver-xorg-video-nvidia-440
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 15 個。
```

nvidiaのドライバはver.440をずっと使用しているが、この更新があるらしい。
何が使えるのか確認してみる。

```shell
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C03sv00001462sd00003283bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP106 [GeForce GTX 1060 6GB]
manual_install: True
driver   : nvidia-driver-440-server - distro non-free
driver   : nvidia-driver-435 - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-455 - third-party free recommended
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-390 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

なんか440が消えている。代わりに440-server???なんだこれ？
とりあえずupgradeをシミュレートしてみると、、、、

```shell
$ apt -s dist-upgrade
注意: これはシミュレーションにすぎません!
      apt は実際の実行に root 権限を必要とします。
      ロックが非アクティブであることから、今この時点の状態に妥当性が
      あるとは言い切れないことに注意してください!
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  golang-1.13-go golang-1.13-src libatomic1:i386 libbsd0:i386 libdrm-amdgpu1:i386
  libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libelf1:i386 libexpat1:i386 libffi6:i386 libgl1:i386 libgl1-mesa-dri:i386 libglapi-mesa:i386
  libglvnd0:i386 libglx-mesa0:i386 libglx0:i386 libllvm10:i386 libllvm7 libllvm8:i386 libllvm9
  libllvm9:i386 libnvidia-cfg1-440 libnvidia-common-390 libnvidia-common-440 libnvidia-compute-440
  libnvidia-decode-440 libnvidia-encode-440 libnvidia-extra-440 libnvidia-fbc1-440 libnvidia-gl-440
  libnvidia-ifr1-440 libpciaccess0:i386 libsensors4:i386 libstdc++6:i386 libwayland-client0:i386
  libwayland-server0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386 libxcb-dri2-0:i386
  libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386 libxcb-sync1:i386 libxcb1:i386
  libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxshmfence1:i386 libxxf86vm1:i386
  linux-hwe-5.4-headers-5.4.0-42 linux-hwe-5.4-headers-5.4.0-45 linux-hwe-5.4-headers-5.4.0-47
  nvidia-compute-utils-440 nvidia-dkms-440 nvidia-kernel-common-440 nvidia-kernel-source-440
  nvidia-utils-440 xserver-xorg-video-nvidia-440
これを削除するには 'apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  libnvidia-cfg1-450 libnvidia-compute-450 libnvidia-decode-450 libnvidia-encode-450
  libnvidia-extra-450 libnvidia-fbc1-450 libnvidia-gl-450 libnvidia-ifr1-450
  nvidia-compute-utils-450 nvidia-dkms-450 nvidia-driver-450 nvidia-kernel-common-450
  nvidia-kernel-source-450 nvidia-utils-450 xserver-xorg-video-nvidia-450
以下のパッケージはアップグレードされます:
  libnvidia-cfg1-440 libnvidia-compute-440 libnvidia-decode-440 libnvidia-encode-440
  libnvidia-extra-440 libnvidia-fbc1-440 libnvidia-gl-440 libnvidia-ifr1-440
  nvidia-compute-utils-440 nvidia-dkms-440 nvidia-driver-440 nvidia-kernel-common-440
  nvidia-kernel-source-440 nvidia-utils-440 xserver-xorg-video-nvidia-440
アップグレード: 15 個、新規インストール: 15 個、削除: 0 個、保留: 0 個。
Inst nvidia-driver-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-gl-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-gl-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-dkms-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst nvidia-kernel-source-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst nvidia-kernel-source-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-kernel-common-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst nvidia-kernel-common-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-dkms-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-decode-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-decode-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-compute-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) [libcuinj64-9.1:amd64 ]
Inst libnvidia-compute-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-extra-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-extra-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-compute-utils-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst nvidia-compute-utils-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-encode-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-encode-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-utils-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst nvidia-utils-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst xserver-xorg-video-nvidia-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-cfg1-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-cfg1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst xserver-xorg-video-nvidia-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-ifr1-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-ifr1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst libnvidia-fbc1-440 [440.100-0ubuntu0.18.04.1] (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64]) []
Inst libnvidia-fbc1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64]) []
Inst nvidia-driver-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-driver-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-gl-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-gl-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-dkms-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf nvidia-kernel-source-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf nvidia-kernel-source-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-kernel-common-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf nvidia-kernel-common-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-dkms-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-decode-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-decode-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-compute-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-compute-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-extra-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-extra-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-compute-utils-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf nvidia-compute-utils-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-encode-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-encode-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-utils-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf nvidia-utils-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf xserver-xorg-video-nvidia-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-cfg1-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-cfg1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf xserver-xorg-video-nvidia-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-ifr1-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-ifr1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf libnvidia-fbc1-440 (450.80.02-0ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])
Conf libnvidia-fbc1-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
Conf nvidia-driver-450 (450.80.02-0ubuntu1 NVIDIA CUDA:developer.download.nvidia.com [amd64])
tomoaki@550-240jp:~$
```

440はアップグレードされ、450がインストールされるとのこと。
440の方はもう必要とされませんと出てるので、削除されそう。まあ、削除されるべきだと思うけども。
でも、ubuntu-drivers devicesを打ったときには450は450-serverとしか出てなかった気がするのだけど。気にせず保留分をアップデートする。

```shell
$ sudo apt dist-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  golang-1.13-go golang-1.13-src libatomic1:i386 libbsd0:i386 libdrm-amdgpu1:i386
  libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libelf1:i386 libexpat1:i386 libffi6:i386 libgl1:i386 libgl1-mesa-dri:i386 libglapi-mesa:i386
  libglvnd0:i386 libglx-mesa0:i386 libglx0:i386 libllvm10:i386 libllvm7 libllvm8:i386 libllvm9
  libllvm9:i386 libnvidia-cfg1-440 libnvidia-common-390 libnvidia-common-440 libnvidia-compute-440
  libnvidia-decode-440 libnvidia-encode-440 libnvidia-extra-440 libnvidia-fbc1-440 libnvidia-gl-440
  libnvidia-ifr1-440 libpciaccess0:i386 libsensors4:i386 libstdc++6:i386 libwayland-client0:i386
  libwayland-server0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386 libxcb-dri2-0:i386
  libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386 libxcb-sync1:i386 libxcb1:i386
  libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxshmfence1:i386 libxxf86vm1:i386
  linux-hwe-5.4-headers-5.4.0-42 linux-hwe-5.4-headers-5.4.0-45 linux-hwe-5.4-headers-5.4.0-47
  nvidia-compute-utils-440 nvidia-dkms-440 nvidia-kernel-common-440 nvidia-kernel-source-440
  nvidia-utils-440 xserver-xorg-video-nvidia-440
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  libnvidia-cfg1-450 libnvidia-compute-450 libnvidia-decode-450 libnvidia-encode-450
  libnvidia-extra-450 libnvidia-fbc1-450 libnvidia-gl-450 libnvidia-ifr1-450
  nvidia-compute-utils-450 nvidia-dkms-450 nvidia-driver-450 nvidia-kernel-common-450
  nvidia-kernel-source-450 nvidia-utils-450 xserver-xorg-video-nvidia-450
以下のパッケージはアップグレードされます:
  libnvidia-cfg1-440 libnvidia-compute-440 libnvidia-decode-440 libnvidia-encode-440
  libnvidia-extra-440 libnvidia-fbc1-440 libnvidia-gl-440 libnvidia-ifr1-440
  nvidia-compute-utils-440 nvidia-dkms-440 nvidia-driver-440 nvidia-kernel-common-440
  nvidia-kernel-source-440 nvidia-utils-440 xserver-xorg-video-nvidia-440
アップグレード: 15 個、新規インストール: 15 個、削除: 0 個、保留: 0 個。
98.2 MB のアーカイブを取得する必要があります。
この操作後に追加で 16.0 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  libnvidia-gl-450 450.80.02-0ubuntu1 [60.5 MB]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 nvidia-driver-440 amd64 450.80.02-0ubuntu0.18.04.2 [6,492 B]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 libnvidia-gl-440 amd64 450.80.02-0ubuntu0.18.04.2 [6,492 B]
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 nvidia-dkms-440 amd64 450.80.02-0ubuntu0.18.04.2 [6,492 B]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 nvidia-kernel-source-440 amd64 450.80.02-0ubuntu0.18.04.2 [6,500 B]
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 nvidia-kernel-common-440 amd64 450.80.02-0ubuntu0.18.04.2 [6,504 B]
nvidia-modeset.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-52-generic/updates/dkms/

nvidia-drm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-52-generic/updates/dkms/

nvidia-uvm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-52-generic/updates/dkms/

depmod...

DKMS: install completed.
nvidia-compute-utils-450 (450.80.02-0ubuntu1) を設定しています ...
nvidia-compute-utils-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libnvidia-extra-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
nvidia-kernel-source-440 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libnvidia-gl-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
xserver-xorg-video-nvidia-450 (450.80.02-0ubuntu1) を設定しています ...
libnvidia-ifr1-450:amd64 (450.80.02-0ubuntu1) を設定しています ...
libnvidia-decode-450:amd64 (450.80.02-0ubuntu1) を設定しています ...
libnvidia-encode-450:amd64 (450.80.02-0ubuntu1) を設定しています ...
libnvidia-fbc1-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
nvidia-dkms-440 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libnvidia-cfg1-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
nvidia-driver-450 (450.80.02-0ubuntu1) を設定しています ...
libnvidia-ifr1-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libnvidia-decode-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libnvidia-encode-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
xserver-xorg-video-nvidia-440:amd64 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
nvidia-driver-440 (450.80.02-0ubuntu0.18.04.2) を設定しています ...
libc-bin (2.27-3ubuntu1.2) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
initramfs-tools (0.130ubuntu3.11) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-5.4.0-52-generic
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168fp-3.fw for module r8169
```

rebootし、確認してみる。

```shell
$ nvidia-smi
Fri Oct 30 06:53:52 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.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  GeForce GTX 106...  On   | 00000000:01:00.0  On |                  N/A |
|  0%   34C    P8     5W / 120W |     90MiB /  6075MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1641      G   /usr/lib/xorg/Xorg                 39MiB |
|    0   N/A  N/A      2115      G   /usr/bin/gnome-shell               47MiB |
+-----------------------------------------------------------------------------+
```

これでcuda11.0が使用可能になった。
ちなみに、docker19.03からはcudaとcudnnとなんちゃらって、あの依存ライブラリを悩まなくても、
nvidia-cuda-toolkitだけ入れておけば、docker側でバージョンを変えられるので、こちらの方が便利。
以前からいれているのだけど、これは更新しなくてもいいのだろうか、、、、

# クラウドストレージの共有〜rclone導入 (2021/6/19)
ubuntuの環境ってバックアップとっていなかったのですが、別途USBHDD買ったりするのももったいないので、
cloudに保存・同期できるようにしたい。
自分はicloudとOneDrive使用しているのだけど、icloudの方は50GB契約で容量少ないので、OneDriveを使用することにする(というか、よくみるとrcloneだとicloudが使えなさそう)

[こちら](https://gen-todoroki.hatenablog.com/entry/ubuntu-onedrive)を参考にさせてもらいました。

### [公式](https://rclone.org/)からdebをダウンロード
```shell
$ wget https://downloads.rclone.org/v1.55.1/rclone-v1.55.1-linux-amd64.deb
```

### インストール〜セットアップ
```shell
# install
$ sudo dpkg -i rclone-v1.55.1-linux-amd64.deb
# setup
$ rclone config
# 以降、対話形式でいくつか質問される
# 新しい接続先にする -> n
# 名前を決める -> onedrive
# クラウドストレージの種類を選ぶ -> 26 (Microsoft OneDriveに相当)
# client_id -> enterでよい(後で OneDriveにブラウザで接続する情報が使われる模様)
# client_secret -> enterでよい
# region を選ぶ -> 1 (Microsoft Cloud Global)　
# Edit advanced config? -> n (default)
# Use auto config? -> y (default)
# 　　上記、デスクトップ接続ならこれでよいが、remoteログインならnにする必要ある模様
# ブラウザが開き、OneDriveへ接続しようとする（ここでアカウントや認証を求められる）
# One Driveの種類を選ぶ -> 1 (OneDrive Personal or Business)
# driveが検知され、使いたいドライブを選ぶ -> 0 (0しか出てこなかったが、複数出てくる場面もある？)
# Found drive 'root' of type 'personal', URL: https://onedrive.live.com/?cid=*****
# これでOKか？　-> y
# 全部OKか？ -> y
# 変更や新規接続追加等他にあるか？ -> q (ないので、quit config~設定終了)
```
設定は、$HOME/.config/rclone/rclone.confに保存されます

### 設定確認
設定が完了していれば、以下のようにして、onedriveの内容を表示することができます。

```shell
$ rclone lsd onedrive:
```

### onedriveを通常のファイルシステムと同様に扱えるようにします

```shell
# マウントするディレクトリを作成
$ mkdir $HOME/Documents/onedrive
# onedriveをマウント
$ rclone --vfs-cache-mode writes mount onedrive:ドキュメント ~/Documents/onedrive/ &
```

OneDrive上で、私は「ドキュメント」フォルダに大体必要なものをおいていて、「ミュージック」フォルダや画像はwindowsでしか使用していないので、ドキュメントフォルダのみ接続にしました。
まるごとマウントしたい場合は

```shell
$ mkdir $HOME/onedrive
$ rclone --vfs-cache-mode writes mount onedrive: ~/onedrive/ &
```
みたいな感じになるかと思います。

### crontabの編集
ログインする度にマウントされるようにcrontabにエントリを追加します

```shell
$ crontab -e
# 以下を追加
@reboot rclone --vfs-cache-mode writes mount onedrive:ドキュメント ~/Documents/onedrive/ &
```

以上で完了