Vagrant + Virtualbox 6.1.16 と WSL2 を同時に動かしたメモ

## 概要
半年前、[WSL2を試して][*1]、VirtualBoxが使えなくなったので[元に戻す][*2]などしていた。
最近、WSL2が周囲に広まり始めているので、移行した。
その際、[VirtualBoxが今では共存できるという記事][*3]を見つけた。
Windowsのバージョンも上げたところだったため、今回ならいけるかもと試したところ成功した。
備忘録として、手順を残す。

## 環境

* Windows10 Home バージョン20H2(OS ビルド 19042.610)
* VirtualBox 6.1.16 r140961 (Qt5.6.2)
* Vagrant 2.2.10

[作業時完了時のVagrantfile](https://github.com/hibohiboo/develop/tree/265db524cafedc26c183817a43d643bcfc47a515/Vagrantfile)


## WSL2の有効化

### Windows機能の有効化
`Windows ロゴ キー + Rキー`でファイル名を指定して実行を立ち上げ、`optionalfeatures`と入力してOKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/4ddce23f-6cb5-4aa0-30f0-09365df32840.png)

`Linux用Windowsサブシステム`と`仮想マシンプラットフォーム`のチェックを入れる
![スクリーンショット 2020-11-07 084534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/0b57fb14-333f-e873-ddda-baf0f1a467e0.png)

### Linuxカーネルの更新
管理者権限で開いたPowershellで`wsl --set-default-version 2`と入力して、WSL2の有効を確認しようとしたところ、カーネルが古いので更新せよとのメッセージが表示された。

[Windows 10 用 Windows Subsystem for Linux のインストール ガイド](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)の【手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする】「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」から更新用プログラムをDLして実行。

### Ubuntu20のインストール
そろそろ安定しているだろうとディストリビューションはUbuntu20を選択した。

Windows 10 用 Windows Subsystem for Linux のインストール ガイドの【手順 6 - 選択した Linux ディストリビューションをインストールする】に従い、ディストリビューションをインストール。Ubuntu20を起動して、ユーザ名とパスワードを登録する。

`wsl --list --verbose`でインストールされたことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/18ab32ff-c49a-2b30-f2b8-60f13d544beb.png)

## VirtualBoxとの共存設定

### Windows機能の有効化
Windowsハイパーバイザープラットフォームを有効にする。
これが、VirtualBoxとWSL2を共存させるために必要。

![スクリーンショット 2020-11-07 094219.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/e83e981d-cc2a-a6bf-222e-d0dbb02b51a5.png)

### VirtualBoxのインストール
念のため、VirtualBoxはWSL2の有効化後に再インストールした。
`cinst -y virtualbox`


### 試してみる
`vagrant up`で起動して様子を見守った。
ネットワーク設定が何度かでて不安になるが「はい」「はい」。。。これは今までのVirtualBoxで複数のIPを使っていたからの可能性が大きい。
`SSH auth method: private key`のところで止まる。

![スクリーンショット 2020-11-07 095940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/d3e694c9-aa31-0f17-af90-f69737c16822.png)

前回もここで止まっていたが、今回はVagrantfileで`vm.gui=true`を入れて確認していたところ、セットアップ中でログイン画面が表示される前に落ちていた。
エラーメッセージに出ている通り、`vonfig.vm.boot_timeout=300`とタイムアウト時間を延ばしてやる。

### 成功
上記修正後、`vagrant up`をしたところ、`SSH`から先に進み、無事起動することができた。

## 2020/12/04追記
Windowsを再起動したところ、再び、`SSH auth method: private key`で止まってしまう不具合が発生した。
[Vagrant box startup timeout due to no serial port](https://bugs.launchpad.net/cloud-images/+bug/1829625)を参考にVagrantfileを修正。
少し起動に時間はかかるが、動くようになった。

```diff:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.network "private_network", ip: "192.168.50.10"
  config.vm.network "forwarded_port", guest: 9005, host: 9005

  # WSL2 を 有効化しているとき、ssh接続でタイムアウトしてしまうため追記。 2020.11.07
  config.vm.boot_timeout = 500
  config.vm.provider "virtualbox" do |vm|
    vm.memory = 8192
    vm.linked_clone = true

    vm.customize ["modifyvm", :id, "--cpus", "4", "--ioapic", "on"]
    vm.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"]
    vm.customize ["modifyvm", :id, "--uartmode1", "file", File::NULL]
+    vm.customize ["modifyvm", :id, "--nestedpaging", "off"]
+    vm.customize ["modifyvm", :id, "--paravirtprovider", "hyperv"]
  end
end

```

## 2021.11.03 追記
virtualbox 6.1.28 に 6.1.26から更新したら、以下のエラーで起動できなくなった。


```
Stderr: VBoxManage.exe: error: Call to NEMR0InitVMPart2 failed: VERR_NEM_INIT_FAILED (VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole  
```

[virtualboxのスレッド](https://forums.virtualbox.org/viewtopic.php?f=6&t=104175&start=15)を見るに、共存できなくなっているっぽい？ `bcdedit.exe /set hypervisorlauchtype off`が必要だよって書いてある。

* Windows10 Home バージョン21H1(OS ビルド 19043.1320)
* VirtualBox 6.1.28 r147628 (Qt5.6.2)
* Vagrant 2.2.18

## 2021.11.25 追記
virtualbox 6.1.30 で再び共存できるようになった。

[change log ](https://www.virtualbox.org/wiki/Changelog)より
`VMM: Fixed 6.1.28 regression preventing VMs starting when using Hyper-V mode on Windows 10`

* Windows10 Home バージョン21H2(OS ビルド 19044.1387)
* VirtualBox 6.1.30 r148432 (Qt5.6.2)
* Vagrant 2.2.19

## 参考
[Windows10 Home で Docker Desktop For Windowsを動かしたメモ][*1]
[Windows10でWSLを無効化してVirtual Box + Vagrantが動作するように戻したメモ][*2]
[WSL2とHyper-Vの関係][*3]
[10.5. Paravirtualization Providers](https://www.virtualbox.org/manual/ch10.html#gimproviders)

[*1]:https://qiita.com/hibohiboo/items/f40cdb0d96cd9a15ff2b
[*2]:https://qiita.com/hibohiboo/items/2783fb3774d502d038ea
[*3]:https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce