UMGUM.COM (лучше) 

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

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

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

OS: Debian GNU/Linux Lenny.

Помнится, давно-давно, когда я впервые распробовал и начал использовать 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/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

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

# cat /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/bin/mu-conference -c /etc/mu-conference.xml

Создадим по адресу "/etc/init.d/mu-conference" скрипт управление сервисом:

#!/bin/bash

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

progPath="/usr/bin/mu-conference"
confPath="/etc/mu-conference.xml"
pidPath="/var/run/mu-conference/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

Устанавливаем для управляющего скрипта разрешение на исполнение:

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

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

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

Смотрим журнал и начинаем пользоваться сервисом.

Для того, чтобы наш управляющий скрипт отрабатывался при исполнении операционной системой "run level" разных уровней, создаем соответствующие символические ссылки (думаю, что этих четырёх уровней хватит):

# ln -s /etc/init.d/mu-conference /etc/rc2.d/S86mu-conference
# ln -s /etc/init.d/mu-conference /etc/rc3.d/S86mu-conference
# ln -s /etc/init.d/mu-conference /etc/rc4.d/S86mu-conference
# ln -s /etc/init.d/mu-conference /etc/rc5.d/S86mu-conference

Стоит обратить внимание на то, чтобы мы не заняли уже используемый порядковый номер, определяющий очерёдность запуска скриптов в директории. В нашем случае номер "86" оказался не занятым.

Сервис работает для всех. Если жалко или просто не нужно, то можно фильтровать обращения к модулям 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"/>


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


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