これは、なにをしたくて書いたもの?
Vagrantで仮想マシンのプロバイダーにlibvirtを使っている時、NFSに関するエラーが出て仮想マシンが起動しなかったという事象に遭遇し、
さてどうしましょうと調べてみた話。
その内容を書こうかな、と。
環境
Ubuntu Linux 18.04 LTSで、Vagrantは2.2.5。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic $ vagrant -v Vagrant 2.2.5
Vagrantを使える環境は2つあって、ひとつは仮想マシンのプロバイダーがVirtualBox。
$ VBoxManage -v 6.0.12r133076
もうひとつはlibvirt。
$ libvirtd -V libvirtd (libvirt) 4.0.0 $ kvm --version QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.19) Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
Debianの仮想マシンを起動する
ちょっとDebianの仮想マシンに用があって、以下のBox(プロバイダーとしては、VirtualBoxとlibvirt用のものが存在)を使って
Vagrant box debian/buster64 - Vagrant Cloud
$ vagrant init debian/buster64
起動。
$ vagrant up ### プロバイダーがlibvirtの場合は $ vagrant up --provider=libvirt
VirtualBoxの方はうまくいくのですが、libvirtの方はNFSが使えないと言われてエラーになり、仮想マシンが起動しません。
It appears your machine doesn't support NFS, or there is not an adapter to enable NFS on this machine for Vagrant. Please verify that `nfsd` is installed on your machine, and try again. If you're on Windows, NFS isn't supported. If the problem persists, please contact Vagrant support.
なにがエラーになっているかというと、Synced Folderです。ホスト側でNFSが使えないのが原因です。
DebianのBoxのVagrantfileを見ると、確かにSynced FolderにNFSを使うようになっています。
config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false
Synced Folderの設定を変える
Synced Folderの実現方法には、いろいろあるみたいですね。
Synced Folders - Vagrant by HashiCorp
エラーメッセージを調べると、みんな「NFSをインストールしよう」となっているのですが…そりゃあそうですよね。
Vagrant: synced_folder を nfs マウントする | deadwood
でも、このためだけにわざわざNFSサーバーを導入するのは、それはそれで嫌だなぁと…。
で、vagrant-libvirtプラグインのSynced Folderの設定に、なにか載ってたなぁと思って調べてみます。
以下のどちらかを設定すると、とりあえず起動するようになります。
config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "1000" # または config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "mapped", mount: false
後者だと、マウントがなくなりますが。
accessmodeの意味は、libvirtの設定になるので、こちらを参照。
libvirt Domain XML Format / Filesystems
Starting the Guest using libvirt
9pについては、こちら。
Virtfs (Plan 9) vs NFS as tool for share folder for virtual machine - Unix & Linux Stack Exchange
たまに、以下の表示で止まりますが、再度仮想マシンを起動し直すと良いかも…。
==> default: Waiting for domain to get an IP address...
他のBox(vagrant-libvirt)を使った時の起動ログを見ていると、Rsyncで実現したりしているものもあります。
==> default: Installing rsync to the VM... ==> default: Rsyncing folder: /path/to/ => /vagrant
Synced Folderについては、VirtualBoxをプロバイダーにした方がお手軽かもしれませんね。
※パフォーマンスはNFSの方が有利らしいですが
Vagrant + VirtualBox で nfs を使って、synced_folder を速くする - Shin x blog
Vagrantのsynced_folderのtypeを比べてみた | 東北ギーク
もしくは、割り切ってネットワークの設定でIPアドレスを固定してアクセスしたりしましょう。