VagrantにCentOS 6.5をインストールする

## 概要

VirtualBox (Vagrant) にCentOS 6.5をインストールする。


## 目的

* VagrantのゲストOSにCentOS 6.5を導入する (Guest Additions含む)
* サスペンド復帰時、時刻をホストに合わせる
* ゲストOSは共有ディレクトリ、固定IP (NAT) を設定
* Guest Additionsは自動更新

## インストール手順

まずはCentOSのBoxを取得する。

```
$ mkdir -p ~/Vagrant/centos
$ cd ~/Vagrant/centos
$ vagrant box add centos6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
$ vagrant init centos6.5
$ vi Vagrantfile
```

```code:Vagrantfile
# ゲストOSは固定IPとする
config.vm.network "private_network", ip: "10.0.0.1"

# 共有ディレクトリの設定
config.vm.synced_folder "/Users/naomichi/Projects", "/home/vagrant/Projects"
```

```
$ vagrant up
```

VirtualBox Guest Additionsのインストールが失敗すると次のようなエラーが発生するが、Vagrant自体は起動可能 (対策は後述)。

> Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

> mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
> mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

> The error output from the last command was:

> /sbin/mount.vboxsf: mounting failed with the error: No such device
```

```
$ vagrant ssh
$ ifconfig
```

ゲストOSのIPは10.0.0.1となっていることを確認できる。

> eth1      Link encap:Ethernet  HWaddr 08:00:27:A1:C9:56
>           **inet addr:10.0.0.1**  Bcast:10.0.0.255  Mask:255.255.255.0
>           inet6 addr: fe80::a00:27ff:fea1:c956/64 Scope:Link
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:12 errors:0 dropped:0 overruns:0 frame:0
>           TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:1000
>           RX bytes:1443 (1.4 KiB)  TX bytes:482 (482.0 b)

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

`vagrant up`でインストールエラーが起きた場合、カーネルのアップデートが必要。

```
$ sudo yum install -y kernel-devel kernel-headers dkms gcc gcc-c++

```

ホスト側で`vagrant reload`を実行後、再度ゲストOSにログイン。

```
$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox DKMS kernel modules           [  OK  ]
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-431.3.1.el6.x86_64

Building the main Guest Additions module                   [FAILED]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]
```

kernel-develが無いと怒られる。yumが見つからないためrpmからインストール。

```
$ sudo yum install -y http://bay.uchicago.edu/centos-vault/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.3.1.el6.x86_64.rpm
```

再度。

```
$ export KERN_DIR=`ls -t /usr/src/kernels/|head -1`
$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox DKMS kernel modules           [  OK  ]
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules     [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
$ service vboxadd status
The VirtualBox Additions are not currently running.
```

OK。

```
$ vagrant reload
$ vagrant ssh
```

サスペンド復帰時に時刻をホストと同期するよう設定しておく。

```
$ sudo /usr/sbin/VBoxService --timesync-set-threshold 60000
```

Vagrantを再起動した後も同期が有効になるようホスト側で設定。

```code:Vagrantfile
config.vm.provider :virtualbox do |vb|
  vb.customize ["guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 60000]
end
```

## GA自動更新プラグインのインストール (任意）
vagrant-vbguestをインストールしておくことで、GAがアップデートした際は`vagrant up`の際に自動更新を行うようになる。

```
$ vagrant plugin install vagrant-vbguest
$ vagrant vbguest
```

X-Windowを使用していなければ次のエラーは無視してOK。

> An error occurred during installation of VirtualBox Guest Additions 4.3.26. Some functionality may not work as intended.
In most cases it is OK that the "Window System drivers" installation failed.

```
$ vagrant vbguest --status
GuestAdditions 4.3.26 running --- OK.
```