homebrew
RabbitMQ
cleanup

homebrewでrabbitmqのクリーンアップ

homebrewでrabbitmqのバージョンアップをしようと思ったら、かなりつまづいたので、homebrew環境における環境のクリーンアップに簡単に触れておく。

発生した前後関係

brew upgrade rabbitmq

でrabbitmq3.6.6 -> rabbitmq3.7.0へのアップグレードを行いました。また、そこから、gitを使って、3.6.14や3.6.12などのバージョンを入れ、複数の環境が混在する環境が出来上がってしまっていました。

エラーの内容

brew services start rabbitmq

では正常にスタートしたように見えるのですが、/usr/local/sbinの下にあるユーティリティを使うとnodeが動いていないことがわかる。実際に、brewを使わず、rabbitmq-serverだけを動かすと

$ /usr/local/sbin/rabbitmq-server

  ##  ##
  ##  ##      RabbitMQ 3.7.0. Copyright (C) 2007-2017 Pivotal Software, Inc.
  ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
  ######  ##
  ##########  Logs: /usr/local/var/log/rabbitmq/rabbit@localhost.log
                    /usr/local/var/log/rabbitmq/rabbit@localhost_upgrade.log

              Starting broker...
{"Kernel pid terminated",application_controller,"{application_start_failure,rabbit,{{schema_integrity_check_failed,[{table_attributes_mismatch,rabbit_exchange,[name,type,durable,auto_delete,internal,arguments,scratches,policy,operator_policy,decorators,options],[name,type,durable,auto_delete,internal,arguments]}]},{rabbit,start,[normal,[]]}}}"}

Crash dump is being written to: /usr/local/var/log/rabbitmq/erl_crash.dump...done

上記のように"Kernel pid terminated"というエラーが出ます。/usr/local/var/log/rabbitmq/err_crash.dumpをみても、同じエラーが見つかるだけでこれ以上の情報がでてきません。

/usr/local/var/log/rabbitmq/rabbit@localhost.logというファイルもあり、こちらを見ると、"schema_integrity_check_failed"というエラーメッセージが出てきます。

結局、バージョン情報が錯綜していることが原因っぽいので、brewでのrabbitmqのクリーンインストールをする必要が出てきました。

brewにおけるrabbitmqのクリーンインストール

Stack Overflow等で解決策を探すも、情報が色々なところに散らばっていたので、トライアンドエラーで環境をクリーンアップすることに・・。結局、以下を実行したらうまく動きました。

$ brew uninstall rabbitmq
$ brew cleanup -s
$ rm -rf /usr/local/var/rabbitmq/
$ rm -rf /usr/local/var/lib/rabbitmq
$ rm -ff /usr/local/var/log/rabbitmq
$ rm -rf /usr/local/etc/rabbitmq
$ brew install rabbitmq

ポイントは、/usr/local/var(特にlib)の下に色々と展開されていて、それらはuninstall後も残ること。これらをちゃんと削除しないと上記のようなエラーが出る場合があるようです。

brew cleanup -sは一回ダウンロードしたインストールパッケージを削除するコマンド、これを実行するとパッケージのダウンロードから再度やり直すことができます(が、今回のエラーとは関係なさそうです)。

他のパッケージでもクリーンインストールしたいときに参考になるかも。。。