waste of time

主にPHP

vagrant upしたらマウントに失敗する件

virtualboxを再インストールしてvagrant upしたら、以下のようなエラーが出てディレクトリがマウントできない云々となりました。この問題は、GuestAdditionsを再ビルドすることで解決することができます。

> vagrant up
...
==> default: Mounting shared folders...
    default: /vagrant => D:/vm/php7
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

GuestAdditionsを再ビルドするには、kernel-develがインストールされている必要があります。 kernel-develがインストールされてない状態でGuestAdditionsの再ビルドを行おうとすると、ビルドに失敗してしまいます。
※以下ゲストマシンです

$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-431.3.1.el6.x86_64

Building the main Guest Additions module                   [FAILED]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]

kernel-deveが入っていない場合は、まずkernel-develをインストールします。 rpmからじゃなくてもいけるらしいですが、自環境だと元々除外してないっぽいのに出てこなかったので、こちらを参考にしてインストールしました。

$ sudo yum install -y http://bay.uchicago.edu/centos-vault/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.3.1.el6.x86_64.rpm

kernel-develがインストール済みの状態でもう一度ビルドします。

$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]

追記(2016/1/16):
kernel-develインストール済みの状態でビルドに失敗する場合は、GuestAdditionsが求めているkernel-develのバージョンがより新しいものである可能性があります。上記の手順でkernel-develをインストール済みであれば、$ sudo yum -y upgrade kernel-develでアップデートできるので試してみてください。

ホストに戻ってvagrantを再起動すれば、マウントに成功することが確認できます。 ついでにGuestAdditionsのバージョンをホストとゲストでいい感じに揃えてくれるvagrant-vbguestもインストールしておきます。

> vagrant plugin install vagrant-vbguest
> vagrant reload

以下のコマンドでGuestAdditionsのバージョンを確認してみます。ホスト/ゲスト同じであればrunning --- OKな感じになって万事OKです。

> vagrant vbguest --status
GuestAdditions 5.0.12 running --- OK.

おまけ:
vagrant-vbguestを入れているとvagrant upする度にGuestAdditionsのバージョンチェックが走るので、それを止めたい場合は以下のようにVagrantfileに書けば良い。

config.vbguest.auto_update = false