VBoxManageを使ってVagrant Boxを作成する方法(第2回)~仮想マシンをVagrant化する

VBoxManageを使ってVagrant Boxを作成する方法(第2回)~仮想マシンをVagrant化する

はじめに

第1回の記事では、VBoxManageを使用した仮想マシンの作成方法について解説しました。第2回は、作成した仮想マシンにVagrant用設定を追加するVagrant化の方法について解説します。

仮想マシンのVagrant化

OSをインストールした後に、Vagrant Boxとして利用できるように仮想マシンを構成する必要があります。
以下の手順で、仮想マシンをVagrant化します。
設定作業は、全てVirtualBoxコンソール上で行います。

  1. ネットワーク設定

    DHCPを有効にし、ホスト名を設定します。ホスト名には、centos64-x86_64を設定しています。
    設定したら、ifconfigコマンドを使用してIPアドレスが取得できたかを確認します。

    1015-01
  2. Firewallおよび、SELinix Policyの無効化

    Firewallおよび、SELinix Policyを無効にします。

    # service iptables stop
    # chkconfig iptables off
    # setenforce 0
    

    /etc/sysconfig/selinuxを編集して、SELINUXTYPE=disabledに設定します。
    /etc/grub.confを編集して、enforcing=0をkernelパラメータに追加します。
    パラメータの追加を行わないまま、仮想マシンを再起動すると仮想マシンが再起動できなくなりますので、注意して下さい。

    1015-02 1015-03
  3. MACアドレスの自動保存無効化

    Debian系Linixでは、MACアドレスを記録しており、MACアドレスが変更されると異なるNICデバイス名を割り当てる事になります。このため、MACアドレス自動保存機能を無効化することで、見つかったNICに対して適正なNICデバイス名を割り当てることができます。

    # cd /etc/udev/rules.d/
    # sudo mv 70-persistent-net.rules .70-persistent-net.rules
    # sudo ln -s /dev/null 70-persistent-net.rules
    
    1015-04
  4. vagrantユーザーの作成

    vagrantコマンドによるBoxの接続に使用されるアカウントを作成します。
    パスワードは、通常vagrantを指定していますが、任意のパスワードを設定することができます。

    # groupadd vagrant
    # useradd -g vagrant vagrant
    # passwd vagrant
    
    1015-05
  5. sudo設定

    vagrantユーザーに、パスワード無しでroot権限を与えられるように、sudoを設定します。

    # echo 'vagrant ALL=NOPASSWD:ALL' > /etc/sudoers.d/vagrant
    # chmod 0440 /etc/sudoers.d/vagrant
    

    設定したら、visudoコマンドを実行して、Defaults requirettyの設定をコメントアウトします。
    VagrantではBoxとSSH接続を行いますが、ttyを経由しないSSH接続を行うため、sudo時にtty無しでコマンドを実行できるように設定します。

    1015-06
    # su - vagrant
    $ sudo visudo
    
  6. vagrant公開鍵の設定

    vagrantコマンドでは、vagrantユーザーで、BoxとSSHで接続します。このため、仮想マシン上にvagrantユーザーのSSH公開鍵をインストールする必要があります。

    $ mkdir ~/.ssh
    $ chmod 0700 ~ ~/.ssh
    $ curl -Lo ~/.ssh/authorized_keys https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pu
    $ chmod 0600 ~/.ssh/authorized_keys
    
    1015-07
  7. VirtualBox Guest Addinのインストールに必要なパッケージのインストール

    VirtualBox Guest Addinをインストールすると、共有フォルダや、シームレスなマウスの移動などの機能を利用できるため、Addinのビルドに必要なパッケージをインストールします。

    インストールが終了したら、Addinのイメージの割り当てのために仮想マシンをシャットダウンします。

    $ sudo yum -y install gcc kernel-devel kernel-headers dkms make bzip2 perl
    $ sudo yum -y update kernel*
    $ sudo yum -y update
    $ sudo shutdown -h now
    
    1015-08 1015-10
  8. VirtualBox Guest AddinのISOイメージの割り当て

    VirtualBox Guest AddinのISOイメージをDVDドライブに割り当てた後、仮想マシンを起動します。

    $ VBoxManage storageattach CentOS-6.4-x86_64-minimal --storagectl SATA --port 2 --type dvddrive --medium I:/ISO/VirtualBox/VBoxGuestAdditions_4.2.18.iso
    $ VBoxManage startvm CentOS-6.4-x86_64-minimal
    
    1015-14 1015-15
  9. VirtualBox Guest Addinのインストール

    仮想マシンが起動したら、vagrantでログインして、Addinをインストールします。
    インストールしたminimal構成では、X Window Systemはインストールされませんので、一部のモジュールがインストールされませんが、問題はありません。

    $ sudo mount -r /dev/cdrom /mnt
    $ sudo sh /mnt/VBoxLinuxAdditions.run
    $ sudo umount /mnt
    
    1015-16
  10. 未使用領域のゼロフィル

    仮想ハードディスクの未使用領域をゼロフィルします。実行することで、VM→Box変換時のBoxサイズを小さくすることができます。
    ゼロフィルが終了したら、仮想マシンをシャットダウンします。

    $ sudo dd if=/dev/zero of=/EMPTY bs=1M
    $ sudo rm -f /EMPTY
    $ sudo shutdown -h now
    
  11. VirtualBox Guest AddinのISOイメージの取り出し

    AddinのISOイメージをDVDドライブから取り出します。

    $ VBoxManage storageattach CentOS-6.4-x86_64-minimal --storagectl SATA --port 2 --medium emptydrive
    
    1015-17

以上で、Vagrant Box用の設定が終了します。

VeeweeによるVagrant化

Veeweeは、手動で行った上記の処理をソフトウエアで行っていますので、以下のコマンドを実行して、Vagrant化した仮想マシンを作成することができます。
ここでは、ubuntu-12.10-server-i386テンプレートを使用して、仮想マシンを作成しています。
ただし、veeweeでは、MACアドレスの自動保存無効化処理を行わないため、veeeweeで作成したBoxに手動で設定を行うか、Veeweeのシェルスクリプトを修正して実行する必要があります。

$ mkdir -p ~/mybox/veewee && cd ~/mybox/veewee
$ veewee vbox define 'ubuntu-12.10-server-i386' 'ubuntu-12.10-server-i386'
$ veewee vbox build 'ubuntu-12.10-server-i386'
punio@PAPA ~/mybox/veewee
$ veewee vbox build 'ubuntu-12.10-server-i386'
Downloading vbox guest additions iso v 4.2.18 - http://download.virtualbox.org/virtualbox/4.2.18/VBoxGuestAdditions_4.2.18.iso
Checking if isofile VBoxGuestAdditions_4.2.18.iso already exists.
Full path: /home/punio/mybox/veewee/iso/VBoxGuestAdditions_4.2.18.iso

The isofile VBoxGuestAdditions_4.2.18.iso already exists.
Building Box ubuntu-12.10-server-i386 with Definition ubuntu-12.10-server-i386:
- debug : false
- cwd : /home/punio/mybox/veewee
- force : false
- nogui : false
- auto : false
- checksum : false
- redirectconsole : false
- postinstall_include : []
- postinstall_exclude : []

The isofile ubuntu-12.10-server-i386.iso already exists.
Creating vm ubuntu-12.10-server-i386 : 512M - 1 CPU - Ubuntu
Creating new harddrive of size 8192, format VDI, variant Standard
Attaching disk: F:\VirtualBox/ubuntu-12.10-server-i386/ubuntu-12.10-server-i3861.vdi
Mounting cdrom: /home/punio/mybox/veewee/iso/ubuntu-12.10-server-i386.iso
Mounting guest additions: /home/punio/mybox/veewee/iso/VBoxGuestAdditions_4.2.18.iso
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222

まとめ

ここまで、仮想マシンにVagrant Box用の設定を追加する方法を解説しました。veeeweeでは、今回行った作業を自動化していますが、既存の仮想マシンをVagrant化するためには、今回解説した設定作業が必要になります。第3回は、Vagrant化した仮想マシンをVagrant Boxに変換して起動する方法を解説します。

Comments are closed.