knife-soloを導入


# 目的：開発用の環境構築
前回、vagrantで作成した仮想マシンの環境整備
http://qiita.com/astrsk_hori/items/9cc090acf4bbacea5977

### インストール

```bash
gem install knife-solo
```

### knifeの初期設定

```bash
knife configure
```

全てenterでOK

### サードパーティのクックブックを使えるようにユーザ登録
http://community.opscode.com/

登録すると秘密keyが表示されて`~/.chef/xxx.pem`に保存するようなことが書いてあるのでそのまま従う

#### 秘密keyを設定する

```bash
vim ~/.chef/knife.rb
```

```~/.chef/knife.rb
client_key 'Users/hoge/.chef/xxx.pem'
```
上記に先ほどユーザ登録して作ったファイルを指定する

### cookbooks用のリポジトリを作成
```bash
cd work-dir
knife solo init chef-repo
```

###  git管理しておく

```bash
cd chef-repo
git init
git add -A
git commit
```

### サードパーティのクックブックを管理するのに`berkshelf`を使う
berkshelfを使うほうがかなり楽になる。自分でgitからcloneしてレシピ取得とかしなくて済むので。

```bash
gem install berkshelf
```

試しに`mysql、git、nginx、vim`をインストールできるように設定。

```bash
vim Berksfile
```

```初期化
berks init
```

```bash
vim berksfile
```

```berksfile
site :opscode
cookbook 'mysql'
cookbook 'git'
cookbook 'nginx'
cookbook 'vim'
```
### coockbook 作成（レシピ取得）

```bash
berks install --path cookbooks
```

### インストール対象HOSTにインストール

```bash
knife solo prepare centos63
```
上記ではvagrantで作成した仮想環境にcentos63という名前をつけてる。
vagrantで作成した仮想環境ならそのまま名前を変更すればできると思うけど一応、sshでパス無しログイン出来る必要があるのでその状況になってない場合はsshの設定を行うこと。

### インストール対象を設定
対象サーバにインストールするcookbookを設定する。

```bash
vim nodes/centos63.json
```

```javascript
{"run_list":[
  "recipe[git]"
]}

```

試しにgitのみインストールしてみる。

```bash
knife solo cook centos63
```

```bash
~/chef/chef-repo (master ✘)✭ ᐅ knife solo cook centos63
Running Chef on centos63...
Checking Chef version...
WARNING: Berkshelf could not be loaded
WARNING: Please add the berkshelf gem to your Gemfile or install it manually with `gem install berkshelf`
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 11.8.2
Compiling Cookbooks...
Converging 1 resources
Recipe: git::default
  * package[git] action install
    - install version 1.7.1-3.el6_4.1 of package git

Chef Client finished, 1 resources updated
```

```bash
~/chef/chef-repo (master ✘)✭ ᐅ ssh centos63
[vagrant@localhost ~]$ git
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
           [-p|--paginate|--no-pager] [--no-replace-objects]
           [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
           [--help] COMMAND [ARGS]
```

リモートホストにgitがインストールされたことが確認できた。

今度はvimを入れてみる。

まずgitの時に貼り忘れたのでvimがインストールされていないことを確認

```bash
~/chef/chef-repo (master ✘)✭ ᐅ ssh centos63
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ vim
-bash: vim: コマンドが見つかりません
[vagrant@localhost ~]$ which vim
/usr/bin/which: no vim in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
```

先ほどのインストールリスト`nodes/centos63.json`を修正

```javascript
{"run_list":[
  "recipe[git]",
  "recipe[vim]"
]}

```

再度、インストール実行

```bash
knife solo cook centos63
```

確認

```bash
~/chef/chef-repo (master ✘)✭ ᐅ ssh centos63
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ vim
[vagrant@localhost ~]$ which vim
/usr/bin/vim
```

### 最終的に以下をインストールした

```Berksfile
~/chef/chef-repo (master ✘)✹ ᐅ cat Berksfile
site :opscode
cookbook 'mysql'
cookbook 'git'
cookbook 'nginx'
cookbook 'vim'
cookbook 'zsh'
cookbook 'rvm', git:'https://github.com/fnichol/chef-rvm.git'
cookbook 'yum'
```

```javascript
~/chef/chef-repo (master ✘)✹ ᐅ cat nodes/centos63.json
{
  "rvm": {
    "rubies"       : ["ruby-1.9.3"],
    "default_ruby" : "ruby-1.9.3-p484"
  },

  "mysql": {
    "server_root_password": "password",
    "server_repl_password": "password",
    "server_debian_password": "password"
  },

  "nginx":{
    "port" : 80
  },

  "run_list":[
    "recipe[yum-epel]",
    "recipe[rvm::system]",
    "recipe[mysql::server]",
    "recipe[git]",
    "recipe[zsh]",
    "recipe[vim]"
  ]
}
```



初期から入ってるyumではrvmインストールできなくてハマった。
これは`yum-epel`をインストールして正常にインストールできるようになった。
rvmのバージョンをググりながら見てたページのコピペでエラー発生してハマった。
。

```bash
rvm list known
```
rvmで使えるバージョンをチェックして修正したらうまくいった


### 今回はサードパーティのcookbooksのみでインストールしてみました。

## まとめ

Berksfileに欲しいcookbookを追加。
追加後に`berks install --path cookbooks」
`

レシピを取得したらリモートホストにインストール

```bash
knife solo cook centos63
```

### 作成したリポジトリ
https://github.com/astrsk-hori/chef-dev