[Vagrant & VirtualBox] Vagrant: package で独自の Box を作成する

memo.

以前に試していましたが、

こちらを読んで新しいことを知ったので、あらためてメモ。

Box を作成する

vagrant up でプロビジョニングする

なにがしかの Box を vagrant up で立ち上げます(ここでは vccw)。

% vagrant up

VM で /etc/udev を無効化する

VM へ ssh します。

% vagrant ssh

VM 内で下記を実行し、/etc/udev を無効化します。

$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules

上記で /dev/null へ捨てている設定は、

今時のLinuxはudevが親切にもネットワークインターフェース名とMACアドレスの関係を固定化してくれるんだが、この機能って同じディスクイメージの複製が使いまわされることが前提の仮想マシンを前提にすると非常に邪魔になる。具体的にはコピーしたイメージ上ではeth0が出来なかったり、eth1になっちゃったりとか…。

とのこと。
VM から exit します。

$ exit

Box を作成、登録する

設定を終えた box を package します。

% vagrant package

カレントディレクトリに package.box が作成されたので、これを登録します。

% vagrant box add vccw package.box

下記で登録を確認できます。

% vagrant box list

実体はこちら。

% ls ~/.vagrant.d/boxes

利用した一時ファイルは削除します。

% rm package.box

つかいかた

Vagrantfile 内で作成した Box を指定すると、再利用してくれます。

Vagrantfile
VM_BOX               = "vccw" # for 32bit

補遺

せっかくなので作り直して時間を計ってみます。

% vagrant destroy
% time vagrant up

vccw box を再利用した場合。

vagrant up  10.31s user 6.23s system 2% cpu 12:31.68 total

しなかった場合。

vagrant up  9.51s user 4.56s system 0% cpu 49:27.04 total

しかし、自分の環境は遅いな。