tkak's tech blog

This is my technological memo.

VagrantのBase Boxを作ってみた。CentOS6.3 x86_64編

Vagrantは、Virtual BoxのVM(仮想サーバ)管理を簡単にするためのツールです。
VMを、コマンドラインから起動、停止、削除、etcできるので、テストや開発環境作成などでかなり重宝します。


今回はそのテンプレートになるBase Boxを作ってみたので、メモを残しておきます。
VagrantのBase Box作成を自動化するVeeweeというツールもありますが、
使ってみてうまくいかなかったので、今回は自分で作ります…。

今回試した環境はこんな感じ。

OS(Mac) 10.8.2
Virtual Box 4.2.6
Vagrant 1.0.5

※Virtual BoxとかVagrantのインストールなどは、今回省略します。

VMは、CentOS6.3 x86_64です。

Virtual BoxのVM作成

まず、Virtual BoxのVMを作ります。
VMは下記のような感じで作りました。

Name: vagrant-centos6.3
Type: Linux
Version: Red Hat (64bit)
Memory size: 512MB
Hard drive: 8GB (新規作成)
Hard drive file type: VDI, Dynamically allocated (動的割り当て)
Audio: Disable
USB controller: Disable
Port Forwarding: Name: ssh, Protocol: TCP, Host Port: 2222, Guest Port: 22

起動させてOSをインストールします。
メモリが512MBしかないので、テキストモードのインストーラが起動します。(1GB以上だとGUIモード)
キーボード、言語環境を選択します。
テキストモードだと、パッケージ選択やパーティション設定などが設定できないので、
そのまま進めていけばインストーラが終わります。

VMの初期設定

次にいろいろとVMに初期設定を入れていきます。

ネットワークの有効化

そのままだとネットワークが有効になっていなかったので、有効にします。

# /bin/sed -i 's/ONBOOT="no"/ONBOOT="yes"/g' /etc/sysconfig/network-scripts/ifcfg-eth0
# /etc/init.d/networking restart
vagrantユーザの作成

sshで接続するために、vagrantユーザを作成します。

# /bin/sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication no/g' /etc/ssh/sshd_config
# /etc/init.d/sshd reload
# /usr/bin/yum -y install sudo
# /usr/sbin/groupadd vagrant
# /usr/sbin/useradd vagrant -g vagrant -G wheel
# echo "vagrant"|passwd --stdin vagrant
# echo "vagrant   ALL=(ALL)   NOPASSWD: ALL" >> /etc/sudoers
ssh 接続

ポートフォワーディング機能で、ホスト側の2222ポートをゲストの22ポートに割り当ててるので、
localhostの2222にsshします。

$ ssh localhost -l vagrant -p 2222
$ su -
# id
必要なパッケージのインストール

いろいろ入れます。

# yum -y install gcc make gcc-c++ ruby kernel-devel-`uname -r` zlib-devel openssl-devel readline-devel sqlite-devel perl

epelのリポジトリ設定ファイルを作成します。

# cat > /etc/yum.repos.d/epel.repo << EOM
[epel]
name=epel
baseurl=http://download.fedoraproject.org/pub/epel/6/\$basearch
enabled=1
gpgcheck=0
EOM

ruby-develとrubygemsをインストールします。

# yum -y install ruby-devel rubygems
# yum -y clean all
# rm -f /etc/yum.repos.d/epel.repo
chefクライアントのインストール

chefをインストールします。少し時間がかかるので、待ちます。

# gem install --no-ri --no-rdoc chef
vagrantユーザの公開鍵配置

vagrantユーザ用の公開鍵を配置します。

# mkdir /home/vagrant/.ssh
# chmod 700 /home/vagrant/.ssh
# cd /home/vagrant/.ssh
# curl -L -o authorized_keys https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
# chown -R vagrant /home/vagrant/.ssh
VirtualBox Guest Additionsのインストール

VitualBoxゲストOS用ドライバVirtualBox Guest Additionsをインストールします。

# cd /tmp
# curl -L -o VBoxGuestAdditions_4.2.6.iso http://download.virtualbox.org/virtualbox/4.2.6/VBoxGuestAdditions_4.2.6.iso
# mount -o loop VBoxGuestAdditions_4.2.6.iso /mnt
# sh /mnt/VBoxLinuxAdditions.run
# umount /mnt
# rm VBoxGuestAdditions_4.2.6.iso
# sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers
# sed -i "s/^#UseDNS yes/UseDNS no/g" /etc/ssh/sshd_config
# dd if=/dev/zero of=/tmp/clean || rm /tmp/clean

Base Boxのパッケージ化

作ったVMをBase Boxにします。

$ vagrant package --base vagrant-centos6.3

カレントディレクトリにpackage.boxというファイルができます。

あとは、Base Boxをvagrantに登録して、起動させます。

$ vagrant box add my_box package.box
$ mkdir test_environment
$ cd test_environment
$ vagrant init my_box
$ vagrant up
$ vagrant ssh

以上。

…と、まぁ、ほとんどveeweeの設定ファイルをなめただけなんですが、
とりあえず、流れが把握できたのとchefだけのBase Boxができたので、めでたしめでたし。
veeweeで失敗していたのは、ネットワーク周りが原因な気がする…。
まー、あとは、chefのcookbook作っていろいろ遊んでみよう。