Packer で Vagrant 用仮想マシン (base box) を作成する
Vagrantbox.es で Vagrant 用 base box が配布されていますが、中身がよく分からないという不安があったり、業務だと大人の事情で使えなかったりといろいろあるので base box を自作することにしました。
最近は veewee ではなく、Packer なるツールを使うのが主流みたいなので、インストールメモを残しておきます。
下記エントリの方法は古いです。
Packer とは?
Amazon EC2 AMI や VirtualBox, VMware 用の OS イメージを一貫性のあるインタフェースで作成できるオープンソースツールです。
Vagrant 作者である Mitchell Hashimoto さんが作成したツールです。
Packer のインストール
公式サイトからダウンロードします。
ダウンロードした zip を展開、packer-0.5.2 という名前に変更して、適当なディレクトリへ置きます。
$ cd ~/bin $ ln -s packer-0.5.2 packer $ vi ~/.bash_profile export PATH=$HOME/bin/packer:$PATH $ exec $SHELL -l $ packer --version Packer v0.5.2
base box 設定ファイルの作成
base box をビルドするために設定ファイルを作成します。
今回は CentOS 6.5 (x86_64) の base box をビルドしました。
設定ファイルは GitHub に置いてあります。
設定ファイル構成
centos ├── centos-6.5.json ├── http │ └── ks.cfg └── script ├── install-virtualbox-guest-additions.sh └── setup-base.sh
各設定ファイルについて
ビルドの実行
$ cd %centos-6.5.json のあるディレクトリ% $ packer validate centos-6.5.json Template validated successfully. $ packer build -only=virtualbox-iso centos-6.5.json ..... ==> Builds finished. The artifacts of successful builds are: --> virtualbox-iso: 'virtualbox' provider box: ../box/virtualbox/CentOS-6.5-x86_64-VirtualBox.box
vagrant up したらエラーが出た時の対処方法
ビルドした base box で vagrant up したら、以下のようなエラーが出ました。
仮想マシンは一応起動しているのですが、vagrant ssh したら、/vagrant がマウントされていない状態でした。
The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! mkdir -p /vagrant Stdout from the command: Stderr from the command: sudo: sorry, you must have a tty to run sudo
/etc/sudoers で "Defaults requiretty" が有効になっているのが原因です。
"Defaults requiretty" は、sudo する時に TTY を要求するもので、外部プログラム等から sudo されないようにします。
ローカルで使用する OS なのでコメントアウトしました。
コメントアウトは、script/setup-base.sh で行っています。
sudo sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers