Pull to refresh

Установка jabber сервера ejabberd совместно с модулем mod_logdb

Установка 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

идем на:
image

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

image

image

Пользуемся.

П.С.
Если нужно работать только по защищенному каналу используя tls, исправляем конфиг:

{listen,
[
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"}
]},
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.