среда, 22 декабря 2010 г.

ejabberd в CentOS - грабли

Настройка довольно проста, конфиг небольшой и понятный. А вот дальнейшая отладка "почему же эта тварь не работает" занимает много времени и в связи с невменяемой и фактически отсутствующей системой логов требует изучения азов эрланга, как минимум его консоли, и знания, куда стучать.

Если включена веб-консоль на порту 5280, просто через http://server:5280 мы получим ошибку 404 Not Found
Это потому, что путь должен быть таким:
http://server:5280/admin
Но чтобы подключиться, надо знать пользователя и пароль. В теории, завести пользователя просто:
ejabberdctl register admin ...
На практике получим Failed RPC connection to the node ejabberd@jabber: nodedown
Как вариант, из жаббер-клиента подключиться и там "создать новую запись" с тем админ-логином, что указали в конфиге. И с этими данными входить в админку.
Но ошибка, указанная выше, совсем не означает, что сервер не запустился, но об этом ниже.

Итак.
Пробуем запуститься.
ejabberdctl live
Если все в порядке, последние строки будут вида
=INFO REPORT==== 10-Dec-2010::17:34:02 ===
I(<0.39.0>:ejabberd_app:72) : ejabberd 2.1.5 is started in the node ejabberd@jabber

=PROGRESS REPORT==== 10-Dec-2010::17:34:02 ===
application: ejabberd
started_at: ejabberd@jabber
Выход ^G q
Но при этом сервер остановится и надо будет его запускать просто через ejabberdctl start
Можно посмотреть список задач - ^G j
1* {shell,start,[init]}
Значит, все не так плохо.

А если Облом? Запускаемся в режиме отладки.
ejabberdctl debug
Там будет
*** ERROR: Shell process terminated! (^G to start new job) ***
Жмем ^G
Теперь ?
Получили список опций. Можно посмотреть, что запущено - j, и прицепиться к задаче - c [nn]
Только может ничего не показать. Попробуем запуститься вручную.

Также частым гостем будет ошибка
Error in process <0.34.0> on node 'ejabberdctl-1@jabber' with exit value: {badarg,[{erlang,list_to_existing_atom,["ejabberd@localhost"]},{dist_util,recv_challenge,1},{dist_util,handshake_we_started,1}]}
Обычно это говорит о том, что нода запущена, но установить соединение с ней не удалось.

Вполне может так получиться, что /etc/init.d/ejabberd start отрабатывает, но ejabberctl говорит:
# ejabberdctl status
Failed RPC connection to the node ejabberd@jabber: nodedown

=ERROR REPORT==== 10-Dec-2010::17:30:18 ===
Error in process <0.34.0> on node 'ejabberdctl-1@jabber' with exit value: {badarg,[{erlang,list_to_existing_atom,["ejabberd@localhost"]},{dist_util,recv_challenge,1},{dist_util,handshake_we_started,1}]}
При этом в памяти оно сидит:
# ps auxwww|grep jabber
avahi 1579 0.0 0.4 3740 1304 ? Ss Nov20 0:00 avahi-daemon: running [jabber.local]
ejabberd 25660 0.0 0.0 1972 252 ? S 17:16 0:00 /usr/lib/erlang/erts-5.6.5/bin/epmd -daemon
ejabberd 25727 0.1 9.6 34308 25432 ? Sl 17:17 0:01 /usr/lib/erlang/erts-5.6.5/bin/beam -K true -P 250000 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/ejabberd/spool -sname ejabberd@jabber -noshell -noinput -noshell -noinput -pa /usr/lib/ejabberd/ebin -mnesia dir "/var/lib/ejabberd/spool" -s ejabberd -sasl sasl_error_logger {file,"/var/log/ejabberd/erlang.log"} -smp auto start
Ну и остановка также ничего не дает
# /etc/init.d/ejabberd stop
Shutting down ejabberd: already stopped [WARNING]

Похоже, это криво собранный пакет в центоси. Народ ставит пакет (зависимости ставятся сами), потом тянет с сайта сырцы и разворачивает в /opt. И тогда все работает.
Ну и владельца правильно менять надо, в частности на рабочие каталоги.

Дока, где описано больше чем "правим конфиг, запускаем, радуемся". Правда, тоже не полный охват проблем.
http://cms02.phys.ntu.edu.tw/tracs/env/wiki/Ejabberd

Еще дока
http://plone.lucidsolutions.co.nz/linux/im/ejabberd-centos-vm


"С ежом,одна-ко, не срослось. Что интересно, перенес с одной тачки рабочего ежа (собственной настройки) на другую - жаббера в конторе резко не стало.
Трехдневное пинание конфигов и раскуривание манов не помогло (жаббера вернул на место минут через 5, ибо уволят).
Так и не понял в каком месте при копировании кроссплатформенного приложения с кормпа на комп напоролся на грабли. Поставил opеnfire. Открыт, гпл, бесплатен, есть в портах."
http://www.gentoo.ru/node/8793

И что-то я тоже задумываюсь перейти на что-то более вменяемое.

1 комментарий:

  1. У меня так же было: все поставил без проблем, но запускаться отказывался напрочь. Тоже писал мне Failed RPC connection to the node ejabberd@jabber: nodedown.

    Я сбросил файрвол на сервере, так как мы используем отдельные файрволы.... И.... вауля! Все залетало весело и задорно!

    По умолчанию при инсталляции стоит локальный firewall - правила можно увидеть через iptables -L ,
    сбросить все правила (чтобы было всему permit) - командой iptables -F
    а потом уже сохранить полученные правила командой iptables-save > /etc/sysconfig/iptables
    Естественно, это надо делать от root-a.

    ОтветитьУдалить