Статьи‎ > ‎

Jabberd2

Предисловие

В данной статье я попытаюсь описать порядок инсталяции Jabberd2 как публичного сервиса для некоторого абстрактного хостинга доменов. Стоит отметить, что описания реализации подобной задачи в интеренете нет. Я нашел одну статью, но она была сильно устаревшей и использованные в ней приемы в настоящее время не работоспособны. Статья будет дополняться и перерабатываться, так что жду ваших поправок и отзывов. Задача выполнялась на сервере под управлением CentOS 5. Подход к реализации данной задачи исходил из структуры скрипта инициализации сервиса, так что реализация на другом дистрибутиве может отличаться от данного метода.

Постановка задачи

  • Свободная регистрация
  • Хостинг нескольких доменов

Инсталяция необходимого программного обеспечения

Необходимио учесть, что данные пакеты в CentOS доступны через репозиторий EPEL.

# yum install jabberd

Конфигурирование Jabberd2

Инсталяция схемы базы данных

Заходим в консоль MySQL с правами администратора. Там:

mysql> \. /usr/share/jabberd/db-setup.mysql

Это действие создасть базу данных с именем jabberd2. Так же тебудется создать некого пользователя с правами на SELECT, INSERT, UPDATE, DELETE, LOCK TABLES. Последнее не уверн, что необходимо, но более подробной информации не нашел.

Наcтройка подключения клиентов

Конфигурационный файл /etc/jabber/c2s.xml

Для реализации многодоменности обязательно требуется указать значение realm. Он обязан совпадать со значением id. Если realm опустить, то возникнет конфликт учетных записей с одинаковыми именами с разных доменов.

<id realm='pridomain.ru' require-starttls='true' pemfile='/etc/jabberd/server.pem' register-enable='true'>pridomain.ru</id>
<id realm='secdomain.ru' require-starttls='true' pemfile='/etc/jabberd/server.pem' register-enable='true'>secdomain.ru</id>

В секции <authreg> указываем тип БД, где будет происходить авторизация. К примеру

<module>mysql</module>

В секции <mysql> требуется настроить соответствующие параметры подключения к БД. Стоит отметить проблему с клиентом Gajim и, предположительно, Pidgin: в секции <mechanisms><sasl> следует убрать digest-md5, т.к. она не корректно обрабатывается этими клиентами. Так же возможно поменять местами порядок этих модулей, но эта информация пока не проверена.

Настройка хранения информации пользователей

Конфигурационный файл /etc/jabber/sm.xml Ростер и vcard храним тоже в MySQL В секции

<storage>
<driver>mysql</driver>
</storage>

Указываем наш домен

<id>pridomain.ru</id>

Многодоменность

Особенность скриптов инииализации CentOS требует некоторых дополнительных действий, чтобы данный функционал реализовать. Во первых необходимо создать симвлическую ссылку на бинарник sm с именем совпадающим с именем конфигурционного файла

# cd /usr/bin
# ln -s sm sm-secdomain
Во вторых необходимо создать второй файл конфигурации /etc/jabber/sm-secdomain.xml, и опять таки обратить внимание на его имя. В файле исправить следующие параметры.
<id>secdomain.ru</id>
<pidfile>/var/lib/jabberd/pid/sm-secdomain.pid</pidfile>

Так же исправляем файл /etc/sysconfig/jabberd. Тут тоже уделяем внимание имени.

START_DAEMONS="router sm sm-secdomain c2s s2s"

Данную операцию можно повторить для множества доменов

Запуск

Запускаем сервис

 # service jabberd start
Initializing jabberd processes ...
Starting router: [ OK ]
Starting sm: [ OK ]
Starting sm-secdomain: [ OK ]
Starting c2s: [ OK ]
Starting s2s: [ OK ]

Проверяем, что Service Manager (sm) имеет двойников как мы и хотели

# ps aux|grep /usr/bin/sm
jabber 1524 0.0 0.2 8760 2676 ? S 16:02 0:00 /usr/bin/sm -c /etc/jabberd/sm.xml
jabber 1549 0.0 0.2 8664 2508 ? S 16:02 0:00 /usr/bin/sm-secdomain -c /etc/jabberd/sm-secdomain.xml
root 5063 0.0 0.0 4808 732 pts/6 R+ 20:23 0:00 grep /usr/bin/sm

Ура!!! Мы всех перехитрили, и теперь можем хостить кучу доменов на одном сервере! :)

Конфигурирование DNS

В файле зоны необходимо прописать следующие строки:

_xmpp-server._tcp IN SRV 0 0 5269 jabber.pridomain.ru.
_xmpp-client._tcp IN SRV 0 0 5222 jabber.pridomain.ru.

Это необходимо сделать для каждой зоны, которую вы собираетесь обслуживать. Запись используется для определения хоста для коннекта клиента(c2s) и взаимодействия между серверами(s2s).