はじめに
chef-soloでVagrantなCentOSにMySQL5.6をインストールしようと思ったんですが、Berkshelfを使ったインストール手順がなかなか見つからなかったのでまとめました。
事前作業
以下の作業は完了済みとします。
- CentOS6系のインストール
- 対象サーバにchef-solo, またはローカルマシンにknifeインストール
Berkshelfのインストール
1からレシピを書くのは手間なので、先人の知恵を拝借するためberkshelfを使います。
Befkshelfはchefのレシピにおけるgemとかbundlerみたいなものと思ってください。
$ gem install berkshelf
Berksfile作成
Berkshelf経由でインストールするミドルウェアを指定するため、Berksfileを書きます。
chef実行ディレクトリに移動し、Berksfileを作成します。
$ vi Berksfile
mysqlレシピをBerkshelfから取得するための設定を記述します。
source "https://supermarket.getchef.com"
cookbook "mysql"
berkshelfのMySQLレシピを使う場合、MySQLの構成情報をnodeオブジェクトに記述します。
{
"run_list": [
"recipe[mysql::server]"
],
"mysql":{
"version":"5.6",
"port":"3306",
"server_root_password":"mysql0000",
"remove_anonymous_users":true,
"remove_test_database":true
}
}
MySQLサーバをインストールする場合、run_list
に"recipe[mysql::server]"
を追記します。(シングルクォーテーションではなくダブルで)
さらにインストールするバージョンなどをmysql
ハッシュで指定します。
指定できるパラメータ
代表的なパラメータをまとめました
- version MySQLのバージョン5.1~5.6が指定可能。5.7はCentOS6.5ではダメでした(2014/09現在)
- port MySQLが使用するポートを指定します。
- server_root_password MySQLのrootユーザーパスワード
- remove_anonymous_users アノニマスユーザーを削除するか(true or false)
-
remove_test_database テストデータベースを削除するか(true or false)
他にも色々設定できますので、設定項目はこちらを参照してください。
chef実行
nodeオブジェクトができたらberksコマンドを実行してmysqlレシピを取得します。
$ berks --path cookbooks
berks
コマンドは--path
で指定したディレクトリを一度削除し、再作成した上でレシピをダウンロードします。
もし自分のレシピをcookbooks配下に作ってると、容赦なく全部削除されるので、事前にsite-cookbooksなどにリネームするか、--path
指定のディレクトリを変更しましょう。
あとはchef-soloなりknifeなりお好きなように!
追記
recipeなしエラー
mysqlのレシピファイルが見つからないエラーが出る場合、.berkhelf/cookbooks
にmysql-6.0.4
だけができて、mymsql-5.3.6
がない可能性があります。
Berkfileにバージョン指定を追加しましょう。
cookbook "mysql", "~> 5.3.6"
You must supply a name when declaring a mysql_service resource
と言われたら、ノードファイルの記述方法が変わった可能性があります。
"service_name":"default"
を追加しましょう。
"mysql":{
"service_name":"default",
"version":"5.5",
"port":"3306",
"server_root_password":"mysql0000",
"remove_anonymous_users":true,
"remove_test_database":true
}