Vagrant のベースBOX を更新する
自分で作成した Debian 6.0 (squeeze) のベースBOX を作成したのだが、
- Debian パッケージの更新
- VirtualBox Guest Addition の更新
- Chef の更新
を度々手動で行うのが面倒くさくなった。自動実行したいので、lucid64.box 内の postinstall.sh スクリプトを参考に自分で作ってみた。それを
の流れができればしめたもの。
bin/provision.sh
#!/bin/sh #Updating the box apt-get -y update apt-get --force-yes -y upgrade apt-get -y install linux-headers-$(uname -r) build-essential apt-get clean gem update chef --no-ri --no-rdoc gem clean #Installing the virtualbox guest additions VBOX_VERSION=$1 #=4.1.8 VBOX_ISO=VBoxGuestAdditions_$VBOX_VERSION.iso cd /tmp wget http://download.virtualbox.org/virtualbox/$VBOX_VERSION/$VBOX_ISO mount -o loop $VBOX_ISO /mnt sh /mnt/VBoxLinuxAdditions.run umount /mnt rm $VBOX_ISO apt-get -y remove linux-headers-$(uname -r) build-essential apt-get -y autoremove # Zero free space to aid VM compression dd if=/dev/zero of=/EMPTY bs=1M rm -f /EMPTY # Removing leftover leases and persistent rules rm /var/lib/dhcp/*
Vagrantfile で、対象の VirtualBox のバージョンをコマンドラインオプションとして指定している。
Vagrant::Config.run do |config| config.vm.box = "squeeze" config.vm.provision :shell, :inline => 'sh /vagrant/bin/provision.sh 4.1.8' end
あとは、vagrant コマンドで
vagrant up vagrant halt vagrant package --output squeeze.box vagrant box rm squeeze vagrant box add squeeze squeeze.box
を自動実行するなどすればいいのかな。
Windows 上の場合、vagrant up を実行中、grub-pc パッケージを更新しようとしてダイアログが出た後操作できなくなった。Linux ではインストール完了しているように見えるが、ダイアログそのものが表示されず何とも頼りない。
更新スクリプト(provision.sh)の実行は、vagrant から実行するのではなくて、ssh などでログイン後に手動で実行したほうがいいかも。vagrant 0.9 系は、以下のように ssh で -c オプションを指定するとコマンドを実行できる。
vagrant ssh -c 'sudo sh /vagrant/bin/provision.sh 4.1.8'
そもそも、veewee が使えれば便利なのだが、いかんせん、サードパーティ製のツールなので、
最新の Vagrant では動作してくれないため、このような仕組みを用意しようと考えた。
逆に、veewee が使えるバージョンまで落としてしまえば、良いわけなんだけどね。