knife zeroでMySQLサーバ5.6をインストールする

# はじめに
[BerkshelfのMySQL cookbook](http://qiita.com/masahikoofjoyto/items/8739ae8b12939200d8b2)のバージョンを6系にしたら、下記のエラーが出るようになりました。

```
Chef::Exceptions::RecipeNotFound
--------------------------------
could not find recipe default for cookbook mysql
```

[こちらについて調べてみたところ](http://stackoverflow.com/questions/27970796/chef-php-cookbook-recipenotfound-could-not-find-recipe-client-for-cookbook-mysq)

```
As of version 6.0.0 the mysql cookbook is now a library-only cookbook. This means it no longer provides recipes. You'll want to create a wrapper cookbook that uses the mysql_client resource and use that recipe instead.
```
だそうで、どうやら6系からは自分でレシピを作る必要があるようです。

巷の話では`knife-solo`オワコンらしいし、これを機に`knife-zero`で`Berkshelf`の`mysql cookbook`を使ったMySQLサーバのインストールを行うことにしました。

# knife zeroを入れる

こちらに書かれた手順に従って、knife-zeroをローカルマシンにインストールします。
[Knife-ZeroでCookbookの作成／実行／削除＆git cloneコマンドでCookbookの取得 (1/2)](http://www.atmarkit.co.jp/ait/articles/1503/24/news030.html)

入れたら`bootstrap`しますが、`bootstrap`すると`run_list`が初期化されるので、`nodes`ディレクトリはバックアップしておきましょう。

あと常に`-z`する人は、事前に`.chef/knife.rb`に下記の設定を追記しておくとよいです。

```
local_mode true
```

bootstrapを実行します。

```
$ knife zero bootstrap hoge --sudo
```

`knife zero`では実行結果で`nodes/hoge.json`を更新しますので、サーバのホスト名とbootstrapで指定するホスト名を揃えておく必要があります（`hosts`や.`ssh/config`に別名を書いていたりすると、ホスト名の不整合で正しく動かない）

# ラッパーレシピ作成
`Berkshelfs`がインストールされ、`cookbooks`が最新化されている前提で進めます。
`cookbooks/mysql`のリソースを呼び出すためのラッパーレシピを作成します。

```
$ knife cookbook create mysql-default -o site-cookbooks
```

レシピにmysqlの設定を記述します。

```ruby:site-cookbooks/mysql-default/recipes/default.rb
#
# Cookbook Name:: mysql-default
# Recipe:: default
#
# Copyright 2016, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
mysql_service 'default' do
  port '3306'
  version '5.6'
  initial_root_password ''
  action [:create, :start]
end

mysql_client 'default' do
  action :create
end
```

metadata.rbに`depends 'mysql'`を追加。

```ruby:site-cookbooks/mysql-default/metadata.rb
name             'mysql-default'
maintainer       'YOUR_COMPANY_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures mysql-default'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'
depends          'mysql' # added
```

# run_list追加
nodeの`run_list`に`mysql-default`を追加します。

```
$ knife node run_list add hoge mysql-default
```
# converge実行
`converge`を実行し、mysqlをインストールします。

```
$ knife zero converge "name:hoge" --sudo

hoge Starting Chef Client, version 12.6.0
hoge resolving cookbooks for run list: ["mysql", "base"]
hoge Synchronizing Cookbooks:
hoge   - mysql (6.1.2)
hoge   - base (0.1.0)
hoge   - yum-mysql-community (0.1.21)
hoge   - smf (2.2.7)
hoge   - yum (3.5.1)
hoge   - rbac (1.0.3)
hoge Compiling Cookbooks...
hoge Converging 22 resources
hoge Recipe: mysql::default
hoge   * mysql_service[default] action create
hoge   Recipe: yum-mysql-community::mysql56
hoge     * yum_repository[mysql56-community] action create
hoge       * template[/etc/yum.repos.d/mysql56-community.repo] action create
hoge         - create new file /etc/yum.repos.d/mysql56-community.repo
hoge         - update content in file /etc/yum.repos.d/mysql56-community.repo from none to f82f43
hoge         --- /etc/yum.repos.d/mysql56-community.repo	2016-01-08 09:46:22.358486843 +0000
hoge         +++ /etc/yum.repos.d/.mysql56-community.repo20160108-3460-13wm327	2016-01-08 09:46:22.358486843 +0000
hoge         @@ -1 +1,12 @@
hoge         +# This file was generated by Chef
hoge         +# Do NOT modify this file by hand.
hoge         +
hoge         +[mysql56-community]
hoge         +name=MySQL 5.6 Community Server
hoge         +baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/$releasever/$basearch/
hoge         +enabled=1
hoge         +failovermethod=priority
hoge         +gpgcheck=1
hoge         +gpgkey=https://raw.githubusercontent.com/chef-cookbooks/yum-mysql-community/master/files/default/mysql_pubkey.asc
hoge         +sslverify=true
hoge         - change mode from '' to '0644'
hoge       * execute[yum-makecache-mysql56-community] action run
hoge         - execute yum -q makecache --disablerepo=* --enablerepo=mysql56-community
hoge       * ruby_block[yum-cache-reload-mysql56-community] action create
hoge         - execute the ruby block yum-cache-reload-mysql56-community
hoge       * execute[yum-makecache-mysql56-community] action nothing (skipped due to action :nothing)
hoge       * ruby_block[yum-cache-reload-mysql56-community] action nothing (skipped due to action :nothing)
hoge     
hoge     * yum_package[default :create mysql-community-server] action install
hoge       - install version 5.6.28-2.el6 of package mysql-community-server
hoge     * service[default :create mysqld] action stop (up to date)
hoge     * service[default :create mysqld] action disable (up to date)
hoge     * group[default :create mysql] action create (up to date)
hoge     * user[default :create mysql] action create (up to date)
hoge     * file[default :create /etc/mysql/my.cnf] action delete (up to date)
hoge     * file[default :create /etc/my.cnf] action delete
hoge       - delete file /etc/my.cnf
hoge     * link[default :create /usr/share/my-default.cnf] action create
hoge       - create symlink at /usr/share/my-default.cnf to /etc/mysql-default/my.cnf
hoge     * directory[default :create /etc/mysql-default] action create
hoge       - create new directory /etc/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /etc/mysql-default/conf.d] action create
hoge       - create new directory /etc/mysql-default/conf.d
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/run/mysql-default] action create
hoge       - create new directory /var/run/mysql-default
hoge       - change mode from '' to '0755'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/log/mysql-default] action create
hoge       - create new directory /var/log/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/lib/mysql-default] action create
hoge       - create new directory /var/lib/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * template[default :create /etc/mysql-default/my.cnf] action create
hoge       - create new file /etc/mysql-default/my.cnf
hoge       - update content in file /etc/mysql-default/my.cnf from none to b075a3
hoge       --- /etc/mysql-default/my.cnf	2016-01-08 09:47:07.116854806 +0000
hoge       +++ /etc/mysql-default/.my.cnf20160108-3460-1u4m2wd	2016-01-08 09:47:07.116854806 +0000
hoge       @@ -1 +1,23 @@
hoge       +# Chef generated my.cnf for instance mysql-default
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜　中略　〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
hoge Running handlers:
hoge Running handlers complete
hoge 
hoge Deprecated features used!
hoge   Cannot specify both default and name_property together on property path of resource yum_globalconfig. Only one (name_property) will be obeyed. In Chef 13, this will become an error. at 1 location:
hoge     - /var/chef/cache/cookbooks/yum/resources/globalconfig.rb:76:in `class_from_file'
hoge 
hoge Chef Client finished, 22/29 resources updated in 02 minutes 54 seconds
```

# 確認
`finished`を確認し、ログインしてmysqlのバージョンを確認します。

```
$ mysql -u root --socket=/var/run/mysql-default/mysqld.sock --port=3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.28    |
+-----------+
1 row in set (0.00 sec)
```

レシピで指定したMySQLがインストールされていることが確認できます。