Vagrant初期設定


## Vagrant
仮想マシン (バーチャルマシン) をプログラマブルに作成/破棄できるツールです。

### インストール
homebrew-caskを使用しました。

```
brew cask install vagrant
```

インストーラは[Vagrant公式サイト]からダウンロードできます。
[Vagrant公式サイト]: http://www.vagrantup.com/

## 仮想化ソフトウェア
仮想化ソフトウェアはVirtualBoxを使用しました。

### インストール
こちらもhomebrew-caskを使用しました。
インストーラは[VirtualBox公式サイト]からダウンロードできます。
[VirtualBox公式サイト]: https://www.virtualbox.org/

```
brew cask install virtualbox
```

## Chef
物理、仮想、クラウドといったさまざまな大きさのインフラに対して、サーバやアプリケーションの展開を容易にするための自動化フレームワークです。

### インストール

```
curl -L https://www.opscode.com/chef/install.sh | sudo bash
```

### chef-solo
chefに同梱されている、単体でサーバー構築・管理を自動化するツールです。
サーバー構築・管理を自動化するツールをプロビジョニングツールと呼びます。

## knife
Chefレポジトリを操作するためのツールです。

## knife solo
ローカルで作ったレシピをリモートにsyncしてリモート側でchef-soloを実行するknifeのプラグインです。

###インストール
```
/opt/chef/embedded/bin/gem install knife-solo --no-ri --no-rdoc
```

## Vagrant plugin

### vagrant-omnibus
仮想マシンのChefのインストール状況を確認して、自動的にインストールするプラグインです。

#### インストール
```
vagrant plugin install vagrant-omnibus
```

### vagrant-vbguest
仮想マシンがVirtualboxの場合、仮想マシンのVirtualbox-guest-addtionのインストール状況を確認して、自動的にインストールするプラグインです。

#### インストール
```
vagrant plugin install vagrant-vbguest
```

### vagrant-vbox-snapshot
仮想マシンのスナップショットを管理するプラグインです。

#### インストール
```
vagrant plugin install vagrant-vbox-snapshot
```

#### 使い方

##### スナップショットの取得
```
vagrant shnapshot take [vm-name] <SNAPSHOT_NAME>
```

##### スナップショットの一覧表示
```
vagrant snapshot list
```

##### 直前のスナップショットの復元
```
vagrant snapshot back
```

##### 任意のスナップショットの復元
```
vagrant snapshot go [vm-name] <SNAPSHOT_NAME>
```

##### 任意のスナップショットの削除
```
vagrant snapshot delete [vm-name] <SNAPSHOT_NAME>
```

## Berkshelf
Cookbookとその依存関係の管理を行うツールです。

### インストール
```
/opt/chef/embedded/bin/gem i berkshelf --no-ri --no-rdoc
```

# Vagrant起動

## box
Bentoプロジェクトから選択します。
https://github.com/opscode/bento

## repository作成
opscode-centos-6.5を使用します。

```
mkdir project-name
cd project-name

vagrant init opscode_centos-6.5_chef-provisionerless http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box

/opt/chef/bin/knife solo init .
```

## cookbook
gitのサードパーティcookbookを指定します。

### Berkshelf

```Berksfile
source "https://api.berkshelf.com"

cookbook 'git'
```

### cookbookダウンロード
cookbooksディレクトリが存在するとダウンロード出来ないので、削除してダウンロードします。

```
rm -fr cookbooks
/opt/chef/embedded/bin/berks vendor cookbooks
```

## Vagrantfile

### vagrant-omnibus
vagrant-omnibusでインストールするchefのバージョンを指定します。
ここでは最新バージョンを指定します。

```Vagrantfile
config.omnibus.chef_version = :latest
```

### recipe追加
gitをインストールするようVagrantfileに追記します。

```Vagrantfile
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
    chef.add_recipe "git"
  end
```

### 仮想マシンの設定
memoryの設定を行います。

```Vagrantfile
  config.vm.provider :virtualbox do |vb|
    vb.gui = false
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
```

## 起動
vagrantを起動します。

```
vagrant up
```

仮想マシンに接続

```
vagrant ssh
```
もしくは

```
ssh vagrant@127.0.0.1 -p 2222
password: vagrant
```

## リンク
[Vagrant初期設定](http://qiita.com/moscowmule2240/items/c5b9d8e261af5737ef5a)
[自分で作成したcookbookをVagrantで適用する](http://qiita.com/moscowmule2240/items/897189a0df144925442c)
[VagrantでCentOS外部レポジトリの追加](http://qiita.com/moscowmule2240/items/bf9bb3e0828e2986ce75)
[Vagrant仮想マシン上にMySQL5.5インストール](http://qiita.com/moscowmule2240/items/5d1efc2deb89c6219fd5)
[Vagrant仮想マシン上のMySQLに接続](http://qiita.com/moscowmule2240/items/88889195dc51948279fd)
[Vagrant仮想マシン上にredis2.8.12インストール](http://qiita.com/moscowmule2240/items/82cdf61a4168462f6644)