Chef SoloでVagrant上にMySQLをインストールする方法
つぎはChef SoloでVagrant上にMySQLをインストールしてみます。 すこし手間取りましたが、思ったよりすんなりいきました。
MySQLをインストールする準備
クックブックを作成する
おなじみクックブックを作成します。
名前はmysql
にします。
$ knife cookbook create mysql -o site-cookbooks/
rpmファイルをダウンロードする
MySQLの公式サイトから、rpm
ファイルをダウンロードしてきます。
今回ダウンロードするものは以下のとおりです。
- MySQL-server-5.6.15-1.el6.x86_64.rpm
- MySQL-client-5.6.15-1.el6.x86_64.rpm
- MySQL-devel-5.6.15-1.el6.x86_64.rpm
- MySQL-shared-5.6.15-1.el6.x86_64.rpm
- MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm
ダウンロードしたものは、site-cookbooks/mysql/files/default/
下に配置します。
レシピを編集する
mysql-libsを削除する
MySQL Serverのインストールを試みると、以下のようなエラーが起きました。
ファイル /usr/share/mysql/czech/errmsg.sys (パッケージ MySQL-server-5.6.15-1.el6.x86_64 から) は、パッケージ mysql-libs-5.1.66-2.el6_3.x86_64 からのファイルと競合しています。
いろいろ調べてみると、どうやら標準で入っているmysql-libs
と競合しているようです。
これを消しても、MySQL-shared-compat.rpm
を入れれば問題ないようなので、サクッと消します。
$ vi site-cookbooks/mysql/recipes/default.rb
package 'mysql-libs' do
action :remove
end
/tmp/にrpmをつくる
つぎに、ダウンロードしたMySQLの各ファイルをノード側に配置します。
これはdefault.rb
に以下のように書きます。
cookbook_file '/tmp/MySQL-server.rpm' do
source 'MySQL-server-5.6.15-1.el6.x86_64.rpm'
end
cookbook_file '/tmp/MySQL-client.rpm' do
source 'MySQL-client-5.6.15-1.el6.x86_64.rpm'
end
cookbook_file '/tmp/MySQL-devel.rpm' do
source 'MySQL-devel-5.6.15-1.el6.x86_64.rpm'
end
cookbook_file '/tmp/MySQL-shared.rpm' do
source 'MySQL-shared-5.6.15-1.el6.x86_64.rpm'
end
cookbook_file '/tmp/MySQL-shared-compat.rpm' do
source 'MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm'
end
インストールする
あとはrpm
からインストールするだけです。
これもdefault.rb
に書いていきます。
rpm_package 'MySQL-server' do
source '/tmp/MySQL-server.rpm'
end
rpm_package 'MySQL-client' do
source '/tmp/MySQL-client.rpm'
end
rpm_package 'MySQL-devel' do
source '/tmp/MySQL-devel.rpm'
end
rpm_package 'MySQL-shared' do
source '/tmp/MySQL-shared.rpm'
end
rpm_package 'MySQL-shared-compat' do
source '/tmp/MySQL-shared-compat.rpm'
end
実行する
華麗に実行します。
$ knife solo cook sample
で、で、できたー!(できなかったらごめんなさい)
参考サイト
- CentOS6.4にMySQL5.5をインストールするChefレシピを作った - 世界中の羊をかき集めて
- mysql-serverを入れようとするとmysql-libsとコンフリクトする件 - webネタ
- rpm_package — Chef Docs
追記:2013/12/15
以下のように、もっとすっきりと書いてみました。
レシピ
$ vi site-cookbooks/mysql/recipes/default.rb
package 'mysql-libs' do
action :remove
end
node['mysql']['rpm'].each do |rpm|
cookbook_file "/tmp/#{rpm}" do
action :create
source "#{rpm}"
end
rpm_package "#{rpm}" do
action :install
source "/tmp/#{rpm}"
end
end
rpmの設定
$ vi site-cookbooks/mysql/attributes/default.rb
default['mysql']['rpm'] = [
'MySQL-server-5.6.15-1.el6.x86_64.rpm',
'MySQL-client-5.6.15-1.el6.x86_64.rpm',
'MySQL-devel-5.6.15-1.el6.x86_64.rpm',
'MySQL-shared-5.6.15-1.el6.x86_64.rpm',
'MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm'
]