Guest Additionsを更新する方法
仮想マシンとホストコンピュータの間の共有フォルダが使えるのはGuest Additionsのおかげ
vagrant を使ってると、ゲストOSとホストOSの間で共有フォルダの存在は大変便利ですね。
共有フォルダが使えるのは、Guest Additions というツールが、Box(仮想マシンのシステムのベースイメージ)に組み込まれているからです。
Guest Additions と VirtualBox のバージョンが違うときに必要な対応
でも、Box イメージが作られたのが古いと、ホストOSにインストールしたVirtualBoxのバージョンと違う場合があります。というか、よく起こりうることです。
そんな時、up コマンドで仮想マシン起動中には、以下のように状況が出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
(前半省略) ==> default: Machine booted and ready! ==> 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. default: default: Guest Additions Version: 5.2.18 default: VirtualBox Version: 6.0 ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/data/tk/vagrant/autotest ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. |
上のログには、
1 2 |
default: Guest Additions Version: 5.2.18 default: VirtualBox Version: 6.0 |
という表示があります。また、
「VM(仮想マシン)の guest additions と、VirtualBox のバージョンが違います。そのままでも問題ないことも多いけど、もし、共有フォルダにエラーが発生しているなら、guest additions が、VitrualBoxのバージョンに対応しているかチェックしてください。」
なんてことが、書かれています。
仮想マシンから共有フォルダが見れていれば何もしなくてもよい
上記ログの例では、guest additions のバージョンは 5.2.18 と比較的新しく、というのも、VirtualBox のバージョンが 5.2 の次に、6.0 に飛んでいるので、、、そのため、共有フォルダも問題なく見れています。
こういう場合は、ほっておいても大丈夫です。
共有フォルダにエラーが発生、あるいは仮想マシンから共有フォルダが見れないときは、Guest Additionsのバージョン調整が必要
もし、古いBoxのため、共有フォルダが使えないなど弊害がある場合は、Guest Additions のバージョンアップをする必要があります。
Guest Additionsのバージョン調整には、Vagrant のプラグインを使う
Guest Additions のバージョンアップの作業はかなり面倒なのですが、vagrant に 「vagrant-vbguest」 というプラグインをインストールしておくと、 vagrant up コマンドを実行したとき、Guest Additions のバージョンが違うとき、自動で入れ替えてくれます。
vagrant のプラグイン インストール手順
ホストOS上で、
vagrant plugin install プラグイン名とplugin install コマンドを実行します。
下が、vagrant-vbguest をインストールしたときのログです。
vagrant plugin list コマンドでインストール済みのプラグインが確認できます。
1 2 3 4 5 6 7 8 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant plugin install vagrant-vbguest Installing the 'vagrant-vbguest' plugin. This can take a few minutes... Installed the plugin 'vagrant-vbguest (0.17.2)'! user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant plugin list vagrant-vbguest (0.17.2, global) |
vagrant up での Guest Additionsの更新の様子
この状態で、 vagrant up をしてみます。というか、すでに 起動中だったので、代わりに再起動の vagrant reload をしてみます。
ログは下のようになりました。大変な作業になってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant reload ==> default: Attempting graceful shutdown of VM... ==> default: Checking if box 'bento/centos-7.5' version '201808.24.0' is up to date... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection reset. Retrying... default: Warning: Connection aborted. Retrying... default: Warning: Remote connection disconnect. Retrying... ==> default: Machine booted and ready! [default] GuestAdditions versions on your host (6.0.2) and guest (5.2.18) do not match. 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.riken.jp * epel: ftp.riken.jp * extras: ftp.riken.jp * remi-safe: ftp.riken.jp * updates: ftp.riken.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ centos-release.x86_64 0:7-5.1804.4.el7.centos を 更新 ---> パッケージ centos-release.x86_64 0:7-6.1810.2.el7.centos を アップデート --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ 更新します: centos-release x86_64 7-6.1810.2.el7.centos base 26 k トランザクションの要約 ================================================================================ 更新 1 パッケージ 総ダウンロード容量: 26 k Downloading packages: No Presto metadata available for base Running transaction check Running transaction test Transaction test succeeded Running transaction 更新します : centos-release-7-6.1810.2.el7.centos.x86_64 1/2 整理中 : centos-release-7-5.1804.4.el7.centos.x86_64 2/2 検証中 : centos-release-7-6.1810.2.el7.centos.x86_64 1/2 検証中 : centos-release-7-5.1804.4.el7.centos.x86_64 2/2 更新: centos-release.x86_64 0:7-6.1810.2.el7.centos 完了しました! 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.riken.jp * epel: ftp.riken.jp * extras: ftp.riken.jp * remi-safe: ftp.riken.jp * updates: ftp.riken.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ kernel-devel.x86_64 0:3.10.0-862.11.6.el7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ インストール中: kernel-devel x86_64 3.10.0-862.11.6.el7 C7.5.1804-updates 16 M トランザクションの要約 ================================================================================ インストール 1 パッケージ 総ダウンロード容量: 16 M インストール容量: 37 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : kernel-devel-3.10.0-862.11.6.el7.x86_64 1/1 検証中 : kernel-devel-3.10.0-862.11.6.el7.x86_64 1/1 インストール: kernel-devel.x86_64 0:3.10.0-862.11.6.el7 完了しました! 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.riken.jp * epel: ftp.riken.jp * extras: ftp.riken.jp * remi-safe: ftp.riken.jp * updates: ftp.riken.jp パッケージ 1:make-3.82-23.el7.x86_64 はインストール済みか最新バージョンです パッケージ bzip2-1.0.6-13.el7.x86_64 はインストール済みか最新バージョンです 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ binutils.x86_64 0:2.27-28.base.el7_5.1 を 更新 ---> パッケージ binutils.x86_64 0:2.27-34.base.el7 を アップデート ---> パッケージ gcc.x86_64 0:4.8.5-36.el7 を インストール --> 依存性の処理をしています: libgomp = 4.8.5-36.el7 のパッケージ: gcc-4.8.5-36.el7.x86_64 --> 依存性の処理をしています: cpp = 4.8.5-36.el7 のパッケージ: gcc-4.8.5-36.el7.x86_64 --> 依存性の処理をしています: libgcc >= 4.8.5-36.el7 のパッケージ: gcc-4.8.5-36.el7.x86_64 --> 依存性の処理をしています: glibc-devel >= 2.2.90-12 のパッケージ: gcc-4.8.5-36.el7.x86_64 ---> パッケージ perl.x86_64 4:5.16.3-292.el7 を 更新 ---> パッケージ perl.x86_64 4:5.16.3-293.el7 を アップデート --> 依存性の処理をしています: perl-libs = 4:5.16.3-293.el7 のパッケージ: 4:perl-5.16.3-293.el7.x86_64 --> トランザクションの確認を実行しています。 ---> パッケージ cpp.x86_64 0:4.8.5-36.el7 を インストール ---> パッケージ glibc-devel.x86_64 0:2.17-260.el7 を インストール --> 依存性の処理をしています: glibc-headers = 2.17-260.el7 のパッケージ: glibc-devel-2.17-260.el7.x86_64 --> 依存性の処理をしています: glibc = 2.17-260.el7 のパッケージ: glibc-devel-2.17-260.el7.x86_64 --> 依存性の処理をしています: glibc-headers のパッケージ: glibc-devel-2.17-260.el7.x86_64 ---> パッケージ libgcc.x86_64 0:4.8.5-28.el7_5.1 を 更新 ---> パッケージ libgcc.x86_64 0:4.8.5-36.el7 を アップデート ---> パッケージ libgomp.x86_64 0:4.8.5-28.el7_5.1 を 更新 ---> パッケージ libgomp.x86_64 0:4.8.5-36.el7 を アップデート ---> パッケージ perl-libs.x86_64 4:5.16.3-292.el7 を 更新 ---> パッケージ perl-libs.x86_64 4:5.16.3-293.el7 を アップデート --> トランザクションの確認を実行しています。 ---> パッケージ glibc.x86_64 0:2.17-222.el7 を 更新 --> 依存性の処理をしています: glibc = 2.17-222.el7 のパッケージ: glibc-common-2.17-222.el7.x86_64 ---> パッケージ glibc.x86_64 0:2.17-260.el7 を アップデート ---> パッケージ glibc-headers.x86_64 0:2.17-260.el7 を インストール --> 依存性の処理をしています: kernel-headers >= 2.2.1 のパッケージ: glibc-headers-2.17-260.el7.x86_64 --> 依存性の処理をしています: kernel-headers のパッケージ: glibc-headers-2.17-260.el7.x86_64 --> トランザクションの確認を実行しています。 ---> パッケージ glibc-common.x86_64 0:2.17-222.el7 を 更新 ---> パッケージ glibc-common.x86_64 0:2.17-260.el7 を アップデート ---> パッケージ kernel-headers.x86_64 0:3.10.0-957.1.3.el7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ インストール中: gcc x86_64 4.8.5-36.el7 base 16 M 更新します: binutils x86_64 2.27-34.base.el7 base 5.9 M perl x86_64 4:5.16.3-293.el7 base 8.0 M 依存性関連でのインストールをします: cpp x86_64 4.8.5-36.el7 base 5.9 M glibc-devel x86_64 2.17-260.el7 base 1.1 M glibc-headers x86_64 2.17-260.el7 base 683 k kernel-headers x86_64 3.10.0-957.1.3.el7 updates 8.0 M 依存性関連での更新をします: glibc x86_64 2.17-260.el7 base 3.6 M glibc-common x86_64 2.17-260.el7 base 11 M libgcc x86_64 4.8.5-36.el7 base 102 k libgomp x86_64 4.8.5-36.el7 base 157 k perl-libs x86_64 4:5.16.3-293.el7 base 688 k トランザクションの要約 ================================================================================ インストール 1 パッケージ (+4 個の依存関係のパッケージ) 更新 2 パッケージ (+5 個の依存関係のパッケージ) 総ダウンロード容量: 62 M Downloading packages: No Presto metadata available for base -------------------------------------------------------------------------------- 合計 7.2 MB/s | 62 MB 00:08 Running transaction check Running transaction test Transaction test succeeded Running transaction 更新します : libgcc-4.8.5-36.el7.x86_64 1/19 更新します : glibc-2.17-260.el7.x86_64 2/19 更新します : glibc-common-2.17-260.el7.x86_64 3/19 インストール中 : cpp-4.8.5-36.el7.x86_64 4/19 更新します : libgomp-4.8.5-36.el7.x86_64 5/19 更新します : 4:perl-libs-5.16.3-293.el7.x86_64 6/19 更新します : 4:perl-5.16.3-293.el7.x86_64 7/19 更新します : binutils-2.27-34.base.el7.x86_64 8/19 インストール中 : kernel-headers-3.10.0-957.1.3.el7.x86_64 9/19 インストール中 : glibc-headers-2.17-260.el7.x86_64 10/19 インストール中 : glibc-devel-2.17-260.el7.x86_64 11/19 インストール中 : gcc-4.8.5-36.el7.x86_64 12/19 整理中 : 4:perl-libs-5.16.3-292.el7.x86_64 13/19 整理中 : 4:perl-5.16.3-292.el7.x86_64 14/19 整理中 : binutils-2.27-28.base.el7_5.1.x86_64 15/19 整理中 : libgomp-4.8.5-28.el7_5.1.x86_64 16/19 整理中 : glibc-common-2.17-222.el7.x86_64 17/19 整理中 : glibc-2.17-222.el7.x86_64 18/19 整理中 : libgcc-4.8.5-28.el7_5.1.x86_64 19/19 検証中 : glibc-devel-2.17-260.el7.x86_64 1/19 検証中 : cpp-4.8.5-36.el7.x86_64 2/19 検証中 : libgomp-4.8.5-36.el7.x86_64 3/19 検証中 : 4:perl-5.16.3-293.el7.x86_64 4/19 検証中 : glibc-common-2.17-260.el7.x86_64 5/19 検証中 : gcc-4.8.5-36.el7.x86_64 6/19 検証中 : kernel-headers-3.10.0-957.1.3.el7.x86_64 7/19 検証中 : binutils-2.27-34.base.el7.x86_64 8/19 検証中 : libgcc-4.8.5-36.el7.x86_64 9/19 検証中 : glibc-2.17-260.el7.x86_64 10/19 検証中 : 4:perl-libs-5.16.3-293.el7.x86_64 11/19 検証中 : glibc-headers-2.17-260.el7.x86_64 12/19 検証中 : libgomp-4.8.5-28.el7_5.1.x86_64 13/19 検証中 : glibc-2.17-222.el7.x86_64 14/19 検証中 : 4:perl-5.16.3-292.el7.x86_64 15/19 検証中 : libgcc-4.8.5-28.el7_5.1.x86_64 16/19 検証中 : glibc-common-2.17-222.el7.x86_64 17/19 検証中 : 4:perl-libs-5.16.3-292.el7.x86_64 18/19 検証中 : binutils-2.27-28.base.el7_5.1.x86_64 19/19 インストール: gcc.x86_64 0:4.8.5-36.el7 依存性関連をインストールしました: cpp.x86_64 0:4.8.5-36.el7 glibc-devel.x86_64 0:2.17-260.el7 glibc-headers.x86_64 0:2.17-260.el7 kernel-headers.x86_64 0:3.10.0-957.1.3.el7 更新: binutils.x86_64 0:2.27-34.base.el7 perl.x86_64 4:5.16.3-293.el7 依存性を更新しました: glibc.x86_64 0:2.17-260.el7 glibc-common.x86_64 0:2.17-260.el7 libgcc.x86_64 0:4.8.5-36.el7 libgomp.x86_64 0:4.8.5-36.el7 perl-libs.x86_64 4:5.16.3-293.el7 完了しました! Copy iso file C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso Mounting Virtualbox Guest Additions ISO to: /mnt mount: /dev/loop0 is write-protected, mounting read-only Installing Virtualbox Guest Additions 6.0.2 - guest version is 5.2.18 Verifying archive integrity... All good. Uncompressing VirtualBox 6.0.2 Guest Additions for Linux........ VirtualBox Guest Additions installer Removing installed version 5.2.18 of VirtualBox Guest Additions... Copying additional installer modules ... Installing additional modules ... VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules. This may take a while. VirtualBox Guest Additions: To build modules for other installed kernels, run VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup <version> VirtualBox Guest Additions: Building the modules for kernel 3.10.0-862.11.6.el7.x86_64. VirtualBox Guest Additions: Running kernel modules will not be replaced until the system is restarted VirtualBox Guest Additions: Starting. An error occurred during installation of VirtualBox Guest Additions 6.0.2. Some functionality may not work as intended. In most cases it is OK that the "Window System drivers" installation failed. Redirecting to /bin/systemctl start vboxadd.service Redirecting to /bin/systemctl start vboxadd-service.service Unmounting Virtualbox Guest Additions ISO from: /mnt Got different reports about installed GuestAdditions version: Virtualbox on your host claims: 5.2.18 VBoxService inside the vm claims: 6.0.2 Going on, assuming VBoxService is correct... Got different reports about installed GuestAdditions version: Virtualbox on your host claims: 5.2.18 VBoxService inside the vm claims: 6.0.2 Going on, assuming VBoxService is correct... ==> 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. default: default: Guest Additions Version: 5.2.18 default: VirtualBox Version: 6.0 ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/data/tk/vagrant/autotest ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. |
上のログのポイントを説明すると、
・GuestAdditionsのバージョン違いを検知
その後、
・centos のバージョンを 7.5 → 7.6 に更新
・kernel-devel、gcc など、ビルド環境をインストール。
・Guest Additions を更新
古い Guest Additions を削除、
VirtualBox Guest Additions をビルド
GuestAdditions のサービス起動コードを変更(次回起動時に反映)
次回起動時から変更が反映されるため、
今回の起動は、いつも通り、Guest Additionsがバージョンが違うとの表示をしつつ、共有フォルダをマウントして終わってます。
で、いよいよ、もう一回、再起動してみますと、下のログのように、かなりすっきりとしたログ出力で起動してます。GuestAdditions のバージョンも 6.0.2 で共通になってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant halt ==> default: Attempting graceful shutdown of VM... user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'bento/centos-7.5' version '201808.24.0' is up to date... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection reset. Retrying... default: Warning: Remote connection disconnect. Retrying... default: Warning: Connection aborted. Retrying... ==> default: Machine booted and ready! [default] GuestAdditions 6.0.2 running --- OK. ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/data/tk/vagrant/autotest ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. |
念のため、仮想マシンに入って、共有フォルダ /vagrant が閲覧できるかチェックします。
下記のように
ls コマンドでファイルが表示されれば、問題ないです。
1 2 3 4 5 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant ssh Last login: Mon Jan 28 23:56:18 2019 from 10.0.2.2 [vagrant@localhost ~]$ ls /vagrant/ Vagrantfile html itamae log.txt |
ただ、ビルド環境を構築するため、CentOSのバージョンアップまでやってしまうので、本番運用されている環境の開発環境として仮想マシンを使っていると、バージョン不一致になってしまう可能性もあるかもしれませんね。
1 2 |
[vagrant@localhost ~]$ cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) |
CentOS6.9 など枯れたOSを使っていれば、問題ないと思いますが。
まとめ
VirtualBox と Vagrant を使って、仮想マシンを使っているとき、古いBoxを使っていると、共有フォルダが使えなかったりすることがあります。
そんな時は、BoxにインストールされているGuestAdditionsのバージョンが古い可能性があります。
仮想マシンのGuestAdditionsのバージョンを使用しているVirtualBoxに合わせて再構築するには、Vagrant の プラグイン vagrant-vbguest が便利です。
ただ、GuestAdditionsのバージョンが VirtualBox と違っていても、共有フォルダが見れている場合は、実害がないため、無理にバージョンを合わせる必要はないですので、必要な場合を見極めて行いましょう。
いくつもBoxイメージを使っている場合、GuestAdditionsのバージョンアップが必要な時だけ、vagrant-vbguest を導入して、いつもはアンインストールしておいた方が良いかもしれません。
plugin をアンインストールするのは、 vagrant plugin uninstall プラグイン名 です。
1 2 3 4 5 6 7 8 9 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant plugin list vagrant-vbguest (0.17.2, global) user@cf-nx2 MINGW64 /c/data/tk/vagrant/autotest $ vagrant plugin uninstall vagrant-vbguest Uninstalling the 'vagrant-vbguest' plugin... Successfully uninstalled micromachine-2.0.0 Successfully uninstalled vagrant-vbguest-0.17.2 |
コメント