はじめに
第2回の記事では、作成した仮想マシンをVagrant化する方法について解説しました。最終回となる今回は、Vagrant化した仮想マシンをVagrant Boxに変換する方法を解説します。
Vagrant Boxの作成
作成した仮想マシンをVagrant Boxとして作成します。
以下の手順で、Vagrant Boxを作成します。
-
VirtualBoxイメージのエクスポート
作成した仮想マシンを、OVF(Open Virtualization Format)形式でエクスポートします。
実行すると、box-disk1.vmdkおよび、box.ovfファイルが作成されます。$ mkdir -p ~/mybox/vagrant/CentOS-6.4-x86_64-minimal && cd ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ VBoxManage export CentOS-6.4-x86_64-minimal -o box.ovf
punio@PAPA ~ $ mkdir -p ~/mybox/vagrant/CentOS-6.4-x86_64-minimal && cd ~/mybox/vagrant/CentOS-6.4-x86_64-minimal punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ VBoxManage export CentOS-6.4-x86_64-minimal -o box.ovf 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully exported 1 machine(s). punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ VBoxManage showvminfo CentOS-6.4-x86_64-minimal --machinereadable | grep ^macaddress1 macaddress1="080027D71F3F" punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vi Vagrantfile
-
Vagrantfileファイルの作成
Vagrant Boxに変換する際に使用するVagrantfileを作成します。
Vagrantでは、Box起動時にnatインターフェースを使ってBoxに接続しますので、作成したVMのNICのMACアドレスを調べた後、Vagrantfileに指定します。$ VBoxManage showvminfo CentOS-6.4-x86_64-minimal --machinereadable | grep ^macaddress1
下記の内容を指定して、Vagrantfileを作成します。
指定するconfig.vm.base_macには、先程調べたMACアドレスを指定します。Vagrant::Config.run do |config| config.vm.base_mac = "080027D71F3F" end
-
Vagrant Boxの作成
Boxを作成する準備が整いましたので、Boxを作成します。
Boxは、tar形式でアーカイブされていますので、tarコマンドでアーカイブします。
Boxファイルを作成したら、作成した3つのファイルは削除します。$ tar cvf /export/vagrant/CentOS-6.4-x86_64-minimal.box . $ rm -f box-disk1.vmdk box.ovf Vagrantfile
punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ tar cvf /export/vagrant/CentOS-6.4-x86_64-minimal.box . ./ ./box-disk1.vmdk ./box.ovf ./Vagrantfile punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ rm -f box-disk1.vmdk box.ovf Vagrantfile punio@PAPA ~ $ mkdir -p ~/mybox/vagrant/ubuntu-12.10-server-i386 && cd ~/mybox/vagrant/ubuntu-12.10-server-i386
veeeweeで作成したVMも同様の手順でBoxに変換できます。その際には、VMをシャットダウンして実行して下さい。
$ mkdir -p ~/mybox/vagrant/ubuntu-12.10-server-i386 && cd ~/mybox/vagrant/ubuntu-12.10-server-i386 $ VBoxManage export ubuntu-12.10-server-i386 -o box.ovf $ VBoxManage showvminfo ubuntu-12.10-server-i386 --machinereadable | grep ^macaddress1 $ tar cvf /export/vagrant/ubuntu-12.10-server-i386.box . $ rm -f box-disk1.vmdk box.ovf Vagrantfile
punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ VBoxManage export ubuntu-12.10-server-i386 -o box.ovf 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully exported 1 machine(s). punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ VBoxManage showvminfo ubuntu-12.10-server-i386 --machinereadable | grep ^macaddress1 macaddress1="080027BEEA79
punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ tar cvf /export/vagrant/ubuntu-12.10-server-i386.box . ./ ./box-disk1.vmdk ./box.ovf ./Vagrantfile punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386
Vagrant Boxの起動
作成したCentOS Boxを起動します。
$ cd ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vagrant box add CentOS-6.4-x86_64-minimal /export/vagrant/CentOS-6.4-x86_64-minimal.box $ vagrant init CentOS-6.4-x86_64-minimal $ vagrant up $ vagrant ssh
punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vagrant box add CentOS-6.4-x86_64-minimal /export/vagrant/CentOS-6.4-x86_64-minimal.box Downloading or copying the box... Extracting box...ate: 394M/s, Estimated time remaining: --:--:--) Successfully added box 'CentOS-6.4-x86_64-minimal' with provider 'virtualbox'! punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vagrant init CentOS-6.4-x86_64-minimal 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. punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'CentOS-6.4-x86_64-minimal'... [default] Matching MAC address for NAT networking... [default] Setting the name of the VM... [default] Clearing any previously set forwarded ports... [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Mounting shared folders... [default] -- /vagrant punio@PAPA ~/mybox/vagrant/CentOS-6.4-x86_64-minimal $ vagrant ssh Last login: Wed Nov 27 00:19:36 2013 [vagrant@centos64-x86_64 ~]$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:D7:1F:3F inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fed7:1f3f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:278 errors:0 dropped:0 overruns:0 frame:0 TX packets:180 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:31127 (30.3 KiB) TX bytes:24701 (24.1 KiB) [vagrant@centos64-x86_64 ~]$
作成したubuntu Boxを起動します。
$ cd ~/mybox/vagrant/ubuntu-12.10-server-i38 $ vagrant box add ubuntu-12.10-server-i386 /export/vagrant/ubuntu-12.10-server-i386.box $ vagrant init ubuntu-12.10-server-i386 $ vagrant up $ vagrant ssh
punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ vagrant box add ubuntu-12.10-server-i386 /export/vagrant/ubuntu-12.10-server-i386.box Downloading or copying the box... Extracting box...ate: 36.0M/s, Estimated time remaining: --:--:--) Successfully added box 'ubuntu-12.10-server-i386' with provider 'virtualbox'! punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ vagrant init ubuntu-12.10-server-i386 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. punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'ubuntu-12.10-server-i386'... [default] Matching MAC address for NAT networking... [default] Setting the name of the VM... [default] Clearing any previously set forwarded ports... [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Mounting shared folders... [default] -- /vagrant punio@PAPA ~/mybox/vagrant/ubuntu-12.10-server-i386 $ vagrant ssh Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic i686) * Documentation: https://help.ubuntu.com/ New release '13.04' available. Run 'do-release-upgrade' to upgrade to it. Last login: Sun Nov 24 02:29:48 2013 from 10.0.2.2 vagrant@ubuntu-12:~$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:be:ea:79 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:febe:ea79/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:340 errors:0 dropped:0 overruns:0 frame:0 TX packets:265 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:41389 (41.3 KB) TX bytes:30524 (30.5 KB) vagrant@ubuntu-12:~$
まとめ
ここまで、3回に渡ってVBoxManageを使用した仮想マシンの作成方法と、仮想マシンのVagrant Boxへの変換方法について解説しました。今回解説した方法では、GUIを使用しないで仮想マシンを作成し、Vagrant Boxに変換することができますので、大変便利です。なお、今回使用したVirtualBoxはWindows版ですが、コマンドは全てCygwin上で実行しています。DOSコマンドプロンプトでも実行できますが、tarなどUNIX特有のコマンドも使用していますので、Cygwin上で実行することをお勧めします。VBoxManageには、さまざまな機能がありますので、今回解説しなかった機能についても調べてみて下さい。