ブログ

ryuzeeによるブログ記事。不定期更新

VagrantのboxのVBoxGuestAdditionsを超簡単に最新版に更新する方法

小ネタです。 Vagrantを使って色々やっているときにちょっと困ることとして以下のようなことがあります。

  • VirtualBox本体が頻繁にバージョンアップするので、boxのGuestAdditionのバージョンとVirtualBoxが要求するバージョンがすぐにずれる
  • vagrantboxesをはじめとする外部で公開されているboxをダウンロードして使おうとすると、GuestAdditionのバージョンが古い
解決する方法はもちろんboxにインストールされているGuestAdditionを最新版に入れ替えることなのですが、これを手作業でやると結構面倒です。

すなわちインスタンスを起動して、GuestAdditionのisoイメージをマウントしてインストーラーをどっかにコピーし、自分でビルドしてインストールしなければならないわけです。そもそも、GuestAdditionのisoイメージどこだっけ?みたいなことになってしまうし、忙しい時に毎回同じことをやるのはアホくさい(DRY原則違反ですよw)。

ということでVagrantのプラグインを使って簡単に解決する方法を紹介します。

プラグインのインストール

今回使うのは、vagrant-vbguestというプラグインです。 詳細はhttps://github.com/dotless-de/vagrant-vbguestを見て下さい。

インストールはいつも通り

gem install vagrant-vbguest

とします。 で、この状態で、インスタンスを起動してしまうと、無条件にGuestAdditionのバージョンが古ければ自動で更新しにいくようになります。 ただ、毎回自動で更新をかけられても鬱陶しいし、更新タイミングは自分で制御したいので、設定ファイルを作ります。 設定ファイルは、$HOME/.vagrant.d/Vagrantfile になります。まだファイルがない場合は作成してください。 中身は以下のようになります。

# vagrant's autoloading may not have kicked in
require 'vagrant-vbguest' unless defined? VagrantVbguest::Config
VagrantVbguest::Config.auto_update = false

これでインスタンスの起動時に自動で更新するのは抑止されます。

使い方

使い方は簡単です。まずインスタンスをいつも通りvagrant upで起動してください。 起動後に以下のようにします。
vagrant vbguest --status

この時

[default] GuestAdditions 4.2.6 running --- OK.

と表示されれば、既にGuestAdditionは最新になっています。一方で

[default] GuestAdditions versions on your host (4.2.6) and guest (4.1.8) do not match.

となっている場合はバージョンの相違が発生しています。

相違がある場合は、以下のようにして最新版に更新します。

vagrant vbguest --do install

更新が終わったら、そのままだと読み込まれないので、vagrant reloadして有効にしてください。 いままでの流れはこんな感じで表示されると思います。

このスクリーンショットでは最後の行の処理でNGが出ていますが、X-Windowをインストールしておらず、それ用のGuestAdditionのモジュールがインストールされないだけなので問題ありませんので念のため。

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら