はじめに
以前のエントリ開発者必見!仮想環境の構築を自動化する方法とはでは、Packerおよび、Vagrantを使用した仮想化インフラの自動化の方法について解説しました。今回は、前回紹介できなかったもう一つの自動化ツールであるVeeweeのインストールからVirtualBox用の仮想マシンイメージ(Box)の作成などについて解説します。
Veeweeとは
Veeweeは、jedi4ever(Patrick Debois)氏が2010年に開発を始めたVagrant用の仮想マシンイメージ(Box)を作成するツールです。作成可能なBoxは、VirtualBox, VMware(Fusion),KVM,Parallelsとなっており、仮想化ソフトウエアのデファクトスタンダードととも言えるVMwareおよび、VirtualBox用のBoxを簡単に作成することができます。余談ですが、作者のハンドルネームであるjedi4everは、「JEDI FOREVER」と読めますので、スター・ウォーズの熱烈なファンなのかも知れません。
Veeweeのインストール
今回、Veeweeをgithub(ギットハブ)から最新のパッケージを取得してインストールを行います。また、Veeweeはオブジェクト指向言語Rubyで実装されているため、rubyがインストールされている必要があります。その他にも、Veeweeをインストールするには、必要となるさまざまなソフトウエアを導入する必要があります。下記の環境にてVeeweeのインストールを行います。
種別 | ソフトウエア |
ホストOS | Windows 7 Ultimate |
UNIX環境 | Cygwin 1.7.25 |
仮想化ソフトウエア | VirtualBox 4.2.18 r88780 |
自動化ソフトウエア | Vagrant 1.2.7 |
Ruby | ruby 1.9.3p448 (2013-06-27) [i386-mingw32] |
Git(ギット) | git version 1.8.4.msysgit.0 |
OpenSSH | OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007 |
Veewee | veewee (0.3.8.dev) |
- VirtualBoxのインストール
VirtualBoxのインストール方法については、VirtualBoxの導入からOSインストールまでのチュートリアル解説を参照して下さい。
- Vagrantのインストール
Vagrantのインストール方法については、開発者必見!仮想環境の構築を自動化する方法とはを参照して下さい。
- Gitのインストール
msysgitの中から、Full installer for official Git for Windows 1.8.4をインストールします。
①ダウンロードしたインストーラーを起動します。 ②Select Componentsでは「Additional icons」を選択します。 ③Adjusting your PATH environmentでは、 「Run Git and included Unix Tools from the Windows Command Prompt」を 選択します。警告として「Windowsツールのfind.exeとsort.exeが上書きされる..」 とありますが、Git専用のコマンドプロンプトを使用しますので無視して構いません。 ④Configuring the line encoding Conversionsでは、 「Checkout as-is,commit Unix-Style line encodings」を選択します。 デフォルトのままだと、githubからcheckoutした全てのファイルの改行コードが Windowsの行末コードLR+LFに変換されてしまい、rubyコマンドの実行時にエラーと なりますので、注意して下さい。 ⑤インストールが開始され、デスクトップおよび、スタートメニューにGit Bash ショートカットが登録されます。 ⑥Git Bashの起動 デスクトップから、Git Bashのショートカットをクリックすると、Git Bash専用の コマンドプロンプトが表示されますので、sshおよび、gitコマンドが実行できるか 確認します。スクリーンショットでは、ショットのプロパティの作業フォルダを D:\Veeweeに変更しています。 $ ssh -V $ git --version
- Ruby for Windowsのインストール
RubyInstaller for Windowsから、Ruby 1.9.3-p448をダウンロードし、任意のフォルダに解凍します。なお、ダウンロードされるアーカイブが7-ZIP形式で圧縮されていますので、ExpLZHなどを使って解凍し、解凍したフォルダ中のbinフォルダにPATHを通します。ここでは、D:\Veeweeに解凍を行い、D:\Veewee\ruby\binにPATHを通しています。Git Bashを起動し、rubyおよび、gemコマンドが実行できるか確認します。
$ ruby -v $ gem -v
- Devkitのインストール
Devkitは、rubyの拡張機能をインストールする際に必要となりますので、必ずインストールして下さい。
①Devkitの解凍 RubyInstaller for Windowsから、 DevKit-tdm-32-4.5.2-20111229-1559-sfx.exeをダウンロードし、任意のフォルダに 解凍します。ここでは、D:\Veeweeに解凍しています。 ②Devkitの初期化 ①で解凍したフォルダに移動し、以下のコマンドを実行します。 $ ruby dk init 初期化が成功すると、下記のメッセージが表示されます。 初期化が成功しても、Rubyの場所を検出できない場合がありますので、 その場合config.ymlを編集してRubyの場所を指定します。 - d:\Veewee\ruby 編集内容が正しいか、以下のコマンドを実行して確認します。 $ ruby dk.rb review 指定したRubyの場所が出力されます。 もし、config.ymlの内容に不備があった場合、下記のメッセージが表示されます。 $ ruby dk.rb review ③Devkitのインストール ①で解凍したフォルダに移動し、以下のコマンドを実行します。 $ ruby dk.rb install config.ymlで指定した場所に、devkit.rbがインストールされます。 ④bundlerのインストール bundlerは、gemコマンドでインストールしようとするソフトウエアの依存関係を チェックして、インストールエラーが発生しないソフトウエアの組み合わせを試行 してインストールしてくれるコマンドですので、必ずインストールして下さい。 Git Bashシェルを起動して、以下のコマンドを実行します。 $ gem install bundler --no-rdoc --no-ri
- Veeweeのインストール
ここまでで、Veeweeをインストールする際に必要となるソフトウエアが全てインストールされましたので、Git Bashを起動しインストールします。
①Veeweeの最新パッケージを取得する。 $ git clone git://github.com/jedi4ever/veewee.git ②Veeweeをインストールする。 $ cd veewee/ $ bundle install
以上で、Veeweeのインストールが終了します。
仮想マシンイメージの作成
- 作成可能なBox名の取得
Veeweeでは、予め作成可能なBoxテンプレートの一覧が取得できますので、最初にテンプレート一覧を以下のコマンドを実行して取得します。
$ cd veewee $ bundle exec veewee vbox templates
実行すると、執筆時点で167行のBoxリストが出力されましたので、この中から作成するBoxを選択します。なお、出力されるリストは、そのままBox作成時のコマンドライン引数として利用できます。今回は、CentOS-6.4-i386-minimalをテンプレートとして使用します。
- Boxの作成
作成するBoxが決定したら、Box一覧の行のを任意の名前に変更して実行します。
(修正前) veewee vbox define '' 'CentOS-6.4-i386-minimal' --workdir=d:/Veewee /veewee (修正後) veewee vbox define 'veewee-centos64-minimal' 'CentOS-6.4-i386- minimal' --workdir=d:/Veewee/veewee
修正が完了したら、veewee実行時のコマンドライン引数として実行します。
$ bundle exec veewee vbox define 'veewee-centos64-minimal' 'CentOS- 6.4-i386-minimal' --workdir=d:/Veewee/veewee
実行が成功すると、definitionsフォルダ下に以下のファイルが生成されます。
作成するBoxの設定をカスタマイズする場合、これらのファイルを編集します。ここでは、日本語環境でインストールするようにks.cfgを修正します。ks.cfgは、CentOSの自動インストールの際に使用される設定ファイルです。ks.cfgの詳細については、Starting a Kickstart Installationを参照して下さい。
(修正前) lang en_US.UTF-8 keyboard us timezone UTC (修正後) lang ja_JP.UTF8 keyboard jp106 timezone Asia/Tokyo
次に、仮想マシンのカスタマイズを行うため、definition.rbを修正します。ここでは、CPU数、RAMサイズ、ISOイメージファイルのロケーションを修正します。
(修正前) :cpu_count => '1', :memory_size=> '480', :iso_src => "http://yum.singlehop.com/CentOS/6.4/isos/i386/CentOS- 6.4-i386-minimal.iso", (修正後) :cpu_count => '2', :memory_size=> '1024', :iso_src => "ftp://ftp.iij.ad.jp/pub/linux/centos/6.4/isos/i386 /CentOS-6.4-i386-minimal.iso",
修正が完了したら、veewee vbox buildを実行します。
$ bundle exec veewee vbox build veewee-centos64-minimal
指定したBoxのビルドが開始され、definition.rbで指定したiso_srcからISOファイルをダウンロードするかを聞いて来ますので、Yesを入力します。
ISOイメージのダウンロードが終了すると、VirtualBoxが起動されCentOSのインストールが自動的に実行されます。
しばらくすると、OSのインストールが完了しBoxの再起動後、Veeweeによるプロビジョニングが実行されます。
Boxのビルドが成功すると、下記のメッセージが表示されます。
The box veewee-centos64-minimal was built successfully! You can now login to the box with: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 7222 -l veewee 127.0.0.1
- Boxのシャットダウン
インストールが終了しても、Boxは起動したままの状態となっていますので、Boxにログインして、シャットダウンします。
ログインアカウントは、下記の3つのアカウントが作成されています。
UID | PASSWORD |
---|---|
vagrant | vagrant |
veewee | veewee |
root | vagrant |
以上で、Boxの作成が終了します。
Vagrant Boxへの変換
Veeweeで作成したBoxは、VirtualBoxには追加されており、このままではVirtualBoxからは起動できますが、Vagrantから起動することができません。このため、Veeweeで作成したBoxをVagrant用のBoxファイルに変換します。
$ bundle exec veewee vbox export veewee-centos64-minimal
以上で、Veeweeが作成したBoxをVagrantで起動できるBoxに変換できます。
Vagrant Boxの起動
VeeweeによってエクスポートされたBoxは、カレントフォルダに保存されますので、以下の手順でVagrantから起動できます。
①任意のフォルダを作成し、Vagrantを初期化します。 $ vagrant init veewee-centos64-minimal ②エクスポートされたBoxを追加します。 $ vagrant box add veewee-centos64-minimal /d/Veewee/veewee/veewee- centos64-minimal.box ③追加したBoxを起動します。 $ vagrant up ④起動したBoxに接続します。 $ vagrant ssh 以上で、Veeweeで作成したBoxを起動できます。Box起動後は、shutdownコマンドで Boxを停止します。 ⑤起動したBoxを停止します。 $ sudo shutdown -h now
まとめ
ここまで、VeeweeのインストールからVirtualBox用の仮想マシンイメージ(Box)の作成などについて解説しました。Veeweeを使ったBox自動化では、作成されたBoxを手動で停止することが必要になりますが、テンプレートを利用してさまざまなBoxを作成できます。また、テンプレート作成時に生成される設定ファイルをPackerで利用することも可能ですので、組み合わせて利用することで、より柔軟に自動化を行うことができます。