Vagrant+VirtualBoxによる仮想環境の構築

# 1.初めに
最近、Chefによる開発環境の構築を行なう機会がありましたので
自分自身の備忘録も兼ねて記事を投稿させていただきます。

+ 対象読者：Chefに興味のある初心者
+ 動作検証端末：OS X Marverics

複数稿に分けて書いていきますが最終的には、Vagrant+VirtualBoxで
構築した仮想環境上にChef-Soloを使用してnginx+PHPの環境を構築する、
という所まで書き上げる予定です。

まずは「Vagrant+VirtualBoxによる仮想環境の構築と簡単な動作確認」まで。
(本稿ではchefは出てきません。）

# 2.VirtualBoxのインストール
まず、以下のURLからインストーラをダウンロードします。
　https://www.virtualbox.org

左メニューの「Download」より、自身の環境にあったものをダウンロードして
インストールします。

# 3.Vagrantのインストール
次に、以下のURLからインストーラをダウンロードします。
　http://www.vagrantup.com

上部メニューの「Download」より、自身の環境にあったものをダウンロードして
インストールします。

ターミナルから`vagrant --version`と入力してバージョン情報が出力されれば成功です。
私が検証したときには以下のようになりました。

```
$ vagrant --version
Vagrant 1.6.2
```

# 4.ゲストマシンの構築から破棄まで
Vagrantで使用したいOSのイメージを取得します。
このOSのイメージをVagrantでは「box」といいます。
boxは、自分で作ることも可能ですがインターネットに公開されているものがありますので、
これを使わせていただきます。

　http://www.vagrantbox.es

## 4.1.boxの追加
`vagrant box add {title} {url}`でboxを追加します。
以下のように入力し、CentOS6.5のOSイメージをaddします。

```
$ vagrant box add github-centos-6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
==> box: Adding box 'github-centos-6.5' (v0) for provider: 
    box: Downloading: https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
==> box: Successfully added box 'github-centos-6.5' (v0) for 'virtualbox'!
```

成功しました。

`vagrant box list`でboxが追加されていることを確認します。

```
$ vagrant box list
github-centos-6.5 (virtualbox, 0)
```
追加したboxが現れました。

## 4.2.初期化
追加したboxを使用して`vagrant init {title}`で初期化します。

```
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init github-centos-6.5
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
```

成功していれば`Vagrantfile`という設定ファイルが作られますが、今は放置します。

## 4.3.起動
そして、`vagrant up`で、起動します。

```
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'github-centos-6.5'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_getting_started_default_1401622241313_3001
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/nakagawadaisuke/vagrant_getting_started
```

`vagrant status`で状態を確認します。

```
$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

```

無事に起動したようです。

## 4.4.SSHアクセス
`vagrant ssh`でゲストマシンへSSHアクセスしてみましょう。

```
$ vagrant ssh
[vagrant@vagrant-centos65 ~]$ cat /etc/redhat-release 
CentOS release 6.5 (Final)
```

構築した仮想環境へログインできました。
ちなみにWindowsの場合はPuTTY等でログインする必要があります。

## 4.5.サスペンド、レジューム
`vagrant suspend`と入力することでサスペンド状態にできます。

```
$ vagrant suspend
==> default: Saving VM state and suspending execution...

$ vagrant status
Current machine states:

default                   saved (virtualbox)

To resume this VM, simply run `vagrant up`.
```

サスペンド状態にすると、その時点での状況を保存して停止します。
`vagrant resume`と入力するサスペンドした時点の状況で再び起動します。

```
$ vagrant resume
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!

$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
```

runningの状態に戻りました。
`vagrant up`でも、同様に起動できます。

## 4.6.停止
停止は、`vagrant halt`です。

```
$ vagrant halt
==> default: Attempting graceful shutdown of VM...

$ vagrant status
Current machine states:

default                   poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`
```
停止してpoweroff状態になりました。
また、ゲストマシンを起動する際には、`vagrant up`で起動できます。

## 4.7.破棄
`vagrant destroy`でゲストマシンを破棄します。
このとき本当に削除するかの確認が入りますが、`vagrant destroy --force`とすることで確認を省けます。
ゲストマシンを破棄すると仮想ハードディスクは削除されます。

```
$ vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...

$ vagrant status
Current machine states:

default                   not created (virtualbox)

The environment has not yet been created. Run `vagrant up` to
create the environment. If a machine is not created, only the
default provider will be shown. So if a provider is not listed,
then the machine is not created for that environment.
```

not created状態に遷移しました。
こちらも`vagrant up`で再びゲストマシンの構築を行なえます。

# 5.コマンドのまとめ
本稿で使用したコマンドについて、以下にまとめます。

|コマンド|説明|
|:---|:---|
|vagrant box add {title} {url} |boxの追加|
|vagrant box list |addしたboxの一覧|
|vagrant init {title}|初期化、Vagrantfile作成|
|vagrant up |ゲストマシンの起動|
|vagrant status |ゲストマシンの状態表示|
|vagrant ssh |ゲストマシンへのSSH接続|
|vagrant suspend |ゲストマシンのサスペンド|
|vagrant resume |ゲストマシンのサスペンドからの復帰|
|vagrant halt |ゲストマシンの停止|
|vagrant destroy |ゲストマシンの破棄|

# 6. 次回予告
とりあえず簡単ではありますがVagrant+VirtualBoxによる仮想環境の構築まではできました。
chefに興味のある方を対象に書いた記事でしたがchefには触れず終いなのが引掛かりますが。。。
次回は、chefを使用したプロビジョニングとしてApacheの導入自動化をやりたいと思います。（予定）