WSL2の手動インストール(2021年睦月)

# 初めに
いつもお読みいただき、ありがとうございます。あと少しですので頑張ります。

# WSL2を使えるようにする
PowerShell (Core) を使って作業
- WindowsTerminalからPowerShellを開いて実行する。
## 準備
### sudo を使うので確認
管理者権限でのスクリプト時に便利なので、Scoopで入れておくとよい。

```powershell
scoop info sudo
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/3edd3712-c0f6-207d-932b-56eb6295d537.png)

インストールされていない場合は追加する。
```powershell
scoop install sudo
```

## インストール

### １）WSL機能を有効にする
Windows機能として「Linux 用 Windows サブシステム」オプション機能を有効化することで、WSL1/WSL2が使用可能となる。

```powershell
sudo dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/ff28ed96-6f9d-0af9-e42a-77ea34ef17c6.png)

### ２）仮想マシン機能を有効にする
WSLの実行には「仮想マシン機能」が有効であることが必要。そもそもCPUやファームウェア自体が対応してないと有効化できない。もしうまくいかないときは、自分のマシンスのペックやCPUを調べてみること。

```powershell
# Windows10のバージョンが新しい(2004)場合は以下のコマンド：
sudo dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# Windows10のバージョンが古い(1903, 1909)場合は以下のコマンド：
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
```

### ３）マシン再起動
```powershell
sudo shutdown /r
```

### ４）WSL2 を既定のバージョンとして設定
新しい Linux ディストリビューションをインストールする際の既定バージョンとして WSL2 を設定する。

```PowerShell
sudo wsl --set-default-version 2
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/4594de3c-aae1-5fec-c7b4-527b609b4ad0.png)

指定された https://aka.ms/wsl2kernel に行くと、Linux カーネルコンポーネントの更新が必要とのこと。x64用の更新プログラム[^1]をダウンロードし、インストールする。もし、ARM64 マシンを使用している場合は、代わりに ARM64 パッケージ[^2]をダウンロードして使う。

```powershell
curl https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi --output c:\home\seeds\wsl_update_x64.msi
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/f395eb37-d791-9cf2-3e8f-8f82663aeccd.png)

```powershell
c:\home\seeds\wsl_update_x64.msi
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/9669f8ef-2a36-696f-cbd1-fb649799ae02.png)
再設定してみると、警告はでなくなった。

```PowerShell
sudo wsl --set-default-version 2
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/2edd1ae3-148f-f8fb-c1c6-d745bff8fd30.png)

# Linux をインストール
## まずはbash(Ubuntu)を使えるようにする
最近のwindows10には、標準でbash.exeというコマンドが入っているが、動かそうとすると以下のように表示される。

```powershell
bash
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/4ba932ed-dea7-e576-96f1-9d57c496075d.png)
指定のURLを見ると「Microsoft Store」のLinuxのページ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/7bf4ce78-c9f5-31db-f0f2-3e32cfe0afc5.png)
「Ubuntu」を選択すると、現時点では20.04が取得できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/d62f2fa0-c18a-c0f3-ccf9-56e43a43b945.png)
インストール完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/71f8994e-8548-6cb9-e586-f6553af8fb60.png)
起動すると、Linuxでのユーザ名と、パスワードの入力を促される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/27e9a714-d798-d5e4-3c78-1c4697247aa9.png)
完了するとubutuのターミナルとなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/542e5387-84a1-86f8-271d-3075a6d72b6a.png)
「sudo」は可能だが、パスワードが必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/2c40e5a8-a5ac-5977-e591-53b73eb0a215.png)

## 動作
### 状況確認
PowerShell (Core) にて実行。

```powershell
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/d6d95f1b-1668-4777-61c6-80b0df93c61b.png)

### コンソールから使用
PowerShell (Core) のコンソールからbashを起動。

```powershell
bash
```
現在のディレクトリにてbashが起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/b6d284d8-d59c-2319-900e-a9e5abf8489b.png)
bashにて、ファイルをリスト表示する。LANGはC.UTF-8となっており、そのままでも日本語ファイルパスを表示できる。


```bash
ls -l /mnt/c/Users/${USER}/
echo $LANG
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/908a87b9-feef-109c-3dfc-26c829a45c89.png)


## ツールを使ってインストール先を選択
### LxRunOfflineを利用する。
#### インストール

```powershell
scoop search LxRunOffline
scoop install LxRunOffline
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/d7ddd408-48cf-6ba3-60d5-a0506e49462a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/374ea0b1-fa51-903d-0e2c-86f7291e0593.png)

#### Distroファイルを取得する

```powershell
curl -L https://lxrunoffline.apphb.com/download/Alpine/v3.13 --output c:\home\seeds\alpine-v3.13-root.tar
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/e3dc28ca-b310-e1a1-69b3-a517ac560657.png)

#### wsl に導入
```powershell
# 作成
LxRunOffline install -n Alpine_v3.13 -d C:\opt\wsl2\alpine_v3.13 -f c:\home\seeds\alpine-v3.13-root.tar -r .
# 確認：リスト表示
LxRunOffline list
```

#### wsl から確認
```powershell
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/593b0edd-8741-72db-cf4d-f65e77c75675.png)

#### wsl2 に変換
```powershell
wsl --set-version Alpine_v3.13 2
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/529d731f-a033-e78c-1142-d42e7306e5c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/1498a3b6-0426-440d-5b35-d198b4a7ca5e.png)

#### 実行
```powershell
wsl -d Alpine_v3.13
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/85c3bb3f-133b-02c8-eb05-dbf1ca3fbc75.png)

#### 確認
別のPowerShellを開いて実行。

```powershell
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/e0387e5c-6783-8d7c-1213-805d0393914e.png)

#### 停止
```powershell
wsl -t Alpine_v3.13
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/bc25dfbb-9520-93c9-dd9b-90fc75f3f87e.png)

## トラブル
少し使っていると、トラブルも発生する。特に**「マシンのメモリーを使い果たしてしまって、WSL2以外のアプリが動かなくなる」**のは深刻。対処法は別記事[^3]に書いたので、参考にして設定変更するとよい。

# 終りに
あともう少しでDockerが動く。

親記事：[WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)](https://qiita.com/CinTAKE/items/ee348acec54195ef5bd1)

[^1]: [x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
[^2]: [ARM64 パッケージ](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi)
[^3]: [WSL2/Dockerのトラブル治療室](https://qiita.com/CinTAKE/items/76ee1ae96f389623d99f)