発生しているエラーは次のとおりです:
ubuntu@sync1:/etc/puppet$ sudo /usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install rabbitmq-server
Reading package lists...
Building dependency tree...
Reading state information...
rabbitmq-server is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up rabbitmq-server (3.2.2-1) ...
* Starting message broker rabbitmq-server * FAILED - check /var/log/rabbitmq/startup_\{log, _err\}
[fail]
invoke-rc.d: initscript rabbitmq-server, action "start" failed.
dpkg: error processing rabbitmq-server (--configure):
subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
ubuntu@sync1:/etc/puppet$
これは、sudo puppet apply manifests/site.pp を実行した後に発生します。
これが私のRabbitクラスです:
# See https://github.com/puppetlabs/puppetlabs-rabbitmq
class my_rabbitmq ($environment, $type, $user, $password) {
# case $environment {
# staging: {
# #@todo
# }
# production: {
# #@todo
# }
# }
#
# case $type {
# sync: {
# #@todo
# }
# async: {
# #@todo
# }
# }
class { '::rabbitmq':
delete_guest_user => true,
version => '3.2.2',
}->
rabbitmq_user { 'richard':
admin => true,
password => 'richard_password',
provider => 'rabbitmqctl',
}->
rabbitmq_user_permissions { 'richard@/':
configure_permission => '.*',
read_permission => '.*',
write_permission => '.*',
provider => 'rabbitmqctl',
}
}
私はこれを Ubuntu 12.04 LTS VM で試しています。何かアイデアはありますか? これは私を狂わせるほど困惑させ、何時間もこれを理解しようとして行き詰まっています。
答え1
私もこの問題に遭遇しています。原因は、Ubuntuに「rabbitmq-server」パッケージをインストールすると、rabbitmqのインスタンスが起動します残念ながら、これは意図的なものです。
解決策については、まだ見つかっていません。
編集
これがあなたに当てはまるかどうかはわかりませんが、私の場合は、Puppet のノード名を「rabbit」から別の名前に変更していました。
簡単に説明すると、前述したように、rabbitmq-server をインストールすると、rabbitmq-server サービスが実行されます。デフォルトでは、ノード名「rabbit」が使用されます。
私の場合、puppet が来て、rabbitmq を設定し、サービスを開始する前に '/etc/init.d/rabbitmq-service status' を実行して、すでに実行されているかどうかを確認しました。
理想的な世界では、実際に実行されているため、答えは「はい」になりますが、この場合、「/etc/init.d/rabbitmq-service」スクリプトは構成されたノード名を使用してインスタンスが実行中かどうかを確認します。また、puppet が /etc/rabbitmq/rabbitmq-env.conf でノード名を変更すると、サービス スクリプトが実行中かどうかを判断する機能が完全に破壊され、実行中のインスタンスが見つからないため、スクリプトは当然 0 を返します。
次に、Puppet は新しいノード名で新しいインスタンスを起動しようとしますが、一度に 1 つのサービスしかポートを所有できず、実行中のインスタンスがポートを所有しているため、失敗します。
これを修正するには、RABBITMQ_NODENAME を 'rabbit' に戻すと、すべてが機能します。
私はこれについてここに書きました:
http://www.standalone-sysadmin.com/blog/2014/02/rabbitmq-on-ubuntu-via-puppet/
答え2
http://blog.zugschlus.de/archives/974-Debians-Policy-rc.d-infrastructure-explained.html
Debian はこのデフォルト設定について頻繁に批判されていますが、標準的な答えは、サービスが開始されないように sysv-rc で提供されるポリシー フレームワークを使用することです。このメカニズムはよく誤解されるため、この問題にさらに混乱をもたらすためにこの記事を書いています。
(ブログ投稿は私のものではありません)