Pages

Mar 15, 2007

jabberdで作るIMサーバーとチャットサーバー

Jabber Software Foundation Logo

jabberサーバをたてるまでは良かったんだけど、MU-Conference(チャットルーム機能)とJUD(ユーザ名簿機能)を使いたいと思ってから実際に動くまでにかなり時間がかかったので、ここにメモ。
Webを頑張って検索しても、参考になる情報が少なく、jabberが流行ってないということを痛感しました。

JUD(Jabber User Directory)とは:

ユーザ名簿、ユーザが自己申告した個人情報をサーバに格納閲覧できる。これにより他の使用者が名前やメールアドレスから使用者のユーザ名を検索可能。

 

MU-Conference (Multi User Chat)とは:

IRCなどと似たマルチユーザチャット。IRCと違ってユーザのステータス情報が定期的に変更されるので、いると思って呼びかけても返事がないという悲劇が起こる可能性が低い。


複数の会議室から自分が入りたいものを選ぶ。会議室はパスワードや参加者のポリシー、ログの設定など細かい調節が可能

 
チャットの画面

以上スクリーンショットは全てPandion

Contact list 
Psi, Miranda, exodusと試したけど初心者に一番優しいのはPandionかなぁ。
1年前と比べても地道な改善がされている気がします。

jabberサーバの実装を選ぶ:

まずjabberサーバの実装には色々なものがあるので、自分の用途を満たすものをチェックして使います。
http://www.jabber.org/software/servers.shtml
ちなみにjabberd 2.x系はユーザ情報やログをMySQLやBarkleyDBなどに格納できるという点が進歩している。しかし上記のページによるとカバーしている機能種類ではjabberd 1.x系にも劣っているらしい。

Open-source XMPP server comparison chart 機能対照表
http://www.jabber.org/admin/jsc/

本家のドキュメンテーションの充実度は2.x系が勝っているが、今回は素直にapt-get installできるjabberd 1.4を選びました。

 

インストール:

apt-get install jabber-muc jabber-jud jabber-common  jabberd
コマンド一発です。CUIでjabberクライアントを使いたい人はimcomもついでにインストールするといいでしょう。

 

設定 - IMだけ使いたいとき:

IMのサーバとして使うだけであればjabber.cfgとjabber.xmlのlocalhostを自分のホスト名に変えるだけで
とりあえず動きます。このときホスト名はFQDNが望ましいと本家のドキュメントに書いてあったが、一連の設定で嵌った経験からもFQDNをオススメします。あとはお気楽Jabberサーバ - jabberdの動かし方のページにしたがってSSL暗号化を有効、s2s,dnsrv,自動更新機能は無効にするなどの設定をしました。

 

設定 - JUD,MU-Conferenceも使いたいとき:

一気に面倒になります。

まず最初の問題はホスト名。jabberdのHowtoを端から読みましたが、mucとjudと通常のチャットでそれぞれ別のホスト名を設定していました。ちゃっとサーバ如きに3つのホスト名がいるとは思えないのですが、DNS側でjud.a.sample.com, conference.a.sample.comというCNAMEを設定しました。(IPアドレスはa.sample.comと同じ)自宅サーバでdyndns.orgを使っている方などはwildcard DNSを有効にすれば解決ですね。

次の問題はjabberのメインプロセスとmuc,judのプロセスを分けるかどうかというところです。前出のお気楽jabberサーバさんのWebサイトではjabberdを3つ起動してmuc,judをそれぞれ別プロセスで提供するという方法をとられています。この方法のメリットはmucやjudでトラブルがおきてもメインプロセスで提供しているIM機能には影響を及ぼさないこと。デメリットは設定ファイルが3つに分かれてプロセス間の情報のやり取りにパスワード(secret)が必要になることですか・・・

今回は面倒なので1プロセス/1設定ファイルのシンプル構成をとりました。そうすると設定ファイルの書き方がかなり変わってくるのですがコレは実際のファイルをアップしてみたので直接確認してください。この形に落ち着くまでが大変でした。

/etc/jabber/にはjabber-muc.xml, jabber-jud.xmlなど紛らわしいファイルがありますが、上のサンプルを使えばjabber.xml,jabber.cfgだけあれば動きます。

 

その他注意事項:

コメントアウトは丁寧に:
xmlなので、"<!--"と"-->"の組み合わせでコメントアウトするんですが
入れ子の構造になってたりするとjabberdが上手く読んでくれないです。
コメント多すぎて設定ファイルの見通し悪いので、コメントアウトするくらいなら
ザクザク消してしまったほうがいいかも。

jabberdが起動しない時:
"failed"と表示されjabberedのプロセスが起動しないときは、設定ファイルの構文エラーをチェック。

デバッグモードでjabberdを起動するとき:
作業はユーザ"jabberd"になってからやりましょう。rootのままjabberdを起動すると
関連ファイルのパーミッションがおかしくなって、二度と普通に起動できなくなります。

 

今回設定を行った環境:
各コンポーネントのバージョンとOSのバージョンは以下の通り
OS: Debian GNU/Linux 3.1

Package: jabber
Version: 1.4.3-3
Package: jabber-common
Version: 0.4
Package: jabber-muc
Version: 0.6.0-2
Package: jabber-jud
Version: 0.5-3

 

参考情報:
お気楽Jabberサーバ - jabberdの動かし方
http://nant
oka.kicks-ass.net/wiki/index.php?%5B%5Bjabberd%A4%CE%C6%B0%A4%AB%A4%B7%CA%FD%5D%5D
Jabberd2
でmu-conferenceを使う (jabberd2なので注意)
http://syn.ddo.jp/jabber2_mu-conference.html
The
JAdmin Archives (単なるメーリングリストのアーカイブ)
http://mail.jabber.org/pipermail/jadmin/

5 comments:

  1. お、Sarge+MySQLの環境がちょうどあるんだよね。俺も入れてみたい。わからんかったら教えてー。

    ReplyDelete
  2. 早速わからん。こんなんでるよー。
    io_select unable to listen on 5222 [(null)]: jabberd already running or invalid interface?

    ReplyDelete
  3. ホスト名関連だね。俺もなんどか見たよ
    1,jabber.cfgに書いてあるホスト名
    2,jabber.xmlで設定したホスト名
    3,hostsに書いてあるホスト名
    に矛盾がないかチェック。

    ReplyDelete
  4. http://blog.sparky.jp/bluepill/gcarchives/005299.html
    の真ん中くらいの「実際のファイル」のリンクページ、おかしくない?
    XMLとして処理されようとしているような。。。

    ReplyDelete
  5. DMZさん>
    設定ファイルはXMLですよ。ファイルをブラウザで開くとエラーが出るかも。ファイルをダウンロードしてエディタで開いてみてください。

    ReplyDelete