WSL2 + Ubuntu設定メモ(2022/02版)

WSL2をwindows11環境でセットアップし自分なりにカスタマイズするコマンドのメモ。2022/02/14時点の情報だが随時更新予定。

# WSL2導入
管理者権限でPowerShell または コマンドプロンプトを起動しに次のコマンドを入力する。
```sh
wsl --install
```
以前と比べると格段に楽になった。Linuxディストロの指定を特にしない場合はUbuntu 20がインストールされる。
インストール処理が完了した後にPCを再起動する。
再起動後、アプリ一覧よりUbuntuを選択し起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/233bddf6-5451-0d2c-714b-c7db9e0f627e.png)

新しいユーザー名とパスワードを入力する。
WSL2とUbuntuの導入はここで終わり

# aptリポジトリの変更
私の自宅から標準のUbuntuミラーサーバーまでの通信が遅いため、最寄りのミラーサーバーへ変更する。
私の自宅からはNAISTが一番早いためこれに変更する。以下コマンド。
```sh
sudo perl -p -i.bak -e 's%(deb(?:-src|)\s+)https?://(?!archive\.canonical\.com|security\.ubuntu\.com)[^\s]+%$1http://ftp.naist.jp/pub/Linux/ubuntu/%' /etc/apt/sources.list 
sudo apt update
```

# 標準で使うエディタを変更
私はCUIで利用するエディタはvim派なので、OS標準で利用するエディタの設定を変更する。
番号を入力しEnterを押下する。

```sh
sudo update-alternatives --config editor
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/b321e2d8-2b7d-360f-95fa-87d1b01b2252.png)

# WSLのデフォルトユーザーを変更する
私はWSLをVScodeから利用することが多いのだが、デフォルトユーザーが一般ユーザーだと`/opt`などのファイルが編集できずに困る。
そのためデフォルトユーザーをrootに変更する。
```sh
ubuntu config --default-user root
```

# シェルのユーザー名に色をつける
ユーザー名も標準の白色では読みにくいため色をつける。
以下コマンドをrootユーザーで実行する。

```sh
echo "export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/profile.d/prompt.sh && \
echo "export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '" >> /root/.bashrc
```

# anyenvのインストール
GoやPython,Nodeのバージョン管理ができるanyenvを導入する。

```sh
# リポジトリのクローン
git clone https://github.com/anyenv/anyenv ~/.anyenv

# PATHを通す
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(anyenv init -)"' >> ~/.bashrc

# シェルの再起動
exec $SHELL -l

# プラグインのインストール
anyenv install --init
```

## anyenvで各言語の環境をセットアップする
```
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
```
途中で上記のエラーが表示されることがあるがこれはこちらのPCのネットワークの問題かもしれない。Wi-Fiで接続していたので有線接続にしたところ収まった。
ftpでデータを拾ってくるときに接続が瞬断すると出るエラーなのだろうか？

```sh
# インストールできる言語を確認する
anyenv install --list

# 必要な言語をインストールする
anyenv install nodenv
anyenv install pyenv
anyenv install goenv

exec $SHELL -l
```

### nodeのインストール
```sh
# インストールできるバージョンのリストを表示
nodenv install -l

nodenv install 14.18.3
nodenv global 14.18.3
node -v
```

### pythonのインストール
pyenv実行前に必要なライブラリをインストールする。

```sh
sudo apt install -y libffi-dev libssl-dev zlib1g-dev liblzma-dev tk-dev libbz2-dev libreadline-dev libsqlite3-dev libopencv-dev build-essential git
```
```sh
pyenv install -l
pyenv install 3.9.10
pyenv global 3.9.10
python --version
```

### goのインストール
```sh
goenv install -l
goenv install 1.17.7
goenv global 1.17.7
go version
```

# gitの補完を有効にする
bashにてgitのコマンドを利用する際に、標準の設定では補完が効かない。
以下コマンドで有効にする。
```sh
echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc
source  ~/.bashrc
```

# 参考文献
[WSL のインストール | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows/wsl/install)

[沖縄から最速のUbuntuミラーサーバー | Blog](https://www.y-yamakawa.com/blog/2021-12-31-%E6%B2%96%E7%B8%84%E3%81%8B%E3%82%89%E6%9C%80%E9%80%9F%E3%81%AEubuntu%E3%83%9F%E3%83%A9%E3%83%BC%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/)

[Ubuntu20.04.3のセットアップ - Qiita](https://qiita.com/honahuku/items/fd173757aece24318a3c)

[WSL で デフォルトユーザ を変更する方法 - いろいろ備忘録日記](https://devlights.hatenablog.com/entry/2021/05/29/070000)

[anyenvの環境構築 - Qiita](https://qiita.com/282Haniwa/items/71a48a10952413416d18)

[nodenvの環境構築 - Qiita](https://qiita.com/282Haniwa/items/a764cf7ef03939e4cbb1)

[ubuntu 20.04 / 18.04 に pyenv をインストール](https://zenn.dev/neruo/articles/install-pyenv-on-ubuntu)

[goenv/INSTALL.md at master · syndbg/goenv](https://github.com/syndbg/goenv/blob/master/INSTALL.md)

[ubuntuでgitの補完をする - Qiita](https://qiita.com/htanaka0828/items/4fe052c7f619593bfca0)