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

memo.

[markdown]

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

> * [Vagrant: package, plugin | deadwood](https://www.d-wood.com/blog/2013/09/20_4694.html)

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

> * [VCCWのboxを作成してVagrantのプロビジョニング時間を短縮する | firegoby](http://firegoby.jp/archives/5657)

## Box を作成する

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

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

> * [WordPress 用の Vagrant 環境 vccw を利用する | deadwood](https://www.d-wood.com/blog/2014/08/27_6674.html)

“`prettyprinted
% vagrant up
“`

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

VM へ ssh します。

“`prettyprinted
% vagrant ssh
“`

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

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

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

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

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

“`prettyprinted
$ exit
“`

### Box を作成、登録する

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

“`prettyprinted
% vagrant package
“`

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

“`prettyprinted
% vagrant box add vccw package.box
“`

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

“`prettyprinted
% vagrant box list
“`

実体はこちら。

“`prettyprinted
% ls ~/.vagrant.d/boxes
“`

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

“`prettyprinted
% rm package.box
“`

## つかいかた

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

“`ruby:Vagrantfile
VM_BOX = “vccw” # for 32bit
“`

## 補遺

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

“`prettyprinted
% vagrant destroy
% time vagrant up
“`

vccw box を再利用した場合。

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

しなかった場合。

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

しかし、自分の環境は遅いな。
[/markdown]