WSL2でUbuntuを使う際の初期設定(備忘録)

# はじめに
　自分だったり他人のWSL2の初期設定するたびに色々調べるのが面倒だったので自分用のメモもかねて書き残してみる。
　基本的に調べたら出てくる情報の切り貼りでしかないので注意。必要なところだけピックアップして見ていくといいかも。

## 目次
1. [WSL~Ubuntuのインストール](#1-wslubuntuのインストール)
2. [ユーザー設定](#2-ユーザー設定)
3. [日本語化](#3-日本語化)
4. [Homebrewのインストール](#4-homebrewのインストール)

## 1. WSL~Ubuntuのインストール
だいたいここを見れば解決するはず。

https://learn.microsoft.com/ja-jp/windows/wsl/install

大前提としてWSLを使用するためにインストール。
powershellで以下のコマンドを入力。
``` powershell
wsl --install
```
続いてUbuntuをインストール。
CentOSがいいという場合は別ルートで入れる必要があるのでちょい面倒(ちょっとだけど)。
``` powershell
wsl --install Ubunutu
```
## 2. ユーザー設定
ここから先はUbuntu上で操作を行っていく。
ちなみにrootユーザーの場合頭についている`sudo`は不要。

ユーザーを作成。
```
$ sudo adduser <ユーザー名>
```
この際useraddコマンドだとホームディレクトリ諸々が作られないので注意。

Ubuntuを起動した際にデフォルトでログインするユーザーを設定。
```
$ sudo vi /etc/wsl.conf
```
``` /etc/wsl.conf
[user]
default = <ユーザー名>
```
作成したユーザーが`sudo`を使用できるようにsudoグループに追加。
```
$ sudo gpasswd -a <ユーザー名> sudo
```
デフォルトのエディタをvimに設定。
Emacsやnanoが好みの場合は適宜変更。
```
$ sudo update-alternatives --set editor /usr/bin/vim.basic
```
`sudo`する際にパスワードを求められないように設定。
``` 
$ sudo visudo
```
```diff_conf
- %sudo   ALL=(ALL:ALL) ALL
+ %sudo   ALL=(ALL:ALL) NOPASSWD:ALL
```

## 3. 日本語化
何をするにもとりあえず`apt update`&`apt upgrade`で最新の状態にする。
```
$ sudo apt update && sudo apt upgrade
```

日本語にする場合文字コードをUTF-8にしたい。
一応パッケージが入っているか確認。
```
$ locale -a
C
C.utf8
POSIX
```
予想通り入っていなかったので、UTF-8の言語パックを入れる。
```
$ sudo apt install language-pack-ja
```
再度確認
ja_JP.utf8が追加されていればOK
```
$ locale -a
C
C.utf8
POSIX
ja_JP.utf8
```
localeをUTF-8にし、一度終了。再度Ubuntuを立ち上げる。
```
$ sudo update-locale LANG=ja_JP.UTF8
$ exit
```
``` powershell
wsl -t Ubuntu
wsl -d Ubuntu
```
dateコマンドで日本語化されているか確認。
以下のように表示されればOK。
```
$ date
2023年  5月 29日 月曜日 07:39:07 JST
```
ついでにmanで見られるマニュアルも日本語のものをインストール。
```
$ sudo apt install manpages-ja manpages-ja-dev
```
適当なコマンドのmanを見て日本語になっていたらOK。
```
$ man grep
GREP(1)                                              General Commands Manual                                              GREP(1)

名前
       grep, egrep, fgrep - パターンにマッチする行を表示する

書式
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

説明
       grep  は FILE で名前を指定されたファイルを検索して、与えられた PATTERN にマッチする部分を含む行を探します。 ファイルが指定
       されていない場合や、 ファイル名の代わりに 1 個のマイナス記号 “-” が指定されている場合は、 grep  は標準入力から検索します。
       デフォルトでは、 grep はマッチした行を表示します。

       さらに、兄弟プログラム  egrep  と  fgrep  は、それぞれ  grep -E と grep -F と同じです。 これらの兄弟プログラムは非推奨です
       が、後方互換性のために用意されています。
```

## 4. Homebrewのインストール
色々入れる際に対応範囲が広く、扱いやすいHomebrewを入れておく。

https://brew.sh/index_ja
```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
一応インストールできたか確認。
インストールできていたらバージョンが表示される。
```
$ brew --version
Homebrew 4.0.19
```
入れただけでパスがつながってないと注意されるので言われた通りにパスを設定。
多分ターミナル上にメッセージが表示されているはずなのでそっちをよく見ること。
```
$ (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/<ユーザー名>/.profile
$ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
```
何かインストールする際は`brew install <パッケージ名>`
アンインストールする際は`brew remove <パッケージ名>`
何がインストールしてあるか確認する際は`brew list`
アップデートする場合は`brew upgrade (<パッケージ名>)`

試しによく使うgitをインストール
```
$ brew install git
$ brew list
binutils  ca-certificates  gcc      gmp    krb5     libmpc      libunistring  lz4      openldap     readline    xz
brotli    curl             gettext  icu4c  libedit  libnghttp2  libxcrypt     mpfr     openssl@1.1  rtmpdump    zlib
bzip2     expat            git      isl    libidn2  libssh2     libxml2       ncurses  pcre2        util-linux  zstd
```
これでgit(とそれに付随して必要なもの)がインストールされる。


## 5. dockerのインストール（追記）
まずはデーモンを常駐させるためにPID1を/sbin/initにしたい。いろいろと便利なので。
/etc/wsl.confを開いてちょろっと追記すればOK
```
$ sudo vi /etc/wsl.conf
```
``` /etc/wsl.conf
[boot]
systemd=true
```
再起動して以下のコマンドで確認
```
$ ps aux
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3247797/400492a8-6cbc-8d3f-56f3-6d50f5cd73a4.png)

ちなみに/sbin/initの正体

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3247797/f89aec7b-8617-5ef8-b72d-a8d5a80693c1.png)


### dockerの設定
基本はここを参考にしてdockerをインストールする

https://teachme.jp/90980/manuals/19146802

1.dockerリポジトリの設定
```
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
```
2.インストール
```
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
3.dockerサービスが稼働しているかを確認
```
service docker status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3247797/e488c3e6-18e3-3fb3-6a60-73051d55a29c.png)

4.ユーザーをdockerグループに追加
これをしないとvscodeでdockerに接続できないらしい
```
$ sudo groupadd docker
$ sudo usermod -aG docker $(echo $USER)
$ newgrp docker
```

5.無事インストールできたかの確認
```
$  sudo docker run hello-world
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/
```

## 最後に
以上で最低限の初期設定はできるはず。
書き洩らしやbashrc(もしくはzshにするかも)などは今後追記するか別の記事にして書く予定(予定は未定…)。