Установка ejabberd совместно с модулем mod_logdb
Ejabberd — это свободный (GNU GPL), распределённый и устойчивый к отказам XMPP-сервер, написанный в основном на Erlang. Он работает под юникс-подобными ОС (GNU/Linux, FreeBSD и NetBSD) и Microsoft Windows.
mod_logdb — модуль для сервера ejabberd, хранящий сообщения пользователей в базе данных mysql или postgres
Задача — установить jabber server в локальной сети c хранением всего кроме mod_logdb в встроенной БД mnesia, а mod_logdb в mysql5. Операционная система Debian(etch, lenny, squeeze) или Ubuntu.
Устанавливаем нужные пакеты:
# cd /usr/src
sergldom:/usr/src# apt-get source ejabberd
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Нужно загрузить 1110kB архивов с исходными текстами.
Получено:1 http://mirror.yandex.ru lenny/main ejabberd 2.0.1-5 (dsc) [1351B]
Получено:2 http://mirror.yandex.ru lenny/main ejabberd 2.0.1-5 (tar) [1055kB]
Получено:3 http://mirror.yandex.ru lenny/main ejabberd 2.0.1-5 (diff) [53,6kB]
Получено 1110kБ за 1s (1009kБ/c)
gpg: Подпись создана Птн 10 Окт 2008 09:00:21 EEST ключом DSA с ID 6A461052
gpg: Не могу проверить подпись: открытый ключ не найден
dpkg-source: извлечение ejabberd в ejabberd-2.0.1
dpkg-source: инфо: распаковывается ejabberd_2.0.1.orig.tar.gz
dpkg-source: инфо: накладывается ejabberd_2.0.1-5.diff.gz
Проверяем содержимое папки:
sergldom:/usr/src# ls
ejabberd-2.0.1 ejabberd_2.0.1.orig.tar.gz linux-headers-2.6.26-1-common
ejabberd_2.0.1-5.diff.gz ejabberd-modules linux-kbuild-2.6.26
ejabberd_2.0.1-5.dsc linux-headers-2.6.26-1-amd64
Переходим в папку с исходниками, качаем патч, накладываем патч:
sergldom:/usr/src# cd ejabberd-2.0.1/src
sergldom:/usr/src/ejabberd-2.0.1/src# wget http://www.dp.uz.gov.ua/o.palij/mod_logdb/patch-src-mod_logdb-2.0.5.diff
sergldom:/usr/src/ejabberd-2.0.1/src# patch -p0 < patch-src-mod_logdb*
patching file mod_logdb.erl
patching file mod_logdb.hrl
patching file mod_logdb_mnesia.erl
patching file mod_logdb_mysql.erl
patching file mod_logdb_mysql5.erl
patching file mod_logdb_pgsql.erl
patching file mod_logdb_mnesia_old.erl
patching file gen_logdb.erl
patching file web/ejabberd_web_admin.erl
patching file mod_muc/mod_muc_room.erl
Hunk #1 succeeded at 683 (offset -12 lines).
patching file msgs/uk.msg
Hunk #1 succeeded at 384 (offset -4 lines).
patching file msgs/ru.msg
Hunk #1 succeeded at 381 (offset -7 lines).
patching file msgs/pl.msg
Hunk #1 succeeded at 415 (offset 7 lines).
patching file msgs/nl.msg
Hunk #1 succeeded at 373 (offset -6 lines).
patching file mod_roster.erl
patching file mod_roster_odbc.erl
До устанавливаем необходимые пакеты для сборки, а также запускаем сборку с исходников:
sergldom:/usr/src/ejabberd-2.0.1/src# apt-get build-dep ejabberd
sergldom:/usr/src/ejabberd-2.0.1/src# cd ..
sergldom:/usr/src/ejabberd-2.0.1# fakeroot dpkg-buildpackage -us -uc
После сборки поднимаемся на каталог выше и проверяем что получилось, должны появится собранные deb пакеты:
sergldom:/usr/src/ejabberd-2.0.1# cd ..
sergldom:/usr/src# ls
ejabberd-2.0.1 ejabberd_2.0.1.orig.tar.gz
ejabberd_2.0.1-5_amd64.changes ejabberd-modules
ejabberd_2.0.1-5_amd64.deb linux-headers-2.6.26-1-amd64
ejabberd_2.0.1-5.diff.gz linux-headers-2.6.26-1-common
ejabberd_2.0.1-5.dsc linux-kbuild-2.6.26
Запускаем установку пакета:
sergldom:/usr/src# dpkg -i ejabberd_2.0.1-5_amd64.deb
Проверяем, чтоб был модуль mod_logdb
sergldom:/usr/src# ls /usr/lib/ejabberd/ebin/*logdb*
/usr/lib/ejabberd/ebin/gen_logdb.beam
/usr/lib/ejabberd/ebin/mod_logdb.beam
/usr/lib/ejabberd/ebin/mod_logdb_mnesia.beam
/usr/lib/ejabberd/ebin/mod_logdb_mnesia_old.beam
/usr/lib/ejabberd/ebin/mod_logdb_mysql5.beam
/usr/lib/ejabberd/ebin/mod_logdb_mysql.beam
/usr/lib/ejabberd/ebin/mod_logdb_pgsql.beam
Теперь нужно скачать драйвер для mysql5
Для этого нужно установить subversion и выполнить команду:
svn co -r 850 https://svn.process-one.net/ejabberd-modules/mysql/trunk/
Скачается драйвер в папку trunk.
Переходим в папку, собираем и устанавливаем драйвер для mysql5:
sergldom:/usr/src# cd trunk/
sergldom:/usr/src# sh build.sh
sergldom:/usr/src# cp ebin/* /usr/lib/ejabberd/ebin/
Необходимо создать пользователя и бд в mysql5.
Для этого:
идем на http://localhost/phpmyadmin
нажимаем Привилегии
Добавить нового пользователя
name: logdb
serv: localhost
pass: logdb
отметить Создать базу данных с именем пользователя в названии и предоставить на нее полные привилегии
ОК
После этого переходим к настройке конфига ejabberd:
vi /etc/ejabberd/ejabberd.cfg
%% Admin user
{acl, admin, {user, "admin", "gpfu.ua"}}.
%% Hostname
{hosts, ["gpfu.ua"]}.
{language, "ru"}.
оставляем
{auth_method, internal}.
в %%% ACCESS RULES добавляем
%%This allows admins to change module/users settings via ad-hoc commands:
{access, mod_logdb_admin, [{allow, admin}]}.
меняем в %%% MODULES
{mod_logdb, []},
на
{mod_roster, []},
%%{mod_service_log,[]},
{mod_shared_roster,[]},
{mod_stats, []},
{mod_time, []},
{mod_vcard, []},
{mod_logdb, [
{dbs, [{mysql5, [{user, "logdb"},{password, "logdb"},{server, "localhost"},{port, 3306},{db, "logdb"}]}]},
{vhosts, [{"gpfu.ua", mysql5}]}
]},
{mod_version, []}
]}.
сохраняем
Перезагружаем ejabberd:
/etc/init.d/ejabberd stop
killall -9 ejabberd
/etc/init.d/ejabberd start
Проверяем работает ли сервер:
sergldom:/usr/src# ejabberdctl status
Node ejabberd@sergldom is started. Status: started
ejabberd is running
Добавляем пользователя admin в консоли сервера:
sergldom:/usr/src#jabberdctl register admin gpfu.ua 777
идем на:

Настраиваем Группы общих контактов по примеру:



Пользуемся.
П.С.
Если нужно работать только по защищенному каналу используя tls, исправляем конфиг:
{listen,
[
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"}
]},