Mac OS XでVagrantとChefを使った環境構築のまとめ

**※ここで説明している方法でのChefのインストールはお勧めしません。**

**こちらを参考に入れてください。**
http://qiita.com/hamichamp/items/d3ca7c365353285a564b

# Vagrantで仮想環境を作る準備をしよう

## VirtualBoxをインストールしよう
https://www.virtualbox.org/wiki/Downloads
今回はMacOSXで環境を作るので、Mac版をダウンロードします。

## Vagrantをイントールしよう
http://downloads.vagrantup.com/
ここから最新のものをダウンロードしましょう。
この記事を書いている段階では、v1.2.7でした。
今回はMacOSXで環境を作るので、Mac版をダウンロードします。

# Vagrantで仮想環境を作ってみよう

## 仮想環境を登録しよう
今回はCentOSをダウンロードします。

```
$ vagrant box add centos http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
```

centosという名前でvagrantにboxが追加されたか確認しましょう。

```
$ vagrant box list
```

## 仮想環境を初期化しよう
初期化するとVagrantfileというファイルが作成されます。
適当なフォルダを生成し、そのフォルダで作業をしましょう

```
$ mkdir ~/vagrant
$ cd ~/vagrant
$ vagrant init centos
```

これで、~/vagrant フォルダにVagrantfileというファイルが作成されます。
次にこれを編集しましょう。
どんなエディタでも良いです。

ホストのMacから接続できるIPアドレスを設定します。
次がコメントアウトされているので、コメントを外します。

<pre>
   config.vm.network :private_network, ip: "192.168.33.10"
</pre>


## 仮想環境を起動しよう

```
$ vagrant up
```

しばらくすると仮想環境でCentOSが起動します。

## 仮想環境にアクセスしよう

```
$ vagrant ssh
```

無事にアクセスできたでしょうか？
これでベースとなる仮想環境ができました。
仮想環境での作業は後で行いますので、再びMaxOSXでの作業を続けましょう。

# Chefをインストールしよう
**こちらを参考に入れてください。**
http://qiita.com/hamichamp/items/d3ca7c365353285a564b

**※以下は、元々書いていた方法ですが、この方法でのChefのインストールはお勧めしません。**


> # MacOSXのRuby環境を整備しよう
> MaxOSXには最初からRubyが入っているんですが、少し古いです。
> いろいろと面倒な事が起きるので、最新版をインストールしましょう。
> 
> ## Xcodeのインストール
> App Storeからインストールしておきましょう。
> 
> ## Xcode Command Line Toolsのインストール
> Xcodeを起動し、Preferencesを開き、Downloadsタブ「Components」から『Xommand Line Tools』をインストールしましょう。
> 
> ## Homebrewのインストール
> コマンドプロンプトから、以下のコマンドを入力します。
> 
> ```
> ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
> ```
> 
> 次に一応、以下のコマンドも入力してみます。
> 
> ```
> brew doctor
> brew update
> brew -v
> ```
> 
> 私のバージョンは今のところこんな感じでした。
> 
> <pre>
> Homebrew 0.9.4
> </pre>
> 
> ## Ruby2.0をインストールするための準備
> Homebrewを使って、Ruby2.0をインストールしますが、その前に必要なものをインストールしましょう。
> 説明は省きます。
> 
> ### readline、openssl、rbenv、ruby-build をインストール
> 
> ```
> $ brew install readline openssl rbenv ruby-build
> $ brew link readline openssl --force
> $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
> $ . ~/.bash_profile
> ```
> 
> ### curl-ca-bundle をインストール
> ```
> $ brew install curl-ca-bundle
> $ brew list curl-ca-bundle
/usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt
> $ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
> ```
> 
> ## Ruby2.0をインストールしよう
> さて、いよいよRuby2.0をインストールしましょう。
> 
> ```
> $ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p247
> $ rbenv rehash
> $ rbenv global 2.0.0-p247
> ```
> 
> バージョンを確認しておきます。
> 
> ```
> $ rbenv version
> $ ruby -v
> ```
> 
> 2.0.0-p247が使えるようになったでしょうか？
> 
> ### rbenv rehash を自動化
> この後、gemでいろんなものをインストールするんですが、きちんと使えるようにするために、おまじないを唱えておきましょう。
> 
> ```
> $ gem i rbenv-rehash
> ```
> 
> これで、ひとまずMacOSXのRuby環境がずいぶんと改善されたと思います。
> 
> 
> # Chefをインストールしよう
> 
> これからの作業がMaxOSXのRuby環境を整えた理由です。
> まずは、gemでChefをインストールします。
> 
> ```
> $ gem i chef --no-ri --no-rdoc
> ```
> 
> Chefをインストールすると、knifeというChefの便利コマンドもインストールされます。
> knifeの設定もしておきましょう。
> 
> ```
> $ knife configure
> ```
> 
> 実行すると、~/.chef/knife.rbにknifeの設定ファイルが保存されます。
> 質問事項は全てデフォルトでOKです。
> 
> ## knife-soloをインストールしよう
> knife-soloはknifeのプラグインです。
> ここでは0.3.0を入れるようにしておきましょう。
> 
> ```
> $ gem i knife-solo --no-ri --no-rdoc --pre
> ```
> 
> --preをつけないと0.2.0がインストールされたのですが、以下のような問題に苦しみました。
> http://tk0miya.hatenablog.com/entry/2013/04/18/011339

## knife-soloでリポジトリを作ってみよう。

現在のフォルダの中にリポジトリを作成してみましょう。

```
$ knife solo init chef-repo
```

chef-repoというフォルダが作成されましたか？
中にはいろんなものがありますね。

## サードパーティのレシピを使ってみよう。
レシピの作り方なんてとりあえずわからないので、用意されているレシピをダウンロードしてつかってみましょう。

**※BerkshelfはChef Developer Kitをインストールすることで既にインストールされています。**

**以下は元々の記事ですが、この方法でのインストールは不要です。**

> まずは、Berkshelfというツールをインストールします。
> 
> ```
> $ gem i berkshelf --no-ri --no-rdoc
> ```

先ほど作ったchef-repoフォルダの中にBerksfileを作成します。

```
$ cd chef-repo
$ vim Berksfile
```

ダウンロードしてくるレシピを指定します。
どんなレシピがあるかは下記サイトをのぞいてみてください。
https://github.com/opscode-cookbooks

```
site :opscode
cookbook 'yum'
cookbook 'nginx'
```

Berksfileを保存したら、レシピをダウンロードしてきましょう。

```
$ berks install --path cookbooks
```

berkshelf3になってから、コマンドが変わったようです。

```
$ berks vendor cookbooks
```

chef-repoフォルダ内のcookbooksフォルダにレシピがダウンロードされたはずです。

## 仮想環境へ設定をする前に
久しぶりに仮想環境が登場です。
仮想環境は立ち上がっていますか？

立ち上げ方を忘れちゃった人は、~/vagrantフォルダから下記のコマンドで立ち上がりますよ。

```
$ vagrant up
```

前回は下記コマンドで仮想環境にアクセスしたと思います。

```
$ vagrant ssh
```

便利になるように設定をしておきましょう。

```
$ vagrant ssh-config --host centos >> ~/.ssh/config
```

これで、どのフォルダからでも以下のコマンドで仮想環境にアクセス可能になります。

```
$ ssh centos
```

アクセスできることを確認したら、またMaxOSXから設定を行いましょう。

## 仮想環境へ設定する準備

### 仮想環境にchefをインストールします

さっき作ったchef-repoフォルダに戻って、下記コマンドを実行しましょう。

```
$ knife solo prepare centos
```

これで、仮想環境にchefがインストールされます。
最初に1回だけ実行すればOKです。

成功するとnodesフォルダの中にcentos.jsonというファイルが生成されるはずです。

作成されたcentos.jsonを編集しましょう。

```
 {
    "run_list":[
      "yum::epel", 
      "nginx"
    ]
  }
```

## 仮想環境へ設定を反映させる

下記コマンドで、仮想環境に設定が反映されます。

```
$ knife solo cook centos
```

## Mac OS X側から仮想環境にアクセスしてみよう
192.168.33.10というIPアドレスで仮想環境にアクセスできるんですが、
このままでは、仮想環境がすべてのアクセスを拒否しています。
アクセスを受け付けるように仮想環境の設定を変更します。

```
#Macのコンソール
$ ssh centos

#以下は仮想環境のコンソール
$ sudo /sbin/iptables -F
$ sudo /etc/init.d/iptables save
```

この状態でMac OS Xのブラウザからアクセスをしてみましょう。


続く・・・。
と思ったけど、やっぱり続きません！