Несмотря на то, что большой популярностью пользуется ejabber сервер, для меня более комфортным оказалось использование сервера jabberd2. Его проще отлаживать, его структура понятна, не надо скачивать монстроподобный erlang. Для небольших jabber серверов я считаю jabberd2 более чем достаточен.
Скачиваем последний пакет с сайта https://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>(&(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.d jabberd enable
И теперь у нас джаббер сервер стартует автоматически при перезагрузке системы
Запустим /etc/init.d/jabberd start
Настройка конференции еще проще
Скачиваем https://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
Конференция сделана
|