CentOS 6.5でChefからSensuをインストールしようとするとRabbitMQでコケる回避策

January 5, 2014

date : 2014/01/05
OS : CentOS 6.5
Sensu : sensu-0.12.3-1.x86_64
sensu-chef : 0.8.0

=== (2014/01/06)追記 =======================

ドラクエ氏によると、この解決策だと6.4は別のエラーがでるとのこと。

================================

という感じでうまくいかなかったのでBKっぽいけど取り敢えず回避策を

https://github.com/sensu/sensu-chef

このSensuのリポジトリはopscodeに上がっているので
knifeで取ってきます。他にも必要なrecipeを合わせて持ってこれるので便利です。

knife cookbook site vendor sensu -o cookbooks/

関係するrecipeがダウンロードされたことを確認してください。
次にREADMEに書いてあるようにSSL証明書を作成します。

cd ./cookbooks/sensu/examples/ssl/
./ssl_certs.sh generate
knife data bag create sensu
knife data bag from file sensu ssl.json

などとSSLを作成しますが knifeが上手く動かない場合は

mkdir ./data_bags/sensu
cp ./cookbooks/sensu/examples/ssl/ssl.json data_bags/sensu/

とすることで同じ結果を得られます。 次にrun_listを作成します。

{
  "default_attributes": {
  },
  "override_attributes": {
  },
  "run_list": [
    "sensu",
    "sensu::redis",
    "sensu::rabbitmq"
  ]
}

この状態でChefを廻します。

Recipe: rabbitmq::default
  * service[rabbitmq-server] action restart
================================================================================
Error executing action `restart` on resource 'service[rabbitmq-server]'
================================================================================


Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of /sbin/service rabbitmq-server start ----
STDOUT: Starting rabbitmq-server: FAILED - check /var/log/rabbitmq/startup_{log, _err}
rabbitmq-server.
STDERR:
---- End output of /sbin/service rabbitmq-server start ----
Ran /sbin/service rabbitmq-server start returned 1


Resource Declaration:
---------------------
# In /root/chef-solo/cookbooks-3/rabbitmq/recipes/default.rb

106:   service node['rabbitmq']['service_name'] do
107:     action [:enable, :start]
108:   end
109:



Compiled Resource:
------------------
# Declared in /root/chef-solo/cookbooks-3/rabbitmq/recipes/default.rb:106:in `from_file'

service("rabbitmq-server") do
  action [:enable, :start]
  updated true
  supports {:restart=>false, :reload=>false, :status=>true}
  retries 0
  retry_delay 2
  service_name "rabbitmq-server"
  enabled true
  running true
  pattern "rabbitmq-server"
  startup_type :automatic
  cookbook_name :rabbitmq
  recipe_name "default"
end

と、このようにエラーになります。

diff --git cookbooks/erlang/recipes/package.rb cookbooks/erlang/recipes/package.rb
index 19f9fce..6cec68f 100644
--- cookbooks/erlang/recipes/package.rb
+++ cookbooks/erlang/recipes/package.rb
@@ -43,5 +43,9 @@ when 'rhel'
     include_recipe 'yum-erlang_solutions'
   end

-  package 'erlang'
+  execute "yum install -y erlang-R16B02" do
+    user "root"
+    command "yum install -y erlang-R16B02"
+    not_if { File.exists? "/usr/bin/erl" }
+  end
 end

上記のようにバージョンを含めたパッケージの指定をすることで回避できました。

package 'erlang' do
  version "R16B02"
end

この方法でイケるかと思ったのですがそんなバージョンはない。とエラーになりました。
以上、取り敢えずの回避策としてご利用下さい。