tl;dr
- より新しいkernelが公開されているタイミングでGuestAdditions(以下GA)の再ビルドをすると、インストール済みGAが無効になる(削除されてから再ビルドに失敗する)
- kernelのアップデートをすれば復旧は可能
- vbguestプラグインを使うならGlobal Configurationで
auto_update = false
としておきたい
発生を確認した状況
- VirtualBox 4.3.18(Mac)
- Vagrant 1.6.5
- vagrant-vbguest 0.10.0
- CentOS6の最新kernel: 2.6.32-504.el6
- 使ったBox: chef/centos-6.5
- インストール済みGAのバージョン: 4.3.8 (VirtualBoxのバージョンと不一致)
- kernelのバージョン: 2.6.32-431.el6 (最新のバージョンと不一致)
発生する問題と原因
再現手順
$ vagrant plugin install vagrant-vbguest
$ vagrant init chef/centos-6.5
$ vagrant up
発生する問題
Synced Foldersのマウントに失敗する。(GAが無効になる)
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
原因
- VirtualBoxのバージョンとGAのバージョンが異なるためvbguestプラグインがGAの再ビルドを始める
- インストール済みGAが削除される
- アクティブなkernelと同じバージョンのkernel-develをインストールしようとするが、より新しいkernelが公開されているのでみつからない
- GAのビルドが失敗し、GAが動作しない状態に
以下のIssueで指摘されている。
(どちらかといえばVirtualBox側の問題か)
対策
- 予防策: 冒頭に書いたGlobal Configuration設定で不意の再ビルドを避ける
- 復旧策: kernelのバージョンを上げて仮想マシンを再起動させる
- アップデートしたkernelで起動される
- vbguestプラグインがGAのビルドを始める
- 今度はkernel-develのインストールに成功するので、GAのビルドが成功する
$ vagrant ssh -c 'sudo yum update -y kernel'
$ vagrant reload
$ vagrant vbguest --status
GuestAdditions 4.3.18 running --- OK.