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


概要

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

環境

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

作業時完了時のVagrantfile

WSL2の有効化

Windows機能の有効化

Windows ロゴ キー + Rキーでファイル名を指定して実行を立ち上げ、optionalfeaturesと入力してOKを押す。

Linux用Windowsサブシステム仮想マシンプラットフォームのチェックを入れる

Linuxカーネルの更新

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

Windows 10 用 Windows Subsystem for Linux のインストール ガイドの【手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする】「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」から更新用プログラムをDLして実行。

Ubuntu20のインストール

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

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

wsl --list --verboseでインストールされたことを確認する。

VirtualBoxとの共存設定

Windows機能の有効化

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

VirtualBoxのインストール

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

試してみる

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

前回もここで止まっていたが、今回は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を参考にVagrantfileを修正。
少し起動に時間はかかるが、動くようになった。

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のスレッドを見るに、共存できなくなっているっぽい? 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 より
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を動かしたメモ
Windows10でWSLを無効化してVirtual Box + Vagrantが動作するように戻したメモ
WSL2とHyper-Vの関係
10.5. Paravirtualization Providers