VirtualBox上の仮想マシンをvagrantのboxにする方法はありきたりだが、たいていはLinux、OS Xでの話で、Windowsでのメモはあまりない。そこでメモ。

packageの作成

VirtualBox上の仮想マシンをパッケージする。
vagrant packageの-baseオプションにVirtualBox上の仮想マシン名を与える。
なお、そのまえにUSB、サウンドは無効にしておいたほうがよい。

C:\Users\nobwak\vagrant>vagrant package --base centos64
==> centos64: Exporting VM...
==> centos64: Compressing package to: C:/Users/doe/vagrant/package.box

カレントディレクトリにpackage.boxができた。
この中に仮想マシンが入っている。
あとはこれをどこに移動してもよい。
うーん、ポータブル。
次にこの中の仮想マシンをvagrantから参照する方法。

package.boxをvagrantから参照する。

vagrant init <新規に作成する仮想マシンの名前> <package.boxの場所>と指定してvagrantfileを作る。
もちろんvagrant initと空撃ちして手で書き換えてもよい。後述。

package.boxはローカルに置いてあるので、場所の指定は「file://」に続けてパスを書く。
windowsの場合は「/C:/path/to/package.box」のように書く。
結果、「file:///C:/….」となる。
スラッシュが多くて不安になるけど、これでよい。
なお、windowsっぽく円マークあるいはバックスラッシュを使ってしまうとエスケープされてしまい、vagrantがpackage.boxを見つけられない。注意。

C:\Users\nobwak\vagrant>vagrant init centosTest file:///c:/Users/doe/vagrant/package.
box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

C:\Users\nobwak\vagrant>

Vagrantfileが以下のようになっていること。
vagrant initを空撃ちした場合には、以下の二行を加えること。

config.vm.box = "centosTest"
  config.vm.box_url = "file:///c:/Users/nobwak/vagrant/package.box"

あとはvagrant upでよい。

C:\Users\nobwak\vagrant>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos64' could not be found. Attempting to find and install..
<中略>
==> default: Booting VM...
<後略>

別の方法:box listに登録する。

package.boxをvagrantのbox listに登録しておけば、いちいちpackage.boxの場所を指定しなくてもいいようになる。

C:\Users\doe\vagrant>vagrant box add centosSkel package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centosSkel' (v0) for provider:
    box: Unpacking necessary files from: file://C:/Users/nobwak/vagrant/package.box

    box: Progress: 100% (Rate: 9737k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'centosSkel' (v0) for 'virtualbox'!

あとは定石で。

C:\Users\nobwak\vagrant>vagrant init centosSkel
<略>
C:\Users\nobwak\vagrant>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centosSkel'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_default_1442498300953_28586
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...```