Ubuntu 18.04のインストールログ（自分用）

# インストール - Windowsとデュアルブートする
参考にした記事：[2つの別ディスク (HDD) にそれぞれ Windows と Ubuntu をインストールする](https://qiita.com/megane42/items/7b2194016d054eab9ac4)

WindowsとUbuntuはそれぞれ別のSSDにインストールする。Windowsは既にインストール済。

DVDからインストーラを立ち上げる。インストールの種類では「それ以外」を選ぶ。
パーティションの設定は次の通り。

- swap
  - サイズ：メモリの2倍（昔どこかで根拠を読んだけど詳細は忘れてしまった）
  - 論理パーティション
  - 利用方法：スワップ領域
- メイン
  - サイズ：残りを全部
  - 基本パーティション
  - マウントポイント：`/`

`ブートローダをインストールするデバイス` には、Ubuntuをインストールするディスクを選ぶ。Windowsがインストールされているディスクを選んでしまうと、Windowsのブートローダを上書きしてしまって面倒なことになる。

# ディレクトリ名を英語にする
参考にした記事：[Ubuntuでホームディレクトリの中身を英語にする](https://qiita.com/taiko19xx/items/d1a001bfc25245b91354)

ターミナルを開き、以下のコマンドを実行する：

```bash
$ LANG=C xdg-user-dirs-gtk-update
```

# アップデート
```bash
$ sudo apt update
$ sudo apt upgrade
```

# 時計がずれる問題
参考にしたサイト：

- [Linux環境設定/デュアルブートのWindows時刻をUTCにする](https://linux.just4fun.biz/?Linux%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A/%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%96%E3%83%BC%E3%83%88%E3%81%AEWindows%E6%99%82%E5%88%BB%E3%82%92UTC%E3%81%AB%E3%81%99%E3%82%8B)
- [hwclockコマンドでLinuxとWindowsの時刻のズレを修正する方法 ](http://ubiqlog.com/archives/11842)

WindowsとUbuntuとで時計に9時間のずれが生じてします。これは、システム時刻について、WindowsではLocal time（ローカル時）、LinuxではUTC（協定世界時）を使っていることに起因するらしい。したがって、どちらかに統一すればいい。ここではUTCに統一する。

コマンドプロンプトを管理者権限で開き、次のコマンドを実行する：

```
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
```

# docker
## インストール
参考にしたサイト：[Get Docker CE for Ubuntu](Get Docker CE for Ubuntu)

書いてあるとおりにコマンドを実行すればよい。ありがたい。

```bash
# 依存関係を入れる
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# GPG鍵を入れてからstable版をインストール
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

# 動作確認
$ sudo docker run hello-world
```

## dockerグループの作成
参考にした記事：[nvidia-docker でポータブルな機械学習の作業環境を作る](https://qiita.com/legokichi/items/7bf3862569cfca122d73#docker-group-%E3%81%AE%E8%BF%BD%E5%8A%A0)

sudoなしでdockerを実行するため。

```bash
# もしグループdockerが無ければ、sudo groupadd dockerで作成する
$ sudo usermod -aG docker $USER
```

再ログインすると設定が反映される。

## 権限の設定
参考にした記事：[Dockerのバージョン1.10で正式に導入されたUser Namespacesを試してみる](https://qiita.com/kjtanaka/items/c461bc50fc0cc9c248c9)

そのままだと、root権限のディレクトリをマウントして操作できてしまうらしい。

```bash
$ sudo systemctl stop docker.service
# もしユーザdockremapがいなかったら、sudo adduser dockremapで作成する
$ sudo sh -c 'echo dockremap:500000:65536 > /etc/subuid'
$ sudo sh -c 'echo dockremap:500000:65536 > /etc/subgid'
$ sudo vi /etc/docker/daemon.json
{
    "userns-remap": "default"
}
$ sudo systemctl start docker.service
```

# nvidia-docker
## グラフィックスドライバのインストール
`sudo ubuntu-drivers autoinstall`でサクッと入るけど、最新のが好きなので。[NVIDIA公式](https://www.nvidia.co.jp/Download/index.aspx)からNVIDIA-Linux-x86_64-430.14.runをダウンロード。デフォルトのドライバnouveauを止めて、ランレベル3でインストールする。これ、もう少し楽にならないものかな。

```bash
# nouveauを使わないようにする
$ sudo sh -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
$ sudo sh -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
$ sudo update-initramfs -u
$ sudo reboot

# 最小構成でインストールしたせいで、ここでMakeがないことに気がつく
$ sudo apt install build-essentials

$ sudo telinit 3
$ sudo sh ./NVIDIA-Linux-x86_64-430.14.run
$ sudo telinit 5

# ちゃんとインストールされたことを確認
$ nvidia-smi
```

## nvidia-dockerのインストール
[公式GitHub](https://github.com/NVIDIA/nvidia-docker#quickstart)に書いてあるとおりやればいい。さっき書いたdaemon.jsonを上書きされてしまうので注意（diffを見せてくれるのにmergeはしてくれないのか…）。

```bash
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
$ sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
$ sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt update
$ sudo apt install -y nvidia-docker2

# 動作確認
$ sudo systemctl restart docker.service
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
```

# linuxbrew
[Homebew on Linux](https://docs.brew.sh/Homebrew-on-Linux#install)を参考に。

```bash
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

.bashrcにパスの設定をしておく：

```bash
export PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH
```

# Emacs
参考にした記事：[Ubuntuにemacs26をインストールする](https://rorl.hatenablog.com/entry/2018/07/13/075337)

設定ファイルの都合上、26でないと色々と動かない。

```bash
sudo add-apt-repository ppa:kelleyk/emacs
sudo apt update
sudo apt install emacs26
```

# Python
## pyenv
```bash
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```

.bashrcに追記：

```bash
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
if command -v pyenv 1>/dev/null 2>&1; then
  　　eval "$(pyenv init -)"
fi
```

この辺が無いよと言われるので入れておくといいかもしれない。

```bash
$ sudo apt install -y zlib1g-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
```

適当にどれか入れてみる。

```bash
# インストールできるバージョンを一覧
$ pyenv install --list
# 機械学習界隈では3.6の方が無難かな？
$ pyenv install 3.6.8
# 3.6.8を使う
$ pyenv global 3.6.8
# 確認
$ pyenv versions
```

## pipenv
```bash
$ brew install pipenv
```

各プロジェクトのディレクトリ内に仮想環境を作って欲しいので、.bashrcに追記する：

```bash
export PIPENV_VENV_IN_PROJECT=1
```

## PyCharm
[公式のダウンロードページ](https://www.jetbrains.com/pycharm/download/)からCommunity editionをダウンロードしてくる。

```bash
$ tar -zxvf pycharm-community-2019.1.2.tar.gz
$ mv pycharm-community-2019.1.2 ~/bin
$ cd ~/bin/pycharm-community-2019.1.2/bin
$ ./pycharm.sh
```