UMGUM.COM (лучше) 

Jabberd 2 + MU Conference ( Дополнение функционала XMPP сервера Jabberd 2 конференциями. )

13 января 2011  (обновлено 15 августа 2016)

Эта публикация отнесена в архив. Она неактуальна.

OS: Debian Linux Lenny/Squeeze.
Application: XMPP.

Помнится, давно-давно, когда я впервые распробовал и начал использовать Jabberd2, на сайте http://codex.xiaoka.com/wiki/ была детальная инструкция по сборке и "прикручиванию" MU-Conference к IM-серверу. Сейчас её нет. Не знаю, с чего бы это, может быть, разработчики не сошлись в каких-то там своих взглядах на методы реализации чего-нибудь. Как бы то ни было, придётся пройти весь путь установки самостоятельно на ощупь.

Устанавливаем необходимые библиотеки и утилиты:

# aptitude install linux-headers-`uname -r` pkg-config make binutils gcc libc6-dev libglib2.0-dev libexpat-dev libidn11-dev

Забираем с сайта разработчиков архив с исходными кодами примерно отсюда:

http://download.gna.org/mu-conference/

В моём случае это была стабильная версия "0.8":


# cd /usr/src
# wget http://download.gna.org/mu-conference/mu-conference_0.8.tar.gz
# tar -xvf mu-conference_0.8.tar.gz

Переходим в директорию с исходными кодами:

# cd ./mu-conference_0.8

Конфигурирования, как такового, не предусмотрено и в результате работы компилятора получается всего один исполняемый файл. Потому, средства контроля за установкой приложений применять не будем. Просто компилируем:

# make

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

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

Создаем группу и пользователя от имени которых будем запускать наш сервис конференций:

# groupadd jabber
# useradd --home-dir /var/jabber --shell /bin/false --gid jabber jabber

Создаем директории, необходимые для работы сервиса, и приводим в соответствие права доступа к ним:

# mkdir -p /var/spool/mu-conference/rooms
# chown -R jabber:jabber /var/spool/mu-conference/rooms

# mkdir -p /var/log/mu-conference
# chown -R jabber:jabber /var/log/mu-conference

# mkdir -p /var/run/mu-conference
# chown -R jabber:jabber /var/run/mu-conference

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

# cp ./muc-default.xml /etc/mu-conference.xml

Корректируем его, доводя примерно до следующего вида, следуя подсказкам разработчиков в виде комментариев:

# vi /etc/mu-conference.xml

<jcr>
  <name>conference.example.com</name>
  <host>conference.example.com</host>
  <ip>127.0.0.1</ip>
  <port>5347</port>
  <secret>strongSecretString</secret>

  <spool>/var/spool/mu-conference/rooms</spool>
  <logdir>/var/log/mu-conference</logdir>
  <pidfile>/var/run/mu-conference/mu-conference.pid</pidfile>

  <loglevel>124</loglevel>

    <conference xmlns="jabber:config:conference">
      <public/>
      <vCard>
        <FN>Public Chatrooms</FN>
        <DESC>This public chatrooms.</DESC>
        <URL>http://www.example.com/</URL>
      </vCard>
      <history>200</history>
      <logdir>/var/log/mu-conference/</logdir>
      <logsubdirs/>
      <notice>
        <join>has become available</join>
        <leave>has left</leave>
        <rename>is now known as</rename>
      </notice>
      <sadmin>
        <user>admin@example.com</user>
      </sadmin>
      <!-- <dynamic/> -->
      <persistent/>
      <locknicks/>
      <roomlock/>
      <!-- <hideempty/> -->
    </conference>
</jcr>

Запускаем сервис для тестирования функциональности:

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

Создадим скрипт управление сервисом:

# vi /etc/init.d/mu-conference && chmod ugo+x /etc/init.d/mu-conference

#!/bin/bash

### BEGIN INIT INFO
# Provides:          mu-conference
# Required-Start:    $local_fs $syslog $network
# Required-Stop:     $local_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script management of mu-conference
# Description:       Script management of mu-conference
### END INIT INFO

EXEC="/usr/local/bin/mu-conference"
CONF="/usr/local/etc/mu-conference.xml"
PID="/var/run/mu-conference/mu-conference.pid"

case "$1" in
  start)
    echo "Initializing MU-Conference processes ..."

    if [ $( pidof -s "mu-conference" ) ]; then
      echo -e "\tMU-Conference already running"
      exit 1
    fi

    echo -e "\tStarting MU-Conference... "
    rm -f ${PID}
    /bin/su -s /bin/bash -l jabber -c "${EXEC} -c ${CONF} -B" > /dev/null
  ;;
  stop)
    echo "Terminating MU-Conference processes ..."
    if [ -f ${PID} ]; then
      echo -e "\tStopping MU-Conference... "
      killall --signal KILL mu-conference
#      kill $(cat ${PID})
      rm -f ${PID}
    fi
  ;;
  restart)
    $0 stop
    sleep 3
    $0 start
  ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
  ;;
esac
exit 0

Пробуем запустить службу:

# /etc/init.d/mu-conference start

На самом деле запуск сервиса конференций для XMPP-сервера в отрыве от самого XMPP-сервера занятие бесмысленное, так-что мне представляется естественным разместить ссылку на запуск и остановку сервиса в скрипт управления самим XMPP-сервером, например таким образом:

# vi /etc/init.d/jabberd2

....
  start)
    echo "Initializing jabberd2 processes ..."
    ....
    /etc/init.d/mu-conference start
  ;;
  stop)
    echo "Terminating jabberd2 processes ..."
    ....
    /etc/init.d/mu-conference stop
  ;;
....

Сервис работает для всех. Если жалко или просто не нужно, то можно фильтровать обращения к модулям Jabber сервиса (а сервисы у нас работают именно в виде модулей). Для ограничения доступа к сервисам редактируем конфигурационный файл "/etc/jabberd/router-filter.xml", размещая в блоке "" следущее:

  <!-- don't allow use MU-Conference non local users-->
  <rule from="*@example.com" to="conference.example.com"/>
  <rule error="not-allowed" from="*" to="conference.example.com" what="presence" log="yes"/>

Для того, что бы не получать сильно разросшиеся файлы журналов, настроим их ротацию.

Устанавливаем приложение ротации текстовых файлов с одновременным их сжатием:

# aptitude install logrotate gzip

Создаем конфигурационный файл ротации журнальных файлов для Jabberd2:

# mkdir -p /etc/logrotate.d
# vi /etc/logrotate.d/mu-conference

# шаблон указывающий объекты подлежащие "ротации"
/var/log/mu-conference/*.log {
  # размер журнального файла, после которого он обрабатывается утилитой
  size 10M
  # отсутствие файла не вызывает ошибку
  missingok
  # количество хранимых отработанных резервных копий
  rotate 10
  # указание сжимать отрабатываемые резервные копии
  compress
  # указание не сжимать первую резервную копию, делать это при повторном проходе
  delaycompress
  # указание не отрабатывать пустые файлы
  notifempty
  # добавлять к наименованию файла резервной копии даты в формате "-YYYYMMDD"
  dateext
  # задать права доступа, владельца и группу создаваемого журнального файла
  create 640 jabber jabber
}

Проверяем корректность конфигурационного файла:

# logrotate -d /etc/logrotate.d/mu-conference


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )