Ключевые слова:jabber, icq, (найти похожие документы)
From: Litos <litos@mail.ru.>
Newsgroups: email
Date: Mon, 1 Oct 2007 14:31:37 +0000 (UTC)
Subject: Установка ejabberd и транспорта в icq-сеть. Руководство к действию.
Я устанавливал ejabberd на виртуальный выделенный сервер с системой
FreeBSD под управлением
VDSmanager, но особого
значения это не имеет, то есть статья подойдет один в один для установки
на обычный сервер.
Итак, приступим
Устанавливаем ejabberd из портов
Читали подсказали мне, что jdk устанавливать не обязательно, так что можете
пропустить пункт с установкой diablo-jdk, но чтобы его не ставить, достаточно
перед установкой ejabberd установить erlang-lite.
Ничего сложного в этом нет, достаточно выполнить
# cd /usr/ports/lang/erlang-lite
# make install clean
Порту erlang-lite jdk не нужен
И потом уже переходим к установке с места cd /usr/ports/net-im/ejabberd
Для установки ejabbed нам понадобится java. В темплейтах ISPmanager и
Soft2006 она уже установлена на виртуальном сервере (поэтому можно сразу
перейти к установке порта ejabberd), но мы рассмотрим случай с чистой
системой FreeBSD. Установим diablo-jdk перед установкой сервера.
Установка diablo-jdk
Необходимость прочтения и принятия лицензионного соглашения для данного
порта приводит к следующим действиям:
Установим lynx если он еще не установлен (чтобы закачать файл) напрямую на сервер
# cd /usr/ports/www/lynx
# make install clean
# cd /usr/ports/distfiles/
# lynx 'http://www.FreeBSDFoundation.org/cgi-bin/download?download=diablo-caffe-freebsd6-i386-1.5.0_07-b01.tar.bz2'
Прочитаем лицензию и поставим галочку на I agree to the terms of this license agreement
Также потребуется скачать файл tzupdater-1_2_2-2007g.zip
Скачать этот файл (JDK US DST Timezone Update Tool - 1.2.2) размером 466
килобайт с http://java.sun.com/javase/downloads/index.jsp используя
текстовый браузер затруднительно, потребуется регистрация, поэтому
скачиваем его используя как вариант Firefox на рабочий компьютер и
копируем на сервер используя ftp или scp в /usr/ports/distfiles
# cd /usr/ports/net-im/ejabberd
# make install clean
Enable ODBC support не включаем, ждем пока соберется.
Пока собирается ejabberd, настраиваем DNS
Создаем следующие записи в зоне, указывающие на наш сервер (jabber.hostname.ru)
icq IN A 82.146.*.*
_jabber._tcp.jabber.hostname.ru. 86400 IN SRV 5 0 5269 jabber.hostname.ru.
_xmpp-server._tcp.jabber.hostname.ru. 86400 IN SRV 5 0 5269 jabber.hostname.ru.
_xmpp-client._tcp.jabber.hostname.ru. 86400 IN SRV 5 0 5222 jabber.hostname.ru.
Очень важно чтобы в DNS были записи и корректно работал на сервере
resolving имен, в противном случае вы будете видеть в онлайне только
самого себя.
Настраиваем ejabberd
# cp /usr/local/etc/ejabberd/ejabberd.cfg.example /usr/local/etc/ejabberd/ejabberd.cfg
# cp /usr/local/etc/ejabberd/ejabberd.defaults.example /usr/local/etc/ejabberd/ejabberd.defaults
Редактируем
# vi /usr/local/etc/ejabberd/ejabberd.cfg
{acl, admin, {user, "vasya"}}.
Добавим сюда нашего пользователя, который будет иметь права
администратора, и пользоваться этими правами как через jabber, так и
через веб-интерфейс (подробности в документации по ejabberd)
Исправим localhost на названием вашего сервера
% Host name:
{hosts, ["jabberd.hostname.ru"]}.
Настроим поддержку SSL
Пропишем в /usr/local/etc/ejabberd/ejabberd.cfg
% Listened ports:
{listen,
[{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
{5223, ejabberd_c2s, [{access, c2s},
{max_stanza_size, 65536},
tls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
% Use STARTTLS+Dialback for S2S connections
{s2s_use_starttls, true}.
{s2s_certfile, "/usr/local/etc/ejabberd/ssl.pem"}.
Полный путь к файлу ssl.pem
Затем создадим сертификат
# cd /usr/local/etc/ejabberd/
# openssl req -new -x509 -nodes -newkey rsa:1024 -days 3650 \
-keyout privkey.pem -out server.pem -subj \
"/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=jabberd.hostname.ru/emailAddress="mail@jabberd.hostname.ru
# cat privkey.pem >> server.pem
# rm privkey.pem
# mv server.pem ssl.pem
Добавим в запуск и запустим
jabberd # vi /etc/rc.conf
ejabberd_enable="YES"
# /usr/local/etc/rc.d/ejabberd start
Все, вы получили работающий и надежный jabber сервер.
Транспорт в icq
Вообще, лучше пользоваться каким-либо ICQ-клиентом, так как транспорт в
icq работает весьма проблематично с русским языком, в отличие от MSN и
MailRu
Устанавливаем из портов pyICQ
Собираем с опцией
[X] EJABBERD Use with ejabberd (net-im/ejabberd)
# cd /usr/ports/net-im/jabber-pyicq/
# make install clean
Редактируем конфиг
# vi /usr/local/etc/jabber-pyicq.xml
<pyicqt>
<!-- The JabberID of the transport. -->
<jid>icq.jabberd.hostname.ru</jid>
<!-- The IP address of the main Jabberd server -->
<mainServer>82.146.xx.xx</mainServer>
На VDS под управлением VDSmanager надо поменять IP-адрес 127.0.0.1, так
как на нем порт слушаться не будет
<!-- The JID of the main Jabber server -->
<mainServerJID>jabber.localhost</mainServerJID>
Тут тоже вместо jabber.localhost пропишем jabberd.hostname.ru (то есть
имя вашего сервера)
<!-- The authentication token to use when connecting to the Jabber server -->
<secret>secret</secret>
Пароль поменяем на другой для безопасности, скажем на skpwdq1 (буду в
дальнейшем использовать его для обозначения)
<!-- Default message encoding to use -->
<encoding>iso-8859-1</encoding>
Поменяем на
<encoding>windows-1251</encoding>
Теперь подсоединим его к ejabberd
Запустим транспорт
# vi /etc/rc.conf
jabber_pyicq_enable="YES"
Создадим для него директории
# mkdir /var/spool/jabber/
# mkdir -p /var/jabberd/pid/
И выставим на них права
# # chown ejabberd /var/spool/jabber/
# chown ejabberd /var/jabberd/pid/
Отредактируем конфиг jabberd
# vi /usr/local/etc/ejabberd/ejabberd.cfg
% Listened ports:
{listen,
[{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
{5223, ejabberd_c2s, [{access, c2s},
{max_stanza_size, 65536},
tls, {certfile, "/usr/local/etc/ejabberd/ssl.pem"}]},
% Use these two lines instead if TLS support is not compiled
%{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}]},
%{5223, ejabberd_c2s, [{access, c2s}, ssl, {certfile, "./ssl.pem"}]},
{5269, ejabberd_s2s_in, [{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
{5280, ejabberd_http, [http_poll, web_admin]},
%
% пропишем наш сервис
%
{5247, ejabberd_service, [{access, all},
{hosts, ["icq.hostname.ru"],
[{password, "skpwdq1"}]}]}
]}.
Запустим транспорт и перезапустим jabber-сервер
# /usr/local/etc/rc.d/jabber-pyicq-transport start
Starting jabber_pyicq.
# /usr/local/etc/rc.d/ejabberd restart
Аналогично подключаются транспорты в другие сети, следует только их
вешать на разные порты, например на 5247 - icq, 5248 - msn,
5249 - Agent MailRu
В конфигурации транспорта задается порт, который он будет слушать, его
же надо указывать в конфиге ejabberd, пример
{5247, ejabberd_service, [{access, all},
{hosts, ["icq.hostname.ru "],
[{password, "skpwdq1"}]}]},
{5248, ejabberd_service, [{access, all},
{hosts, ["msn.hostname.ru "],
[{password, "skpwdq1"}]}]},
{5249, ejabberd_service, [{access, all},
{hosts, ["mrim.hostname.ru "],
[{password, "skpwdq1"}]}]}
Соответственно не забываем также прописать соответствующую запись A в
конфигурации DNS на ваш сервер.
Также рекомендую к прочтению руководство по инсталляции и настройке
ejabbed Ejabberd 1.1.2 Installation and Operation Guide
Написано нормально, скоро будет возможность проверить.
Просьба только поправить замеченные неточности (как про обход java при помощи erlang-lite, так и про DNS с пропущенным tcp и точкой в конце первой записи)
Спасибо.
Сделал все как в статье указано.
Запускаю ejabberd, а он мне выдает:
%: not found
%override_acls.: not found
%: not found
%: not found
%{acl,: not found
%{acl,: not found
%: not found
%{acl,: not found
%: not found
{acl,: not found
%: not found
%{acl,: not found
%{acl,: not found
...
Что означает
kernel-poll not supported; "K" parameter ignored
{error_logger,{{2007,11,8},{11,39,36}},"inet_config: file ~s not found~n",["/usr
/local/etc/ejabberd/ejabberd.inetrc"]}
{error_logger,{{2007,11,8},{11,39,36}},"Protocol: ~p: register error: ~p~n",["inet_tcp",{{badmatch,{error,duplicate_name}},[{inet_tcp_dist,listen,1},{net_kernel,start_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel,init,1},{gen_server,init_it,6},{proc_lib,init_p,5}]}]}
{error_logger,{{2007,11,8},{11,39,36}},crash_report,[[{pid,<0.20.0>},{registered_name,net_kernel},{error_info,{error,badarg}},{initial_call,{gen,init_it,[gen_se
и т.д.