知りたいことがずばり書かれている記事を見つけられなかったので、まとめておきます。
VirtualBox Guest Additions とは
VirtualBox Guest Additions (vbguest) は、VM にインストールして使う拡張機能です。
共有フォルダ機能 (synced_folder
の type: virtualbox
) などで必要になります。
VirtualBox 本体と Guest Additions のバージョンは揃っているのが望ましい
バージョンが揃っていなくても動きますが、vagrant up
で起動時に以下のように警告が出ます。
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
「たいてい大丈夫だけど、レアケースで共有ディレクトリが動かなくなったりするよ」とのこと。
Vagrant の box には Guest Additions が最初から含まれているものがある
Vagrant box には、最初から Guest Additions が含まれているものと、そうでないものがあります。
box に Guest Additions が入っているかどうかは、外からは判別がつきません。少なくとも Vagrant Cloud の画面からは判断できないと思います。
例えば、CentOS 公式 centos/8
の現時点で最新バージョンには入っていません。
Chef の bento/centos-8
には入っています。
非エンジニアに使ってもらう場合は、最初から入っている box のほうが便利そうです。VirtualBox とバージョンが多少ずれていても、たいていは動くみたいなので。
もし動かなくなったら、VirtualBox と box の両方を最新にしてもらうような運用で行けるのでは、、と思っています。
Guest Additions が入っているかどうかの確認方法
起動時のメッセージで区別が付きます。以下は入っていない場合。
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
また、ログイン後に lsmod
で確認ができます。
[vagrant@localhost ~]$ lsmod
:
vboxguest 292797 2 vboxsf
:
vagrant-vbguest プラグインの挙動
Vagrant に vagrant-vbguest
プラグインを入れると、インストールや Virtualbox のバージョンに合わせたアップデートを自動でやってくれるようです。
プラグインを入れた状態で、centos/8
で vagrant up
すると、以下のエラーで止まりました。
[default] No Virtualbox Guest Additions installation found.
Last metadata expiration check: 0:00:01 ago on Sun 07 Jun 2020 01:03:38 AM UTC.
Package centos-release-8.0-0.1905.0.9.el8.x86_64 is already installed.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Upgrading:
centos-release x86_64 8.1-1.1911.0.9.el8 BaseOS 21 k
Installing dependencies:
centos-gpg-keys noarch 8.1-1.1911.0.9.el8 BaseOS 12 k
centos-repos x86_64 8.1-1.1911.0.9.el8 BaseOS 13 k
Transaction Summary
================================================================================
Install 2 Packages
Upgrade 1 Package
Total download size: 45 k
Downloading Packages:
(1/3): centos-gpg-keys-8.1-1.1911.0.9.el8.noarc 11 kB/s | 12 kB 00:01
(2/3): centos-release-8.1-1.1911.0.9.el8.x86_64 19 kB/s | 21 kB 00:01
(3/3): centos-repos-8.1-1.1911.0.9.el8.x86_64.r 9.1 kB/s | 13 kB 00:01
--------------------------------------------------------------------------------
Total 16 kB/s | 45 kB 00:02
warning: /var/cache/dnf/BaseOS-31c79d9833c65cf7/packages/centos-gpg-keys-8.1-1.1911.0.9.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - Base 255 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: centos-gpg-keys-8.1-1.1911.0.9.el8.noarch 1/1
Installing : centos-gpg-keys-8.1-1.1911.0.9.el8.noarch 1/4
Installing : centos-repos-8.1-1.1911.0.9.el8.x86_64 2/4
Upgrading : centos-release-8.1-1.1911.0.9.el8.x86_64 3/4
Cleanup : centos-release-8.0-0.1905.0.9.el8.x86_64 4/4
Running scriptlet: centos-release-8.0-0.1905.0.9.el8.x86_64 4/4
Verifying : centos-gpg-keys-8.1-1.1911.0.9.el8.noarch 1/4
Verifying : centos-repos-8.1-1.1911.0.9.el8.x86_64 2/4
Verifying : centos-release-8.1-1.1911.0.9.el8.x86_64 3/4
Verifying : centos-release-8.0-0.1905.0.9.el8.x86_64 4/4
Upgraded:
centos-release-8.1-1.1911.0.9.el8.x86_64
Installed:
centos-gpg-keys-8.1-1.1911.0.9.el8.noarch
centos-repos-8.1-1.1911.0.9.el8.x86_64
Complete!
Error: Unknown repo: 'C*-base'
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
yum install -y kernel-devel-`uname -r` --enablerepo=C*-base --enablerepo=C*-updates
Stdout from the command:
Stderr from the command:
Error: Unknown repo: 'C*-base'
手元だったら、バージョンを上げるなり、何らか調整すれば動くようになると思いますが、人の環境だとサポートが大変なので、vagrant-vbguest
を前提とした運用にはしたくないなと思っています。
プラグインをいれるより、最初から vbguest が入っている box を使うほうが手っ取り早いのでは。
自動アップデート
vagrant-vbguest
の自動アップデートをオフにするには以下の設定を行います。
自動アップデート時には、一緒にカーネルなどのバージョンも上がるとのこと。また、プラグインが入っていない場合にエラーにならないように、対応が必要なようです。
synced_folders の挙動
Vagrant の synced_folders
は Guest Additions が入っていない状態だと type: rsync
がデフォルトになります。
巨大なリポジトリで vagrant up
しようとしたら、Rsyncing
と表示されたまま止まった状態になっていました。大きな共有フォルダを rsync で運用するのは厳しそうです。
Guest Additions が入っていると type: virtualbox
がデフォルトになるようです。
If you are using the Vagrant VirtualBox provider, then VirtualBox shared folders are the default synced folder type.