やさしいWSL2のインストール手順とエラー

関連記事：[やさしいWindows Subsystem for Linux (WSL) のインストール手順](https://qiita.com/kekenonono/items/1ddbb5a1125d496c0010)

導入時の主だったエラー:
`wsl_update_x64.msi`（Windows Subsystem for Linux Update Setup Wizard） 実行時に`This update only applies to machines with the Windows Subsytem for Linux`と表示され、先に進まない
⇒ [wsl_update_x64.msi実行時のエラー](https://qiita.com/kekenonono/items/14b725ce3d00cd5281ec#wsl_update_x64msi%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC)に記載
![wslmsi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/694c2002-b46a-54d8-3d6c-ef25e2f83a4a.png)

# はじめに

<details><summary>だらだらとはじめに</summary>
自分の使っているUbuntu on Windows（WSL1）にSelenium等を入れてスクレイピングをしてみようと意気込んでいたのですが、そもそもwslにブラウザが入らず困っていました。
Firefoxなら入るだろうと高を括っていましたが、残念ながら大量のエラーを吐き出しながらあえなく撃沈
いろいろ調べてみると以下のページで「WSL2なら動くよ！」という記述を発見したので入れてみました
[Cannot run Firefox #4964](https://github.com/microsoft/WSL/issues/4964)
</details>

これを書いている途中に、[WSL2入れてみた](https://qiita.com/TsuyoshiUshio@github/items/947301bd9317610572fc) を見つけてしまったので、本記事では差別化を図るべく、幾分か丁寧にWSL2の導入手順を説明していきます

基本的にはWSL2の導入は簡単なので、安心してください

**本記事のターゲット**

- WSL2に興味があるがなんとなく敷居が高く感じている人
- 外出自粛で暇なので、何か新しいことにチャレンジしたい人

**なお、本記事では導入後の話には触れません**（きっともっとすごい人たちがたくさん教えてくれると思うので）
また、現時点では問題なく動作している上、**あとから`WSL1`に戻すこともできるので安心してください。**

以下、
公式ページ（：[WSL 2 のインストール手順](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install)）をもとに進めます。

# 要求される環境

1. **Windows 10 ビルド 18917 以降**であること
2. **Windows Insider Program**に入っていること

## 1. **Windows 10 ビルド 18917 以降**であること

### Windowsビルド 確認

コマンドプロンプト、またはwindowsの設定から確認できます
ただし、Windowsの最新バージョン（Windows 1903以降？）からはWindows アップデートが自動で行われていないようなのでほとんどの人はビルドの更新が必要になる可能性が高いです

**コマンドプロンプトから確認**

1. コマンドプロンプトを開く
2. `var`コマンドを実行
3. 出てきたバージョンが18917以上ならOK！

**Windowsの設定から確認**

1. 設定⇒システム⇒バージョン情報 を開く
2. OSビルドが18917以上であるならOK！![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/78821500-172d-3c44-cfa8-05dc2a68cd2a.png)

### Windowsビルド の更新

WindowsのOSビルドが18917以下である場合、ビルドの更新が必要です

1. Windowsの設定⇒更新とセキュリティ⇒Windows Updateを開く
2. ` オプションの更新プログラムがあります。 windows10 バージョン190xの機能更新プログラム` とあれば`いますぐダウンロードしてインストール`をクリック
3. インストール後再起動

の手順で完了します。

このとき、**Windows Updateがたまっている状態**（久しぶりにアップデートするときなど）では上記の` オプションの更新プログラムがあります。 windows10 バージョン190xの機能更新プログラム` が出てこない場合があるようです。
先にWindows Updateを片付けておいてください。

それでもうまくいかない場合は下記ページが参考になるのではと思います。
[最新のWindows 10 November 2019 Updateを手動でインストールする](https://www.atmarkit.co.jp/ait/articles/1704/10/news023.html)

## 2. **Windows Insider Program**に入っていること

このページを訪れる人はほとんど入っていなと考えられます
以下の手順を行ってください

1. Windowsの設定⇒更新とセキュリティ⇒Windows Insider Programを開く
2. 開始する（Get start）をクリック
3. 出てくる文章に同意し、Windowsアカウントを紐づける
4. Insiderの設定で`スロー（推奨）`をクリック
5. 再起動をクリック



# WSL2の導入

## 手順1. `仮想マシンプラットフォーム`と`WSL` が有効であることを確認

Powershellを**管理者として**開く
<details><summary>開き方</summary>
1. `windowsボタン` + `xキー`を押す
2. 下記ボタンをクリック
![2020-04-12 (23).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/51f941fd-133a-7c59-46ff-7b850e065c7d.jpeg)
</details>

Powershellで以下のコマンドを実行

```powershell:Powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

設定を反映するためにWindowsを**再起動**してください

## 手順2. ディストリビューションのインストール

すでに何らかのディストリビューションをインストールしてある方は飛ばして結構です。

WSLに対応したディストリビューションをインストールします。
[こちら](https://qiita.com/kekenonono/items/1ddbb5a1125d496c0010#2-%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を参考に好きなディストリビューションをインストールしてください。
よくわからなければ、とりあえず`Ubuntu`を選んでください
インストールが終わったら、**設定に入る前**に本記事に戻って次の手順を進めてください

## 手順3. ディストリビューションのバージョンを`WSL2`に変更する

再びPowershellを管理者として起動します
`wsl -l`を実行し、ディストリビューションの名前を確認してください

```powershell:私の場合
> wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定) # ここにディストリビューションの名前が表示される
```

  
次に、ディストリビューションをWSL2によってサポートされているものに変更します
`wsl --set-version <Distro> 2` を、"\<Distro\>"の部分に先ほど確認したディストリビューションの名前を入れて実行してください

```powershell:私の場合
> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
変換が完了しました。
```

うまくいった人はそのまま手順4.へ進んでください

### カーネルコンポーネントの更新が必要

手順3.実行時、以下の出力が表示される場合があります

```powershell:カーネルコンポーネントの更新が必要
> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
```

ここで表示されている`https://aka.ms/wsl2kernel`に飛びます（[こちら](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)）

以下の`このリンク`をクリックすると`wsl_update_x64.msi`がダウンロードされるので実行します
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/628e8a04-e895-f550-c5aa-5c859d2e7785.png)

うまくwizardが終了したら、`finish`をクリックし[手順4.](https://qiita.com/kekenonono/items/14b725ce3d00cd5281ec#%E6%89%8B%E9%A0%864-wsl-2-%E3%82%92%E6%97%A2%E5%AE%9A%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%AB%E3%81%99%E3%82%8B) へ

### wsl_update_x64.msi実行時のエラー

`wsl_update_x64.msi`（Windows Subsystem for Linux Update Setup Wizard） 実行時に`This update only applies to machines with the Windows Subsytem for Linux`と表示され、先に進まない場合があります
![wslmsi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/694c2002-b46a-54d8-3d6c-ef25e2f83a4a.png)

この解決法が[こちらのページ](https://github.com/microsoft/WSL/issues/5014)に書いてあったので紹介します（私もこれでうまくいきました）

上記ページには
> Also it seems some people have problems with the installer extracting the kernel.
You can always extract it manually with:
`msiexec /a "wsl_update_x64.msi" /qb TARGETDIR="C:\temp"`
and then copy the kernel file from C:\temp to C:\Windows\System32\lxss\tools

と書いてありました。

要約すると
`wsl_update_x64.msi`を`C:\Windows\System32\lxss\tools`にコピーしてそこで実行しろ
ということですね

以下のようにダウンロードした`wsl_update_x64.msi`を`C:\Windows\System32\lxss\tools`にコピーしてください

1. `wsl_update_x64.msi`をコピー
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/af38e9df-cc39-c6e4-dd01-0121c78883c7.png)

2. `C:\Windows\System32\lxss\tools`に貼り付け（管理者権限を要求されるので従ってください）
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521871/be1751c6-8387-aff7-d13f-1a8d589c9c9b.png)

3. wsl_update_x64.msiを実行
4. 終了




## 手順4. WSL 2 を既定のアーキテクチャにする

Powershellで以下のコマンドを実行してください

```powershell
wsl --set-default-version 2
```

## 手順5. WSL のバージョンを確認して終了

Powershellで`wsl --list --verbose` または `wsl -l -v`と実行するとWSLのバージョンが表示されます

```powershell:私の場合
> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2
```

**これで全行程終了です**

## WSL1に戻す

もしなんらかの事情でWSL1に戻したくなった場合、手順3. と手順4. を`2`から`1`に変えて行うだけで変更できます
具体的には、以下のコマンドを実行

```powershell
> wsl --set-version <Distro> 2 # <Distro>はディストリビューションの名前
> wsl --set-default-version 2
```

# おわりに

まだ全然触ってないので違いはあまりわかりませんが、多少動きが早くなったのかな...？

# 参考

記事内のリンクを参考に加え、以下を参考にしました
[完全なLinuxがWindows 10上で稼働する？「WSL 2」とは](https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html)