最近各 Linux ディストリビューションがリリースしている Vagrant Box を使うようになりました。
以前は、Bento project など良さそうな Vagrant Box を採用していましたが、
Linux ディストリビューションの Vagrant Box が整備されつつあるので、もっぱら使っています。
ただ Virtualbox Guest Additions がインスールされていない状態の Vagrant Box なので、
プロビジョニングの時にプラグイン vagrant-vbguest で入れるようにしています。
Vagrant では、いくつかフォルダ共有のタイプがあるのですが、
VirtualBox の共有フォルダ機能を使う場合は、Virtualbox Guest Additions が必須になります。
今回その時に遭遇した不具合対処メモ。
環境
- Vagrant
- VirtualBox
- Vagrant Box は、centos/7 (virtualbox, 1803.01)
- プラグイン vagrant-vbguest で Virtualbox Guest Additions をインストール
- Provisioner は、ansible_local、Ansible でプロビジョニング
不具合現象
vagrant up
すると、共有フォルダが同期できない現象。
==> default: Mounting shared folders...
default: /vagrant => /Users/thingsym/vaw
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
The error output from the command was:
/sbin/mount.vboxsf: mounting failed with the error: No such device
遡って調べて診てみる。
Virtualbox Guest Additions はインストール完了したが、
vboxadd.service が立ち上がっていない。
結果、共有フォルダがマウンドできない。
Installing Virtualbox Guest Additions 5.2.12
Redirecting to /bin/systemctl start vboxadd.service
Job for vboxadd.service failed because the control process exited with error code. See "systemctl status vboxadd.service" and "journalctl -xe" for details.
カーネルのバージョンが不一致になっている。
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
原因
Virtualbox Guest Additions をインストールするときに
必要なパッケージをインストールするのですが、
そのなかに kernel-headers が含まれていて
kernelのアップデートのタイミングの問題? なのか
アップデートしてしまう。
ゲスト側でカーネルを調べると、
カーネルのバージョンが不一致になっている。
今回は、パッチ番号 (693と862) が不一致に。
rpm -qa kernel\* | sort
kernel-3.10.0-693.21.1.el7.x86_64
kernel-headers-3.10.0-862.2.3.el7.x86_64
kernel-tools-3.10.0-693.21.1.el7.x86_64
kernel-tools-libs-3.10.0-693.21.1.el7.x86_64
kernel-headers が kernel のバージョンに対応していない状態。
解決
vagrant ssh
ゲスト側に入り、kernelをアップデート
sudo yum -y update kernel
sudo yum -y install kernel-devel kernel-headers kernel-tools kernel-tools-libs
カーネルのバージョン (パッチ番号862) を揃える
rpm -qa kernel\* | sort
kernel-3.10.0-693.21.1.el7.x86_64
kernel-3.10.0-862.2.3.el7.x86_64
kernel-devel-3.10.0-862.2.3.el7.x86_64
kernel-headers-3.10.0-862.2.3.el7.x86_64
kernel-tools-3.10.0-862.2.3.el7.x86_64
kernel-tools-libs-3.10.0-862.2.3.el7.x86_64
再度プロビジョニング
vagrant reload