Vagrant のベースBOX作成手順 (Scientific Linux 6.1)

Scientific Linux 6.1 のベース BOX を自分で作成してみた。

http://docs-v1.vagrantup.com/v1/docs/base_boxes.html

まずは VirtualBox 上で VM を作成する。そして、vagrant package コマンドでパッケージ化する。


以下から、最新のインストールDVDイメージをダウンロードしてくる。
http://www.scientificlinux.org/

VirtualBox の画面から仮想マシンの新規作成

名前 vagrant-sl6
OS Linux
バージョン RedHat
メインメモリ 512 MB
チップセット PIIX3
オーディオ 無効
USB 無効
ネットワーク NAT
ストレージ(HDD) 80GB (動的拡張VMDK形式)
ストレージ(CDROM) インストールDVDイメージを割り当て(インストール時のみ)

チップセットをICH9 にすると、なぜかパッケージ化がうまくいかなかった。また、ベース BOX をコンパクトにするためHDDは VMDK 形式で作成してみた。それ以外の形式では試したことはない。

仮想マシンに Scientific Linux 6.1 インストール

仮想マシンのインストールを行う。基本的にインストーラーの流れのままでいいが、以下の点だけ注意する。

  • テキストモードでインストール(最小構成)
  • IPv6 は無効にする
  • root パスワードは "vagrant"

インストール後の作業

root でログインして、Vagrant 仕様にセットアップする。

パッケージ更新

最新のパッケージにアップデートする。カーネルなども更新されたのでついでにリブート。

 $ yum update
 $ reboot
ビルド用パッケージ

Chef や VirtualBox Guest Addition インストールのために必要なパッケージをインストール。

 $ yum install ruby ruby-devel gcc gcc-c++ automake autoconf make rubygems kernel-devel
Chef

Chef のインストール

 $ gem install chef --no-ri --no-rdoc
Guest Addition

VirtualBox の [デバイス]-[GuestAdditionインストール]を選択する。

GuestAddition のインストール

 $ mount /dev/cdrom /mnt
 $ sh /mnt/VBoxLinuxAdditions.run
パッケージ削除

VMサイズ削減のため、可能な限り不要なパッケージは削除する。

 $ yum remove ruby-devel gcc gcc-c++ automake autoconf make 
 $ yum remove kernel-devel kernel-headers
 $ yum remove xorg-x11-drv-ati-firmware yum-autoupdate
 $ yum remove kernel-古いバージョン

yum の管理情報もクリアする

 $ yum clear all
sudo

パスワードなしで sudo できるようにする。また、requiretty も無効にする。
コマンド:

 $ visudo

設定内容:

# Default requiretty
%wheel ALL=(ALL) NOPASSWD:ALL
openssh

openssh サーバの設定を変更。ログイン時間が短縮されるらしい。

 $ echo 'UseDNS no' >> /etc/ssh/sshd_config
selinux

Chef と相性が悪い SELinux を無効にする。
/etc/selinux/confg

SELINUX=disabled
vagrant ユーザ作成

vagrant ユーザを作成し、sudo 権限を付加、ssh 公開鍵認証でログインできるようにする。パスワードは vagrant。

 $ adduser vagrant
 $ passwd vagrant
 $ gpasswd -a vagrant wheel
 $ mkdir /home/vagrant/.ssh
 $ chmod 700 /home/vagrant/.ssh
 $ cd /home/vagrant/.ssh
 $ curl 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' > authorized_keys
 $ chown -R vagrant:vagrant /home/vagrant/.ssh
ネットワーク関連

dhcp リース情報を削除。

 $ rm /var/lib/dhcp3/*

udev によるMACアドレスの自動保存を無効化する。

 $ rm /etc/udev/rules.d/70-persistent-net.rules
 $ mkdir /etc/udev/rules.d/70-persistent-net.rules
VM コンパクト化

VM イメージのコンパクト化のためのおまじない

 $ dd if=/dev/zero of=/EMPTY bs=1M
 $ rm /EMPTY

Vagrant パッケージ化

ホストマシン上でベースBOXのパッケージ化する。

 vagrant package --base vagrant-sl6

package.box が生成される。このファイルを配布することになる。

ベースBOX の動作確認

試しに手元で使えるようにしてみる。

 vagrant box add sl6 package.box
 mkdir sl6test
 cd sl6test
 vagrant init sl6
 vagrant up

これで sl6 が使えるようになった。