Установка Jabberd2  с сервером LDAP и настройка конференции

 

Настройка LDAP сервера

Несмотря на то, что большой популярностью пользуется ejabber сервер, для меня более комфортным оказалось использование сервера jabberd2. Его проще отлаживать, его структура понятна, не надо скачивать монстроподобный erlang.  Для небольших jabber серверов я считаю jabberd2 более чем достаточен.

Скачиваем последний пакет с сайта http://jabberd2.org/

Распаковываем

Запускаем с следующей строкой ./configure --enable-ldap --enable-mysql --enable-debug

Make

Make install

Не забываем доставлять те пакеты которые пропросит.

Итак скомпилировали.

Конфигурационные файлы находятся на /usr/local/etc

Редактируем sm.xml

<id>jabber.domain.local</id> - имя сервера типа jabber.google.com

…..

<driver>mysql</driver>

….

Настройка подключения к базе

<mysql>

<!-- Database server host and port -->

<host>localhost</host>

<port>3306</port>

<!-- Database name -->

<dbname>jabberd2</dbname>

<!-- Database username and password -->

<user>имя</user>

<pass>пароль</pass>

Настройка LDAP сервера и авторизации через LDAP

<ldapvcard>

<!-- LDAP server host and port (default: 389) -->

<uri>ldap://localhost</uri>

<!-- DN to bind as for searches. If unspecified, the searches will be done anonymously. -->

<binddn>cn=root</binddn>

<bindpw>password</bindpw>

<!-- see authreg.ldapfull int c2s.xml for description. -->

<type>ldap</type>

<!-- LDAP attribute that holds the user ID (default: uid) -->

<uidattr>cn</uidattr>

<objectclass>person</objectclass>

<pwattr>userPassword</pwattr>

Определяем где искать наших пользователей и группы

<basedn realm='proxy.spii.rzdp'>o=Organization,dc=domain,dc=local</basedn>

<!-- attribute that holds published group name or id,

jabberPublishedGroup if not set -->

<groupattr>jabberPublishedGroup</groupattr>

….

<!-- base for searches for group id to group name mappings -->

<basedn realm='proxy.spii.rzdp'>o=Jabber,dc=samara,dc=ru</basedn>

<!-- what objectclass to search, jabberGroup by default -->

<objectclass>person</objectclass>

<!-- what attribute to search, cn by default -->

<idattr>cn</idattr>

<!-- attribute with text group name, description by default -->

<nameattr>cn</nameattr>

</mapped-groups>

Теперь редактируем c2s.xml

Заметьте что эти данные должны совпадать во всех 4-х файлах конфигурации. По умолчанию так и настроено, но мало ли что вы сделает шаловливыми ручками.

<!-- IP/port the router is waiting for connections on -->

<ip>127.0.0.1</ip> <!-- default: 127.0.0.1 -->

<port>5347</port> <!-- default: 5347 -->

 

Следующие данные в этом файле. IP адрес и порт на которых будет работать сервер

<id register-enable='true'>jabber.domain.local</id>

….

<ip>IP адрес</ip>

<!-- Port to bind to, or 0 to disable unencrypted access to the server (default: 5222) -->

<port>5222</port>

Указываем, что для авторизации используем LDAP сервер

<authreg>

<!-- Backend module to use -->

<module>ldap</module>

И его настройки

<!-- LDAPFULL module configuration -->

<ldapfull>

<!-- LDAP server host and port (default: 389) -->

<uri>ldap://localhost/</uri>

<binddn>cn=root</binddn>

<bindpw>password</bindpw>

<type>ldap</type>

<uidattr>cn</uidattr>

<objectclass>person</objectclass>

<pwscheme>bind</pwscheme>

<basedn>dc=domain,dc=local</basedn>

</ldapfull>

<ldap>

<host>jabber.domain.local</host>

<port>389</port>

<v3/>

<binddn>cn=root</binddn>

<bindpw>password</bindpw>

<!-- LDAP attribute that holds the user ID (default: uid) -->

<uidattr>cn</uidattr>

<query>(&amp;(cn=%u)(objectClass=person))</query>

<basedn>dc=domain,dc=local</basedn>

</ldap>

 

Вот и вся настройка. Остальные файлы оставляем без изменений

Настройка MySQL сервера

Теперь так как мы в настройках указали что у нас есть база mysql, то видимо структуру этой базы надо создать

В инсталяционном пакете в папке tools есть файл db-setup.mysql

Запустим его

Mysql

.\ db-setup.mysql

Если все прошло без ошибок то структура базы создана.

Теперь отладка

Проверять очень просто. Каждая часть может запускаться отдельно

Например Мы хотим проверить работы sm модуля и запускаем sm –D

Смотрим какие ошибки и отлаживаем.

Также можно запускать c2s –D или router –D

После того как все модули отлажены то можно запускать jabberd –D.

Я бы добавил еще фильтр по словам fail

 

jabberd –D|grep fail

 

А потом когда настройка станет еще тоньше написал бы

 

jabberd –D|grep user

 

 

Кстати совсем забыл подсказать расскоментровать строку в файле sm.xml

<auto-create/>

 

Иначе Вы получите интересную ситуацию, когда ошибки авторизации не будет, но в онлайн состояние jabber клиентом вы войти не сможете.

 

 

Все, после этого когда Вы смогли клиентом подключится к jabber серверу, можно написать init скрипт. У меня он выглядит так.

 

#!/bin/bash

progs="sm router c2s s2s"

progsPath="/usr/local/bin"

confPath="/usr/local/etc"

pidPath="/usr/local/lib/jabberd/pid"

logPath="/var/log/jabberd2"

 

case "$1" in

start)

echo "Initializing jabberd2 processes ..."

for prog in ${progs}; do

if [ $( pidof -s ${prog} ) ]; then

echo -ne "\tprocess [${prog}] already running"

sleep 1

continue

fi

echo -ne "\tStarting ${prog}... "

rm -f ${pidPath}/${prog}.pid

args="-c ${confPath}/${prog}.xml"

echo

sleep 1

done

;;

stop)

echo "Terminating jabberd2 processes ..."

for prog in ${progs} ; do

killall ${prog}

# if [ -f ${pidPath}/${prog}.pid ]; then

# echo -ne "\tStopping ${prog}... "

# kill $(cat ${pidPath}/${prog}.pid)

# echo

# sleep 1

# fi

rm -f ${pidPath}/${prog}.pid

done

;;

restart)

$0 stop

sleep 3

$0 start

;;

*)

echo "Usage: $0 {start|stop|restart}"

exit 1

;;

esac

exit 0

 

Размещаем его в /etc/init.d/jabberd

Chmod 755 /etc/init.d/jabberd

update-rc.d jabberd defaults

update-rc.jabberd enable

И теперь у нас джаббер сервер стартует автоматически при перезагрузке системы

 

 

Запустим /etc/init.d/jabberd start

 

 

 

 

Настройка конференции еще проще

Скачиваем http://download.gna.org/mu-conference/

make

После завершения сборки просто копируем получившийся исполняемый файл в полагающееся ему место:

cp ./src/mu-conference /usr/local/bin

Копируем конфигурационный файл в общий каталог:

cp ./muc-default.xml /usr/local/etc/mu-conference.xml

 

Редактируем этот файл

 

<name> conference.domain.local </name> <!-- the jid of your component -->

<host> conference.domain.local </host> <!-- this should be the same as above -->

<ip>localhost</ip> <!-- adress of the jabber server -->

<port>5347</port> <!-- port used to connect the service to the jabber server -->

<secret>secret</secret> <!-- secret shared with the jabber server -->

<spool>/var/spool/jabber-muc/rooms</spool> <!-- directory containing the rooms data -->

<logdir>/var/log/jabberd2</logdir> <!-- directory containing the debug log (the file is called mu-conference.log) -->

<pidfile>/usr/local/lib/jabberd/pid/mu-conference.pid</pidfile> <!-- file that will contain the PID of the process -->

 

Проверяем работу

/usr/local/bin/mu-conference -c /usr/local/etc/mu-conference.xml

 

Если ошибок нет, то мы молодцы

Пишем init скрипт

#!/bin/bash

#export PATH=/sbin:/bin:/usr/sbin:/usr/local/bin

 

progPath="/usr/local/bin/mu-conference"

confPath="/usr/local/etc/mu-conference.xml"

pidPath="/usr/local/lib/jabberd/pid/mu-conference.pid"

 

case "$1" in

start)

echo "Initializing MU-Conference processes ..."

if [ -f ${pidPath} ]; then

echo -ne "\tMU-Conference already running"

exit 1

fi

echo -ne "\tStarting MU-Conference... "

rm -f ${pidPath}

/bin/su -s /bin/bash -l jabber -c "${progPath} -c ${confPath} -B" > /dev/null

;;

stop)

echo "Terminating MU-Conference processes ..."

if [ -f ${pidPath} ]; then

echo -ne "\tStopping MU-Conference... "

kill $(cat ${pidPath})

rm -f ${pidPath}

fi

;;

restart)

$0 stop

sleep 3

$0 start

;;

*)

echo "Usage: $0 {start|stop|restart}"

exit 1

;;

esac

 

exit 0

 

Сохраняем его в /etc/init.d/mu-conference

Даем права chmod 755 /etc/init.d/mu-conference

update-rc.d mu-conference defaults

update-rc.d mu-conference enable

запускаем её

/etc/init.d/mu-conference start

Конференция сделана