ejabberdにPsiでアクセス
以下の要領でVirtualBoxのCentOS 5.5にインストールしたejabberdに、Psiでアクセスしてみます。
CentOS 5.5にejabberdをインストール - ayweekend's blog
ejabberdの設定
/opt/ejabberd-2.1.10/conf/ejabberd.cfg
に最初から以下のように設定があります。
{listen, [ {5222, ejabberd_c2s, [ {certfile, "/opt/ejabberd-2.1.10/conf/server.pem"}, starttls, {access, c2s}, {shaper, c2s_shaper}, {max_stanza_size, 65536} ]}, ...
5222番ポートを開けます。なお、SELinuxはすでに無効にしています。
~# system-config-securitylevel-tui -q -p 5222:tcp
Psiのインストール
PsiはVirtaulBoxのXubuntu 12.04にインストールします。
~$ sudo apt-get install psi
Psiからアクセス
CentOSとXubuntuはVirtualBoxのゲストOSでNAT接続です。そのためホストOSを経由してアクセスします。
VirtualBoxの仮想マシン設定からCentOSのポートフォワーディングを設定しておきます。
PsiでJIDとパスワード、接続先のホストとポート番号を指定します。
設定の後、オンラインにしようとするとエラーが出ます。
一方、CentOSの/opt/ejabberd-2.1.10/logs/ejabberd.log
を見てみると、以下のエラーが残っていました。
=ERROR REPORT==== 2012-05-15 00:25:54 === ** State machine <0.531.0> terminating ** Last event in was {xmlstreamelement, {xmlelement,"starttls", [{"xmlns","urn:ietf:params:xml:ns:xmpp-tls"}], []}} ** When State == wait_for_feature_request ** Data == {state,{socket_state,gen_tcp,#Port<0.475>,<0.530.0>}, ejabberd_socket,#Ref<0.0.0.11085>,false,"3203444177", {sasl_state,"jabber","localhost.localdomain",[], #Fun<ejabberd_c2s.1.52538782>, #Fun<ejabberd_c2s.2.77839348>, #Fun<ejabberd_c2s.3.97921512>,undefined, undefined}, c2s,c2s_shaper,false,true,false,false, [verify_none, {certfile,"/opt/ejabberd-2.1.10/conf/server.pem"}], false,undefined,[],"localhost.localdomain",[], undefined, {pres_t,0}, {pres_f,0}, {pres_a,0}, {pres_i,0}, undefined,undefined,undefined,false, {userlist,none,[],false}, unknown,unknown, {{10,0,2,2},56954}, [],"en"} ** Reason for termination = ** {{case_clause,{error,{open_error,-10}}}, [{tls,tcp_to_tls,2}, {ejabberd_socket,starttls,3}, {ejabberd_c2s,wait_for_feature_request,2}, {p1_fsm,handle_msg,10}, {proc_lib,init_p,5}]}
ググッてみて以下のページが見つかりました。
http://stackoverflow.com/questions/4546076/ejabberd-tls-driver-error
libssl.so.0.9.8とlibcrypto.so.0.9.8がないからというようなことだそうです。記載されている通り確認してみます。
~# ldd /opt/ejabberd-2.1.10/lib/ejabberd-2.1.10/priv/linux-x86/lib/tls_drv.so linux-gate.so.1 => (0x005cd000) libssl.so.0.9.8 => not found libcrypto.so.0.9.8 => not found libc.so.6 => /lib/libc.so.6 (0x00e49000) /lib/ld-linux.so.2 (0x001eb000)
ありませんでした。シンボリックリンクを作成します。
~# cd /lib/ lib# ln -s libssl.so.0.9.8e libssl.so.0.9.8 lib# ln -s libcrypto.so.0.9.8e libcrypto.so.0.9.8 lib# ls libssl.so.* libcrypto.so.* libcrypto.so.0.9.8 libcrypto.so.6 libssl.so.0.9.8e libcrypto.so.0.9.8e libssl.so.0.9.8 libssl.so.6
もう一度確認してみます。今度は大丈夫なようです。
~# cd /opt/ejabberd-2.1.10/lib/ejabberd-2.1.10/priv/linux-x86/lib/ lib# ldd tls_drv.so ./tls_drv.so: /lib/libcrypto.so.0.9.8: no version information available (required by ./tls_drv.so) ./tls_drv.so: /lib/libssl.so.0.9.8: no version information available (required by ./tls_drv.so) linux-gate.so.1 => (0x00598000) libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0x00ba2000) libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x00651000) libc.so.6 => /lib/libc.so.6 (0x00110000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00a2b000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x007fd000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x00938000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x005df000) libresolv.so.2 => /lib/libresolv.so.2 (0x00e72000) libdl.so.2 => /lib/libdl.so.2 (0x003e4000) libz.so.1 => /usr/lib/libz.so.1 (0x00ed1000) /lib/ld-linux.so.2 (0x00e50000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00a5e000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00256000) libselinux.so.1 => /lib/libselinux.so.1 (0x00e0e000) libsepol.so.1 => /lib/libsepol.so.1 (0x00259000)
あらためてPsiでオンラインにすると、今度は成功しました。ただし、証明書のエラーが出ます。
また、/opt/ejabberd-2.1.10/logs/ejabberd.log
を見てみると、接続のログが残っています。
=INFO REPORT==== 2012-05-15 00:52:50 === I(<0.443.0>:ejabberd_listener:281) : (#Port<0.477>) Accepted connection {{10,0,2,2},57284} -> {{10,0,2,15},5222}