Vagrant (1.0 系) のベースBOX作成手順 (Debian wheezy)

Vagrant のベースBOX 作成手順をネットで探すとたいていの場合、 veewee を使用していますが、無理に使用する必要はありません。
全自動化できれば便利ではあるのですが、個人的には手作業で作成するほうが手軽で気に入っています。

http://d.hatena.ne.jp/okinaka/20110805/1312474847
で一連の流れはつかめていましたが、Debian wheezy リリースに伴い、Vagrant のベースBOX を久々におさらいしてみました。
なお Vagrant のバージョンは、1.0.7 です。(1.2 系はまだ試していません。)

VirtualBox の画面から仮想マシンの新規作成

名前 debian-wheezy
OS Linux
バージョン Debian(64bit)
メインメモリ 512 MB
チップセット PIIX3
オーディオ 無効
USB 無効
ネットワーク NAT
ストレージ(HDD) 80GB (動的拡張VMDK形式)
ストレージ(CDROM) インストールDVDイメージを割り当て(インストール時のみ)

ストレージのコントローラの設定で、「ホストのI/Oキャッシュを使う」にチェックを入れると、アクセスが格段に速くなります。物理ディスクには非同期に書き込まれることになるので、信頼性は落ちますが、テスト環境構築が目的なのでパフォーマンスを優先します。

仮想マシンDebian wheezy をインストール

なるべく最小構成になるように注意しつつ通常通りインストールします。

インストール後の作業

root でログインして、Vagrant 仕様にセットアップします。

パッケージ更新

今回はネットワークインストール版を使用したので、最新の状態になっているため不要でした。

ビルド用パッケージ

Chef や VirtualBox Guest Addition インストールのために必要なパッケージをインストール。

 $ apt-get install curl ruby ruby-dev build-essential linux-headers-amd64
Chef

Chef のインストール。今回は、chef10.x 系を利用したかったためバージョンを指定しています。

 $ gem install -v 10.26.0 chef --no-ri --no-rdoc
Guest Addition

VirtualBox の [デバイス]-[GuestAdditionインストール]を選択する。

GuestAddition のインストール

 $ mount /dev/cdrom /mnt
 $ bash /mnt/VBoxLinuxAdditions.run
パッケージ削除

VMサイズ削減のため、可能な限り不要なパッケージは削除します。

sudo

パスワードなしで sudo できるようにします。

コマンド:

 $ visudo

設定内容:

%sudo ALL=(ALL) NOPASSWD:ALL
openssh

openssh サーバの設定を変更。ログイン時間が短縮されるらしいです。

 $ echo 'UseDNS no' >> /etc/ssh/sshd_config
vagrant ユーザ

vagrant ユーザに、sudo 権限を付加、ssh 公開鍵認証でログインできるようにします。

 $ gpasswd -a vagrant sudo
 $ mkdir /home/vagrant/.ssh
 $ chmod 700 /home/vagrant/.ssh
 $ cd /home/vagrant/.ssh
 $ curl 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' > authorized_keys
 $ chown -R vagrant:vagrant /home/vagrant/.ssh
VM コンパクト化

VM イメージのコンパクト化のためのおまじない

 $ dd if=/dev/zero of=/EMPTY bs=1M || rm /EMPTY

Vagrant パッケージ化

仮想マシンをシャットダウンした後、ホストマシン上でベースBOXのパッケージ化します。

 vagrant package --base debian-wheezy

package.box が生成されます。ファイルサイズは 230MB 程度になりました。