veeweeを使ってVagrant用のboxを自分で作る方法

 2013/04/27
このエントリーをはてなブックマークに追加

Vagrant用のbox(OSのテンプレート)はhttp://www.vagrantbox.es/などで多数配布されています。 とりあえず試してみる分にはこちらにあるものを使ってみるのも良いですが、実際に開発で使おうとするといくつか問題があります。

  • そのOSに怪しいプログラムがインストールされているかもしれない
  • 初期の設定が自分たちの環境と大きく乖離している。例えばyumのレポジトリが多数追加されたりしている
  • VirtualBoxのGuestAdditionsなどのバージョンが古くてそもそも正しく動かないかもしれない

こういったことを避けるためには、自分たちでセキュアなboxを作るのが良いと思います。ここではveeweeを使って、自分用のboxを作る方法を紹介します。

veeweeのインストール

veeweeはrubyで書かれたツールで、vagrantをはじめとする多くの仮想化ツール用にOSの雛形を作成することができます。 gem形式で提供されているので、gemコマンドでインストールしたくなるかもしれませんが、新たなOSが出る一方で、gemは更新が止まっているようなので、github経由で導入するのがオススメです。 今回はUbuntu12の環境を使いました。

まず、依存関係のあるライブラリをインストールします。

sudo apt-get install libxml2 libxml2-dev libxslt-dev

次にgithubからcloneしてモジュールを持ってきてインストールします。

git clone https://github.com/jedi4ever/veewee.git
cd veewee
bundle install

これで準備完了です。

使い方

使い方は簡単です。とりあえず使い方を知りたければ

bundle exec veewee vbox

とすれば利用可能なコマンドやオプションの一覧が表示されます。

作成可能なboxの一覧を表示する

veeweeには予めbox構築用のテンプレートが多数内包されています。それを表示するには

bundle exec veewee vbox templates

としてください。 以下のように表示されます。CentOSやFedora、Ubuntu、Gentooなどなど多くのディストリビューションに対応しています。(ただし古いものは作成できない可能性もあります)

The following templates are available:
veewee vbox define '<box_name>' 'CentOS-4.8-i386' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'CentOS-5.9-i386' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'CentOS-6.0-i386' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'CentOS-6.4-i386-minimal' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'CentOS-6.4-i386-netboot' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'CentOS-6.4-x86_64-minimal' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'CentOS-6.4-x86_64-netboot' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'Debian-5.0.10-amd64-netboot' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'Fedora-18-x86_64' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'scientificlinux-6.4-x86_64-netboot' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'solaris-10-ga-x86' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'solaris-11-express-i386' --workdir=/home/ryuzee/dev/veewee
veewee vbox define '<box_name>' 'ubuntu-10.04.2-amd64-netboot' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'ubuntu-12.10-server-i386-packages' --workdir=/home/ryuzee/dev/veewee
(略)
veewee vbox define '<box_name>' 'windows-8-preview-amd64' --workdir=/home/ryuzee/dev/veewee

boxのテンプレートを使ってbox作成の準備をする

上記でテンプレートの一覧を確認したので、テンプレートから今回作成するbox用の設定ファイルを作成します。’CentOS-6.4-x86_64-ja’となっている箇所は自分で好きな名前をつけてください。

bundle exec veewee vbox define 'CentOS-6.4-x86_64-ja' 'CentOS-6.4-x86_64-minimal' --workdir=/home/ryuzee/dev/veewee

これでdefinitions/CentOS-6.4-x86_64-ja/ 以下にファイルが作成されます。

definitions/CentOS-6.4-x86_64-ja/
├── base.sh
├── chef.sh
├── cleanup.sh
├── definition.rb
├── ks.cfg
├── puppet.sh
├── vagrant.sh
├── virtualbox.sh
└── zerodisk.sh

自分でインストール内容をカスタマイズする場合は上記のファイルを編集します。いくつか例をあげます。

言語とキーボードの設定の場合

ks.cfgを編集します。

lang en_US.UTF-8
keyboard us

となっている箇所を

lang ja_JP.UTF-8
keyboard jp106

に変更してください。

インストール時に行う作業の設定の場合

definition.rbを編集します。ここでは仮想マシンのディスクサイズやメモリ、OSのイメージファイルのダウンロード先、このインストール作業自体のタイムアウトや、標準のインストールが終わったあとの追加のインストール作業の設定が可能です。例えば、puppetのクライアントのインストールが必要がない場合は

  :postinstall_files => [
    "base.sh",
    "chef.sh",
    "puppet.sh",
    "vagrant.sh",
    "virtualbox.sh",
    "cleanup.sh",
    "zerodisk.sh"
  ],

の箇所からpuppet.shを外せばOKです。またここで読み込まれているのは単なるシェルスクリプトなので、自分で別のシェルを作成して、ここに追加しても構いません。

OSのインストールを開始する

それでは実際にOSのインストールを開始しましょう。

bundle exec veewee vbox build 'CentOS-6.4-x86_64-ja' --workdir=/home/ryuzee/dev/veewee

としてください。これで、Virtualboxが起動し、インストールが始まります。OSのイメージがない場合は自動でダウンロードをするので少し時間がかかるかもしれません。

でき上がったOSイメージをvagrant用に変換する

上記の時点では、まだOSイメージはVirtualbox用のままなので、以下のコマンドでVagrant用のboxに変換します。

bundle exec veewee vbox export 'CentOS-6.4-x86_64-ja'

でき上がったboxをvagrantに追加する

これで準備ができたので、Vagrantに追加して利用することができます。

vagrant box add 'CentOS-6.4-x86_64-ja' '/home/ryuzee/dev/veewee/CentOS-6.4-x86_64-ja.box'

以上で作業は完了です。boxを他人と共有する場合はAmazon S3あたりに置いておくとよいかもしれません。

なお、余談ですが、上記の作業はUbuntuやMacを使ってやるのがおすすめです。僕はWindows上でcygwinを使ったりRubyinstallerを使ったりして試してみましたが、どちらも環境を作るのが一筋縄ではいきませんでした…

 2013/04/27
このエントリーをはてなブックマークに追加