Vagrant カスタムboxの作成(CentOS6 + Virtualbox)



# 概要
 Virutalbox でカスタムBoxを作る手順。boxは、yum update しつつ運用していこうと考えている。
 ゲストOS はCentOS6を想定しているが、CentOS7やUbuntでも役に立つ。

  (後日修正の可能性がある。)

## 環境

　Boxを作成するために使ったホストOSの環境。ホストOSはOSX。一連の操作は、Linuxでもおそらく同じ。

```
$ sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.10.5
BuildVersion:	14F1021
$ uname -mrs
Darwin 14.5.0 x86_64
$ VBoxManage --version
5.0.10r104061
```


## 元になるゲストOSをインストール
　Virutalbox上でゲストOSをインストールする。新規で作成し、名前を"CentOS6"としている。
　カスタムBoxを作るのが目的なので基本的には好きにしていい。ただし、BoxはゲーストOSをアーカイブしてダウンロードすることになるため、最小パッケージがおすすめ。Hashicorpへの公開を前提とすればインターネットを介してダウンロードすることになるので、OSのサイズは小さい方がいい。
　インストールが終わったらゲストOSをshutdownするが、その前に必要なパッケージの追加や設定を行ってもいい。

## Virtualboxの設定

以下のようにした。

| 変更する項目 | 変更後の値 |
|:----------- |:------------:|
|メインメモリー | 512MB |
|フロッピー | 無効 |
|アクセラレーション | Legacy|
|オーディオ| 無効|
|USBコントローラー | 無効|

その他は初期値のまま。

### 作業中のネットワーク設定
　SSHでログインしながら以降の操作をやるために、VirutalboxでNetwowkアダプター１の設定をNATからブリッジに変更。

## ゲストOSの設定(1)

### vagrantユーザーを追加
ゲストOSにて以下を実行。

```
sed -i -e s/^Defaults\ \ \ \ requiretty/#Defaults\ \ \ \ requiretty/g /etc/sudoers
useradd vagrant
[ -f /etc/sudoers.d/vagrant ] || echo "%vagrant ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vagrant
```

```
mkdir -m 700 /home/vagrant/.ssh
mkdir -p /vagrant
chown vagrant:vagrant /home/vagrant/.ssh

echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys

chmod 600 /home/vagrant/.ssh/authorized_keys
chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys
```

ユーザーのパスワードが必要な場合はつぎのようにする。
__echo "PASSWORD" | passwd user_name --stdin__

```
echo "vagrant" |passwd vagrant --stdin
```

### Virtualbox additonal CD のインストール
 ツールをインストールしないと、"varant up"したときにホストOSとの共有ディレクトリ/vagrantをマウントできない。また、ゲストOS起動時にエラーとなってしまう。


まず、ツールのCDイメージをマウントする。
[Dvice] -> [Instert Guest Additions CD images]


 Additional toolsをインストールするためにはツールを再構築しなければいけない。
最小インストールの場合は、つぎのように追加でパッケージをインストールしておく。

```
yum -y install openssh-clients libedit kernel-devel gcc ppl libgomp cloog-ppl cpp mpfr glibc-headers glibc-devel kernel-headers perl perl-Pod-Simple perl-libs perl-version perl-Pod-Escapes perl-Module-Pluggable
```

```
mount -o loop /dev/sr0 /mnt
/mnt/VBoxLinuxAdditions.run --nox11
/etc/init.d/vboxadd setup
```

この時点で、光学ドライブは有効なままになっているが、今後使う予定がなければ無効にする。

### MACアドレスの消去
MACアドレスの情報を消去する。
OS起動時に、記録されないようにする。

```
> /etc/udev/rules.d/70-persistent-net.rules
sudo sed -i -e 's|/etc/udev/rules.d/70-persistent-net.rules|/dev/null|g' /lib/udev/write_net_rules
```

```
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
EOF
```

### カスタマイズ

パッケージの追加や必要な設定を行う。

### ログの消去

配布するBoxサイズを少しでも小さくするために、ログを消去する。
リモートからはできないので、Virtualboxのコンソールから操作。

```
init 1
find /var/log -type f -exec rm -f {} \;
rm -f /home/vagrant/.bash_history
rm -f /root/.bash_history
history -c
shutdown -h now
```

## boxアーカイブの作成

### 作成したカスタムboxのアーカイブ

ここでは、centos6.boxという名でアーカイブを作成する。

```
cd ${HOME}/VirtualBox\ VMs/
vagrant package --base CentOS6 --output centos6.box
```

### Boxの登録

```
vagrant box add test-centos6 centos6.box
```

### 作成したカスタムBoxのテスト

```
vagrant init test-centos6 
vagrant up --provider=virtualbox
vagrant ssh
```

エラーがなければ終わり

## Boxの公開&&アップロード
 パブリックなWebサーバへアップロードすれば、hashicorpで公開できる。

## Appendix

### CentOSでVirtualboxのレポジトリを登録
```
sudo wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -P /etc/yum.repos.d/
```