WSLでVagrant仮想環境構築

Dockerの繁栄により、昨今全く脚光を浴びることがなくなったVagrant

Support Hyper-V provider within WSL by chrisroberts · Pull Request #9943 · hashicorp/vagrant · GitHub

18日前にVagrant v 2.1.2がreleaseされ、上記のissueが対応された。 Vagrantに使用する仮想化技術としてWSLからHyper-Vが使えるようになったらしい。
これまではわざわざパワーシェルを立ち上げる必要があった。 試してみよー。

動作環境

  • Windows10 pro
  • Ubuntu 16.04

インストール

バイナリのソースを落としてきてdpkg installコマンドでインストール。

$ wget https://releases.hashicorp.com/vagrant/2.1.2/vagrant_2.1.2_x86_64.deb
$ dpkg -i vagrant_2.1.2_x86_64.deb

確認。

$ vagrant --version
Vagrant 2.1.2

Hyper-Vを有効化する

以下を参考に有効化しましょう。 Windows 10 での Hyper-V の有効化 | Microsoft Docs

諸々の環境変数を指定する

マストな設定

VagrantはWindowsシステム内のプロバイダを使用するため、Windowsシステム内への実行権限が必要になる。 この設定は、 VAGRANT_WSL_ENABLE_WINDOWS_ACCESSという環境変数を設定することで可能。

$ export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"

VAGRANT_HOME 環境変数は、自動的にWindows側のホームディレクトリに変更される。 WSL側とWindows側で共有されたディレクトリは、強制的に、Windows側からは読み書き禁止の権限となる。

WinとWSLのユーザー名が違う場合

Windows 側のユーザー名とWSL側のユーザー名が異なる場合は VAGRANT_WSL_WINDOWS_ACCESS_USERという環境変数でWindows側のユーザー名を指定する。

$ export VAGRANT_WSL_WINDOWS_ACCESS_USER=kimoton

WSL側のディレクトリで仮想環境を立ち上げたい場合

Windows側のホームディレクトリ(デフォルトだと/mnt/c/[User名])以下出ない箇所をプロジェクトディレクトリとしてVagrant を立ち上げたい場合、
vagrant ssh等のコマンドは失敗する。

そこで、VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATHという環境変数を用いてプロジェクトディレクトリの設定を行う。

$ export VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH=/mnt/c/vagrant

この環境変数で指定したディレクトリでは、パーミッションのチェックが行われないため、vagrant sshが通る。

おまけ

起動時にすべて指定したい場合は~/.bashrcに書いておきましょう。

参考:

Vagrant and Windows Subsystem for Linux - Vagrant by HashiCorp