VagrantでオリジナルBoxを作成する

結構いろいろな所でBoxの配布をしてますが、 稼働中のサーバのイメージをBox化したり自分で自作してみたりと 知識として知っておいたほうがいいかなと思い自作してみました。

今回はCentOS6.6を使って進めていきます。

# 1\. OSイメージのダウンロード

### 公式サイトからiso形式のデータをダウンロード

[CentOSダウンロードページ][1]

# 2\. 仮想マシンの新規作成

VirtualBox上で仮想マシンを作成する。

下記の構成で作成する  
仮想マシン名: centos66  
Type: Linux  
バージョン: Red Hat (64bit)  
メモリ: 512MB  
ファイルタイプ: VDIで可変サイズを選択し、容量は8GB  
ネットワークアダプタ: アダプター1のみ。NATが割り当てられていること

## OSインストール

仮想マシンの設定が済んだら、ストレージのCD/DVDの項目にダウンロードしたISOを指定し、仮想マシンを起動してOSをインストール

インストール時にいろいろ聞かれますが、自分の環境に合わせて設定してください。 恐らくハードディスクでWarningが表示されるので、ここではRe-initializeを選択 rootのパスワードは「vagrant」にします。 Partitioning TypeでUse entire driveを選択してパーティションを作成してください。 インストール完了後、再起動を促されるので再起動すると完了します。

# 3\. OS設定

## eth0の有効化

OS起動時にネットワークカードが認識されるように設定を変更する。

<pre>vi /etc/sysconfig/network-scripts/ifcfg-eth0

ONBOOT=no
↓
ONBOOT=yes
</pre>

### OS再起動

一度OSを再起動して認識されるか確認

<pre>shutdown -r now
</pre>

### 以下のコマンドを実行して確認

<pre>ifconfig
</pre>

eth0の項目があればおｋ

## ホスト側(Mac)からsshでログインする

Macのターミナルからsshでログインできるようにする。

### VirtualBoxの仮想マシンの設定変更

1.  仮想マシンの設定を開く 
2.  ネットワークのアダプター１(NAT)を選択し、「高度」の内容を展開 
3.  「ポートフォワーディング」を押してメニューを表示 
4.  新規追加でホストポートに2222、ゲストポートに22を入力 
5.  設定画面のOKボタンを押す

### Macのターミナルを開いてsshでログインする。

<pre>ssh localhost -p 2222 -l root
</pre>

## yumリポジトリの登録

### Repoforgeを登録

<pre>curl -L -O http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
yum install rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
</pre>

### EPELを登録

<pre>yum install epel-release
</pre>

### Remiを登録

<pre>rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
</pre>

## Vagrantユーザの作成と設定

### ユーザ作成

<pre>useradd -m vagrant
passwd vagrant
</pre>

パスワードは「vagrant」とする

## sshの設定

vagrant sshで必要な公開鍵を登録する。

<pre>mkdir /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
cd /home/vagrant/.ssh 
curl -k -L -o authorized_keys 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant.vagrant /home/vagrant/.ssh
</pre>

## sudoの設定

vagrant upコマンド内でsudoコマンドを使用するので、 TTYなしでsudoコマンドを実行できるようにして、vagrantユーザがsudoコマンドをパスワードなしで使用できるようにする。

<pre>visudo

Defaults    requiretty
↓
#Defaults    requiretty

#新規追加
vagrant ALL=(ALL)       NOPASSWD: ALL
</pre>

### vagrantユーザになって確認

<pre>su - vagrant
sudo ls -l /root
</pre>

## インストール済パッケージを更新

<pre>yum update
</pre>

## VirtualBox Guest Additionsに必要なパッケージをインストール

<pre>yum install kernel kernel-devel perl gcc
</pre>

## selinuxの無効化

<pre>vi /etc/sysconfig/selinux

SELINUX=enforcing
↓
SELINUX=disabled
</pre>

## iptablesの無効化

<pre>service iptables stop
service ip6tables stop
</pre>

さらにOS起動時に自動起動しないようにする

<pre>chkconfig iptables off
chkconfig ip6tables off
</pre>

## VirtualBox Guest Additionsのインストール

まず、仮想マシン(VirtualBox VM)のメニューのデバイスからInsert Guest Additions CD imageを選択 それをマウントしてCD内のコマンドを実行する。

<pre>mkdir /media/cdrom
mount -r /dev/cdrom /media/cdrom
sh /media/cdrom/VBoxLinuxAdditions.run
umount /media/cdrom
</pre>

## udevのルールの削除

OS起動時にネットワークデバイスのエラーが起きるのを回避するため、udevのルールを削除する。

<pre>rm -f /etc/udev/rules.d/70-persistent-net.rules
rm -rf /dev/.udev/
rm -f /lib/udev/rules.d/75-persistent-net-generator.rules
</pre>

## Box作成のための最適化

最終的なBoxのサイズをできる限り小さくするため最適化を行う。

<pre>yum clean all
</pre>

### フラグメンテーションの解消

Box作成時の圧縮効率を上げるため、ゼロ埋めしたファイルを作成して削除する。

<pre>dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY
</pre>

## OSシャットダウン

<pre>shutdown -h now
</pre>

## NATのポートフォワーディング設定の削除

作業をしやすくするために行ったポートフォワーディングの設定を削除する。

### VirtualBoxの仮想マシンの設定変更

1.  仮想マシンの設定を開く 
2.  ネットワークのアダプター１(NAT)を選択し、「高度」の内容を展開 
3.  「ポートフォワーディング」を押してメニューを表示 
4.  先ほど作成した項目を選択して削除 
5.  設定画面のOKボタンを押す

# 4\. Boxの作成

MacのターミナルからVagrantコマンドを使用してBoxを作成する。

<pre>vagrant package --base centos66
</pre>

baseオプションは仮想マシン名を指定する。

### 作成したBoxをVagrantに登録する。

<pre>vagrant box add --name CentOS-6.6-x86_64-minimal-ja-20150510 package.box
vagrant box list
</pre>

### Vagrantfileを作成して起動

<pre>vagrant init CentOS66
vagrant up
vagrant ssh
</pre>

 [1]: https://www.centos.org/download/