皆さまこんにちはFL.OPSの中の人、はまもつです。
出勤時に新社会人の方を見かける季節になってきましたね。
私もこのブログに投稿し始めて2回目の新参者ですがよろしくお願いします。

さて、春は新しい事を始めるには絶好の機会です。
この機会にVagrantに触れてみるのはいかがでしょうか?
「Linuxを勉強のために触ってみたいけどPCが…」
「新人教育でLinux教育を行いたいのですが手元にはWindowsしかない…」
このような悩みをお持ちの方は、仮想マシンの環境をサクッと作成できるVagrantを使ってみましょう。

前回の記事ではVagrantのインストールから仮想マシンの起動・終了・削除など基本的な使い方をご紹介しました。
今回は共有フォルダ、プラグイン、Boxの作成方法をご紹介致しましょう。

プラグインを使ってみる

Vagrantには様々なプラグインが用意されており。コマンドでインストール・アンインストールが可能です。
今回はSandboxモードを使用可能にするsaharaプラグインを利用してみましょう。

1.saharaプラグインをインストール

flops$ vagrant plugin install sahara

上のコマンドを実行するとsaharaプラグインが実行されます。

flops$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.16)'!

sandboxで使用できるコマンドは通常のコマンドと同じように–helpで確認できます。

$ vagrant sandbox --help
Usage: vagrant plugin

2.Sandboxモードを有効にする

$ vagrant sandbox on

3.仮想マシンに対して変更を行う

flops:$ vagrant ssh
centos:vagrant$ su -
centos:root$ yum install php

今回はPHPをインストールしてみました。

[root@localhost ~]# php --version
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

PHPがインストールできた事を確認できます。

4.仮想マシンの変更を取り消す

flops$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

上記コマンドで仮想マシンの変更が取り消されます。

5.Rollbackの確認を行う

flops$ vagrant ssh
Last login: Fri Mar  7 16:57:20 2014 from 10.0.2.2
[vagrant@localhost ~]$ php --version
-bash: php: コマンドが見つかりません

仮想マシンの変更が取り消されている事を確認できます。

6.仮想マシンの変更を確定する

先ほどは変更を取り消しましたが、変更を確定する場合はsandbox commitを行います。

flops$ vagrant sandbox commit
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

7.sandboxモードを解除する

sandbox offで解除した後に、sandbox statusで状態を確認する事ができます。

flops$ vagrant sandbox off
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
flops$ vagrant sandbox status
[default] Sandbox mode is off

8.プラグインをアンインストールする

インストールしたプラグインをアンインストールした後に確認を行います。

flops$ vagrant plugin uninstall sahara
Uninstalling the 'sahara' plugin...
flops$ vagrant plugin list
vagrant-login (1.0.1, system)
vagrant-share (1.0.1, system)

メモ

使用できるプラグインの一覧はこちらにまとめられているので好みのプラグインを探してみましょう。

共有フォルダ

VagrantはホストOSとゲストOS間で使用できる共有フォルダが存在します。
初期状態ではホスト側のVagrantfileが存在するディレクトリとゲストOSの「/vagrant」ディレクトリが共有フォルダになっています。

1.共有フォルダを任意の場所に設定する

指定したディレクトリを共有フォルダにしたい場合はVagrantfileを以下のように編集します。
(初期状態ではコメントアウトされています)

config.vm.synced_folder "../data", "/home/vagrant/vagrant_data"

上の設定を解説すると、ホストOSのVagrantfileが存在するディレクトリの一階層上のdataディレクトリと、
ゲストOSの/home/vagrant/vagrant_dataディレクトリが共有フォルダとして関連付けられます。

メモ

仮想マシンを起動する際に以下のようなエラーが発生して共有フォルダのマウントが失敗する場合があります。

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

これはホストOSとゲストOSのGuest Additionsのバージョンが一致していない事で発生します。
手動でGuest Additionsのインストールを行っても良いのですが、vagrant-vbguestというプラグインを利用すると
自動でホストとゲストのGuest Additionsを同期する事ができます。
プラグインに関する詳細はvagrant-vbguestの公式ページを御覧ください。

オリジナルのBoxを作成する

自分で作成した仮想マシンをBox化する事ができます。
作成したBoxを配布する事で自分以外の人に同じ環境を提供する事ができます。

flops$ vagrant package
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /Users/flops/vagrant/centos65/package.box
flops$ ls
Vagrantfile	package.box

「vagrant package」で仮想マシンをBox化する事ができpackage.bokファイルが作成されます。
作成されたBoxファイルは

vagrant box add %ボックス名% package.bok

とする事で使用する事ができます。

2回に渡ってVagrantの基本的な使い方を解説しました。
複数人で同じ仮想マシンを配布する際にはとても手軽に配布できるのでぜひ利用してみてください。