仮想マシン上のWindows10 HomeでWSL2を体験したい

# はじめに

普段WSL1やVMware Workstation Player上に構築したLinuxをちょこっと触ったりしています。
そんな中、次期バージョンのWSL2ではDockerがインストールできるということで興味があるのですが、プレビュー機能のため利用してみたい場合はWindows Insider Programを導入する必要があるとのこと。
Windows Insider Programは評価版のWindowsが導入されるとのことで、普段使いのPCには導入をためらっていました。

そこで未使用のWindows10 Homeエディションを使って、VMware Workstation Player上にWSL2を導入できないか試してみました。

## 簡単なまとめ

- Windows Insider Programのビルド種類ですが、2020/03/03時点では、WSL2のみを使う目的であれば安定性の面で「ファスト」よりも「スロー」をおすすめします [^1]。
- WSL2がHyper-Vの機能を利用する関係上、VMware Workstation Playerの「Intel VT-x/EPT または AMD/RVI を仮想化」を有効化しないと動作しません。
- 仮想環境へのメモリ割り当ては最低6GB欲しいところです [^2]。

## 検証環境

### ホスト側

- Windows10 Pro バージョン1909 64bit
- CPU：Intel Core-i5 2540M
 - ハードウェア仮想化支援機能として「VT-x」「VT-d」が利用可能
- メモリ：16GB搭載

### ゲスト側

- VMware Workstation Player 15.5.1
 - Windows10 Home側にVMware Tools for Windows (11.0.0) をインストール済み
- Windows10 Home バージョン1909 64bit
- メモリ：6GB割り当て
- ストレージ：60GB割り当て

## 導入手順

仮想化ソフトウェアに「VMware Workstation Player」を利用し、その上でWindows10 Homeが導入済みという前提になります。
※前提の導入手順は省略いたします。

- PCのBIOSまたはUEFIの設定で、ハードウェア仮想化支援機能を有効化します。
 - Intel CPUの場合は「VT-x」の有効化が必須です。

- ゲスト側の仮想マシンを停止した状態で、VMware Workstation Playerの「仮想マシン設定」を開き、「ハードウェア」→「プロセッサ」の項目で「仮想化エンジン」の設定を有効化します。
 - [x]  **Intel VT-x/EPT または AMD/RVI を仮想化 ※必須**
 - [ ]  CPU パフォーマンス カウンタを仮想化 ※お好みでOKかと。
 - [ ]  IOMMU(IO メモリ管理ユニット)を仮想化 ※Intel VT-dが有効の場合は、チェックを入れても良いかと。

- 設定を保存し、ゲストの仮想マシンを起動します。
- ゲストの起動後、「スタート」メニューの「設定」から「更新とセキュリティ」→「Windows Insider Program」をクリックします。
- 画面表示に従って手続きを進め、「Insider の設定を選択」画面で「スロー」を選択します。
- 「Windows Insider Program」への登録完了後、ゲストの再起動を行います。
- 「Windows Update」を実行し、バージョン2004を導入します。
- ゲストのコマンドプロンプトを起動し、「winver」と入力してEnterキーを押下し、「Windows のバージョン情報」ダイアログからOSビルドが「18917」以降であることを確認します。
- ゲストにおいて**管理者権限でPowerShellを起動**し、以下のコマンドを実行します。<br />または、「Windows の機能の有効化または無効化」画面より、以下の2つにチェックを入れます。
 - [x]  Linux 用 Windows サブシステム
 - [x]  仮想マシン プラットフォーム

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

- ゲストを再起動します。
- ゲストのMicrosoft StoreよりWSL用のディストリビューションをダウンロードします。
 - 既にWSL1のディストリビューションを導入済みの場合、PowerShellにてWSL2に変換します。
 - 初めてダウンロードする場合、PowerShellで設定することで、デフォルトをWSL2形式にすることができます。

以下のコマンドについては、**管理者権限は不要**です。

```PowerShell:PowerShellでWSL1をWSL2に変換する例
# 導入済みのディストリビューションを確認します。
wsl -l -v
  NAME                  STATE           VERSION
* Ubuntu-18.04          Stopped         1

# 以下のコマンドでWSL1をWSL2に変換します。環境によりある程度の時間がかかります。
wsl --set-version Ubuntu-18.04 2
```

```PowerShell:PowerShellでデフォルトにWSL2を指定する
wsl --set-default-version 2

# 以下のコマンドでデフォルトをWSL1に戻すことができます。
wsl --set-default-version 1
```

- 変換後またはダウンロード済みのディストリビューションを開いて、問題なく動作することを確認します。

## ハマった点など

- ゲスト側のWindows10 Homeで、「Microsoft Defender」以外のウィルス対策ソフトが動作している場合、WSL2への変換や起動が行えない可能性があります。
 - ゲスト側にてavastを動作させていたところ「エラー 0x80370102」が発生して、WSL2をどうやっても起動または変換できませんでした。avastをアンインストールすると解決しました [^3]。

## その他

WSL2のUbuntu (無印版：バージョンは18.04.4) にDockerを入れてみましたが、通常のLinuxへの導入と同じ方法で簡単に入れることができて感動しました。
また、VS CodeのRemote - WSL機能拡張も問題なく動作しました。

~~一方、2020/03/03時点ではDocker Desktop WSL2 BackendがWindows10 Home環境にインストール出来ないため、VS CodeのRemote - Containers機能拡張は使えないようでした。こちらは今後に期待です。~~

**【2020/03/05追記】2020/03/02リリースのバージョン2.2.2.0より、Docker Desktop WSL2 BackendがWindwos10 Homeでもインストールおよび実行可能になりました。**
※こちらを利用する場合はWSL2側にDockerのインストールは不要でした。
※簡単にですが、VS CodeのRemote - Containers機能も動作することを確認しました。

> Docker Desktop Community 2.2.2.0
> 
> New
> 
> Windows 10 Home users can now use Docker Desktop through the experimental WSL 2 support. This requires Windows Insider Preview Build 19018 or later.
> 
> Docker Desktop now allows sharing individual folders, rather than whole drives, giving more control to users over what is being shared.

*引用元： [Docker Desktop for Windows Edge Release notes](https://docs.docker.com/docker-for-windows/edge-release-notes/)*

仮想環境としてVMware Workstation Playerを使っている関係上、WSL2が正式リリースされた場合はホスト側で同居できなくなりそうですが、VMware様側でWSL2と同居可能なバージョンを開発しているみたいなので、こちらも今後に期待です [^4] [^5]。

## 参考サイト様

- [WSL 2 のインストール手順](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install)
- [WSL 2 に関する FAQ](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-faq)
- [WSL2 + VScodeでWindowsから一瞬でDockerコンテナ内に引き篭もれる開発環境を整えたかった](https://qiita.com/iridon0920/items/005a9224343413b74f78)
- [完成が近づいてきたWindows 10 20H1とともに、Windows Insider Programも変わる](https://ascii.jp/elem/000/001/990/1990140/)
- [Introducing the Docker Desktop WSL 2 Backend](https://www.docker.com/blog/new-docker-desktop-wsl2-backend/)
- [VMware Workstation Tech Preview 20H1 — Hyper-V/Host VBS Support](https://blogs.vmware.com/workstation/2020/01/vmware-workstation-tech-preview-20h1.html)

[^1]: ファスト導入時に文字化けが発生したりしたため、自分の環境では厳しいと判断しました。
[^2]: 起動直後で2.6GB程度、ブラウザ・VS Code・WSL2を起動で3.6GB程度メモリを消費していました。
[^3]: avastの設定より「ハードウェア仮想化支援機能を有効にする」のチェックを外すと動作する、という情報も見たのですが、自分の環境では問題が解消しませんでした。
[^4]: 現時点ではIntel 第4世代以降のCPUが対象のようですが、第2・3世代のサポートも検討しているとのことです。
[^5]: 製品エディションはWorkstation Pro版が対象のように見えますが、無償版にも対象を広げてもらえることを期待しています。