Vagrantで再現可能な仮想マシン開発環境をMacに構築する


CentOS 6.3 をVagrantで再現可能な開発環境としてMac上で構築します。

## 構築した環境
* Mac OS X 10.8
* XCode 4.4.1
  * 事前にCommand Line Toolsはインストールしておく

Vagrnat 1.0以降はパッケージで提供されています。gemからVagrantを入れる必要ありませんので、最新の場合はインストール部分を省略してください。

[Vagrantダウンロード一覧]

## RVMのインストール

```
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

source ~/.bash_profile

rvm install 1.9.3
rvm use 1.9.3
rvm --default 1.9.3
```

### .bash_profileの確認
```
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
source "$HOME/.rvm/scripts/rvm"
```

## Vagrantのインストール
```
gem install vagrant
```


## VeeWeeのインストール

VeeWeeはBoxファイルのテンプレートを生成してくれるパッケージです。

### Bundlerが入っていなければ入れる
```
gem install bundler
```

### VeeWeeの.rvmrcを書き換える
1.9.2 となっている部分を 1.9.3 に変更

### インストール

```
git clone git://github.com/jedi4ever/veewee.git
cd veewee
bundle install
```


## 仮想マシンの定義

CentOS 6.3 の環境を作成する。

このコマンドはveeweeディレクトリ内で実行する。

```
bundle exec vagrant basebox define centos_63_x86_64 CentOS-6.2-x86_64-minimal
```

そうするとdefinationsにテンプレートが作成されるので、それらを編集する。

### definition.rb

ミラーの参照先を変更

```
:iso_file => "CentOS-6.3-x86_64-minimal.iso",
:iso_src => "ftp://ftp.riken.jp/Linux/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-minimal.iso",
```

### ks.cfg

これはキックスタート用のファイル
日本語対応にする。

```
install
cdrom
lang ja_JP.UTF-8
keyboard us
network --bootproto=dhcp
rootpw --iscrypted $1$damlkd,f$UC/u5pUts5QiU3ow.CSso/
firewall --enabled --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Tokyo
bootloader --location=mbr
```

## 仮想マシンのビルド

```
vagrant basebox build centos_63_x86_64

[centos_63_x86_64] Downloading vbox guest additions iso v 4.1.6 - http://download.virtualbox.org/virtualbox/4.1.6/VBoxGuestAdditions_4.1.6.iso
[centos_63_x86_64] Creating an iso directory
[centos_63_x86_64] Checking if isofile VBoxGuestAdditions_4.1.6.iso already exists.
[centos_63_x86_64] Full path: /Users/hoge/git/veewee/iso/VBoxGuestAdditions_4.1.6.iso
Fetching file:  62% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                                                                      |  26.5MB 351.8KB/s ETA:   0:00:47
```

しばらく待つ。途中でisoをダウンロードするか聞いてくるのでyesとする。

自動的に仮想マシンが起動するので、またしばらく放置。

プロンプトに

```
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 7222 -l veewee 127.0.0.1
```
と表示されていれば、このコマンドでveeweeというパスワードでsshログインが可能。

この状態になったら一度落とします。

## boxファイルへエクスポート

構築した仮想環境をboxファイルにエクスポートします。

```
vagrant basebox export centos_63_x86_64
```


## 仮想環境の登録と初期化

エクスポートしたboxを登録します。

```
vagrant box add 'centos_63_x86_64' 'centos_63_x86_64.box'
```

veeweeディレクトリから抜けて、仮想マシン用のディレクトリを作成します。

```
unalias vagrant

mkdir ~/box/centos_63_x86_64
```

さて、いよいよ。登録して起動です。

```
vagrant box add centos_63_x86_64 ~/git/veewee/centos_63_x86_64.box

vagrant init centos_63_x86_64

# カレントディレクトリにVagrantfileが作成される

vagrant up

[default] Importing base box 'centos_63_x86_64'...
[default] Matching MAC address for NAT networking...
[default] Clearing any previously set forwarded ports...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Mounting shared folders...
[default] -- v-root: /vagrant
```

起動が完了しました！

## ログインしてみる

```
vagrant ssh

[vagrant@localhost ~]$
```

プロンプトがでましたね。
仮想マシンを起動したカレントディレクトリが、/vagrant として仮想マシン内から参照可能です。

## 仮想マシンの停止

### 作業情報を保持したまま停止

```
vagrant halt
```

### 作業情報をすべて破棄

この方法は仮想マシンのファイルはすべて破棄されます。

```
vagrant destroy
```

一度boxファイルができてしまえば vagrant コマンドだけで、すぐに構築した仮想マシンをすぐに各環境で立ち上げることができます。

複数の環境を自動的にテストする目的には特に有用かと思います。

## Appendix

公開されている box 一覧
http://www.vagrantbox.es/


今回作ったboxは欲しい人がいたらあげます。

[Vagrantダウンロード一覧]:http://downloads.vagrantup.com/