Bash on Windows(WSL)でVagrant + Hyper-Vの仮想マシンを操作する

WindowsでVagrantを使う場合は、通常コマンドプロンプトなどを使いますが、Linuxコマンドじゃないと使いづらいので、Bash on WindowsでVagrant + Hyper-Vの仮想マシンを操作する方法を試してみました。

事前準備

まずは、Bash on Windows(Windows Subsystem for Linux = WSL)でVagrant + Hyper-Vを使う準備をしていきます。

仮想マシンプロバイダは、WindowsなのでMicroSoft純正のHyper-Vを使います。Windows Proじゃない方はHyper-Vが使えないので、Hyper-Vの部分をVirtualboxなどに置き換えてもられば、基本的には作業方法は一緒です。

事前にBash on Windowsは入っているものとします。筆者の環境では、OSはUbuntuにしています。

ともあれ、bash on Windowsに入る

bash on Windowsに入ります。クライアントは、コマンドプロンプトでも、Windows PowerShellでもOKです。自分は、TermiusのBeta版を使っています。

bash

Vagrantをインストールする

Bash on Windows(WSL)でVagrantを使うために、Vagrantをインストールします。Windows側にインストール済みでも、WSL側にもインストールが必要です。

また、Windows側にVagrantを入れていると、バージョンが違うというエラーがでるので、その場合はバージョンをWindows側に合わせます。

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 -v
Vagrant 2.1.2

数字が出てくれば、インストールが出来てます。

bash on WindowsからのWindowsへのアクセスを許可する

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"

これがあれば、WSL側からvagrantでHyper-Vの仮想マシンの操作ができるようになります。

実際に動かしてみる

さて、事前準備ができたので、実際に触ってみます。

vagrant box list

vagrant box list

bento/ubuntu-18.04 (hyperv, 201812.27.0)
centos/7           (hyperv, 1901.01)
ubuntu-docker      (hyperv, 0)

きちんと、Windows側で追加していたboxが表示されました。

vagrant box add

では、今度はboxをWSL側から追加してみます。

vagrant box add bento/ubuntu-16.04

==> box: Loading metadata for box 'bento/ubuntu-16.04'
    box: URL: https://vagrantcloud.com/bento/ubuntu-16.04
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Enter your choice: 1
==> box: Adding box 'bento/ubuntu-16.04' (v201812.27.0) for provider: hyperv
    box: Downloading: https://vagrantcloud.com/bento/boxes/ubuntu-16.04/versions/201812.27.0/providers/hyperv.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> box: Successfully added box 'bento/ubuntu-16.04' (v201812.27.0) for 'hyperv'!

vagrant box list

bento/ubuntu-16.04 (hyperv, 201812.27.0)
bento/ubuntu-18.04 (hyperv, 201812.27.0)
centos/7           (hyperv, 1901.01)
ubuntu-docker      (hyperv, 0)

boxの追加もできました。

vagrant init

次は、WSL側のVagrantでマシンを追加してみます。

vagrant init bento/ubuntu-16.04

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

vagrant upで普通に起動できました。

既存マシンでvagrant up

次に、すでにWindows側で作成したマシンを動かしてみます。

vagrant up
/opt/vagrant/embedded/gems/2.2.3/gems/vagrant-2.2.3/lib/vagrant/util/which.rb:37: warning: Insecure world writa
ble dir /mnt/c/Program Files (x86)/Windows Resource Kits/Tools in PATH, mode 040777
==> default: This machine used to live in C:/Users/c0d3man/Vagrant/ubuntu but it's now at /mnt/c/Users/c0d3man/
Vagrant/ubuntu.
==> default: Depending on your current provider you may need to change the name of
==> default: the machine to run it as a different machine.
Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
==> default: Verifying Hyper-V is accessible...
    default: Configuring the VM...
==> default: Starting the machine...
==> default: Waiting for the machine to report its IP address...
    default: Timeout: 120 seconds
    default: IP: 192.168.100.121
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 192.168.100.121:22
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Rsyncing folder: /mnt/c/Users/c0d3man/Share/ => /home/vagrant/share-folder
vagrant@192.168.100.121's password:
vagrant@192.168.100.121's password:
vagrant@192.168.100.121's password:
==> default: Rsyncing folder: /mnt/c/Users/c0d3man/Vagrant/ubuntu/ => /vagrant
vagrant@192.168.100.121's password:

パスワードは「vagrant」でいけました。

““
Bash on WindowsからVagrant + Hyper-Vで仮想マシンを動かしてみました。

設定は面倒ですが、普段LinuxやmacOSを使っている方はBash on Windowsを使うことでいつもと同じコマンドが使えるようになるのでとても便利です。

ぜひ、試してみてください。