ejabberdをCentOS(v6.5)で動かす

XMPPサーバを立てる必要があったのでejabberdをCentOSにインストールして自動起動するようになるまでのあれこれ。
とりあえず動くようになったという状況なので、適切な状態ではないかもしれません。 今回の目的はきちんとした形での起動ではなくクライアントソフトウェアのための実験サーバなので動く状態でよかったのが主な理由でだいぶ適当です。
ejabberdが更新されればfixされると信じて…!

環境

ejabberdのインストール

Installing ejabberd | ejabberd Installation and Operation Guide

基本的には公式ドキュメントに従いインストールします。
英語が読みたくなくて日本語のリソースを探して途中まで参考にしました(๑╹ڡ╹๑)
インストール自体はとっても簡単、インストーラを落としてきて走らせると質問形式でインストールが進んでいきます。
システム上にインストールするためrootアカウントで作業した。
ejabberd関連のファイル一式は/opt/ejabberd-15.03にインストールされました。

ejabberd ユーザを作る

ドキュメントを読み進めて行くとWindowsLinux(もしくはUnix)によって作業がわかれます。
読みづらいので見出しを付けて欲しい…

CentOSなのでLinux向けの作業をする。具体的には、

  • ejabberd システムユーザの作成
  • ejabberd ユーザのホームディレクトリを /opt/ejabberd-15.03にする
# groupadd -r ejabberd
# useradd -g ejabberd -p ejabberd -r ejabberd 
# usermod -d /opt/ejabberd-15.03 ejabberd

これで/opt/ejabberd-15.03/bin/ejabberctlが使えるようになりました。
(上記作業を行わなくてもroot権限で使用することはできる)
ここから先が長かった…

binのstopスクリプトが動作するようにする

なぜか/opt/ejabberd-15.03/bin/stopがうまく動作しない…
メッセージを読むと同じbinにあるはずのepmdが見つからないとのことでした。
パスが通っていないらしい。

ぐぐって見つかったFixに従ってejabberdctlに以下の行を追加しました。

EPMD="$ROOT_DIR"/bin/epmd
INSTALLUSER=root

+# The problem is epmd isn't in the path of the ejabberdctl script.
+# The (quick fix) is at the top of bin/ejabberdctl, add in here!
+# See: https://www.ejabberd.im/node/5748
+
+PATH=$PATH:$(dirname $(readlink -f $0))

# check the proper system user is used if defined
if [ "$INSTALLUSER" != "" ] ; then

これで/opt/ejabberd-15.03/bin/stopが動かせるようになりました。やったぜ。

ejabberdの自動起動

あとは公式ドキュメントの通り、binの中にあるejabberd.initをinit.dにコピーします。 不安だったのでその前に動かせるかどうか試してみました。

# /opt/ejabberd-15.03/bin/ejabber.init start

動きません。しかもrootユーザで動かしてね♡的な事を言われれます。
何を言っているんだ……と思い色々試しますが動かず。

ejabberdctlstartstopは動くことから、initスクリプトがおかしいだろうとあたりをつけました。

スクリプトを開くと、結局ejabberdctlを実行している……

suコマンドの引数として与えられてるユーザをrootユーザに変更すると動きました。 変数を後続のスクリプトに受け継いでいるようなのが少し気になりますがとりあえずスルー。

chkconfigで自動起動する

initスクリプトは動くようになったので、あとはchkconfigで起動時に立ち上がるようにするだけ!
chkconfig用に追記して、iptablesでポートを開いてreboot
無事動作していることを確認しました。成し遂げたぜ。

参考にしたサイト一覧

Installing ejabberd | ejabberd Installation and Operation Guide
Service doesn't start automatically in CentOS
"epmd: command not found" after Ejabberd installation
CentOS 6 に ejabberd をインストールする方法 - だいたいおっけぇ