Возня с Jabber сервером. часть I
Вспоминаю ранее проделанное. А также попытка наконец то все упорядочить и довести до конца. Имеется несколько распространенных Jabber серверов. Ранее мною немного опробованные.
Jabber – открытый протокол для быстрого обмена сообщениями и информацией о присутствии между любыми двумя абонентами Интернет.
Jabber-серверы:
1.Ejabberd – свободный распределённый и отказоустойчивый Jabber-сервер. Написан на языке Erlang. Язык Erlang предназначен для создания отказоустойчивых распределенных приложений. Результат – ejabberd может работать в кластере, когда один домен физически могут обслуживать несколько серверов, синхронизируя информацию через единую базу данных. Откомпилированные приложения выполняются в Erlang (JAM) emulator, этим он несколько похож на Java.
Маленькая справка: Erlang (Эрла́нг) – функциональный язык программирования, позволяющий писать программы для разного рода распределённых систем. Разработан и поддерживается компанией Ericsson. Язык включает в себя средства порождения параллельных процессов и их коммуникации с помощью посылки асинхронных сообщений. Программа транслируется в байт-код, исполняемый виртуальной машиной, что обеспечивает переносимость.
Кратко формулу языка можно выразить как Erlang=функциональный язык+процессы.
Язык динамический. Синтаксис наследован от Prolog. Компактен, содержит минимум конструкций, лёгок для освоения, но не примитивен.
К услугам программиста – модули, полиморфные функции, сопоставление с образцом, анонимные функции, условные конструкции, структуры, обработка исключений, оптимизация хвостовой рекурсии. В общем базовый арсенал современных функциональных языков.
Отсюда вытекает основной недостаток – необходимо разбираться с этим языком,
хотяб на понятийном уровне.
В данном сервере присутствует – Веб интерфейс администратора для настройки.
2.Openfire (ранее Wildfire) – свободный многофункциональный и отказоустойчивый Jabber-сервер, написанный на Java. Занимал первое место в рейтинге по возможностям на jabber.org (по состоянию рейтинга на конец марта 2007 )
Справка: Сервер OpenFire (до февраля 2007 года – WildFire) – самый простой в установке, так как для его запуска требуется лишь наличие Java Runtime Environment. Да, он написан на Java, но сегодня это никого уже пугать не должно. Для тех, кто не хочет использовать внешнюю базу данных (MySQL, Postgres, Microsoft SQL Server, DB2), в наличии есть встроенная HSQLDB. Все настройки осуществляются через удобный веб-интерфейс. В установке по умолчанию OpenFire имеет большое количество возможностей, остальное (Asterisk, широковещательные сообщения, IM-шлюз, контент-фильтр и прочее) реализуется посредством плагинов.
3. DJabberd – высоко скоростной расширяемый каркас для создания Jabber-серверов, разработанный компанией Danga Interactive. Применяется для общения пользователей ЖЖ.
4. jabberd и jabberd2 – очень хорошие серверы, отличаются стабильностью в работе, написаны на языке С. По возможностям эти серверы являются лишь базой, поскольку большая их часть (вроде конференций, поиска пользователей и некоторых других) реализована посредством плагинов. Чтобы заставить работать некоторые комбинации, придется изрядно попотеть. К тому же версия 1.x уже практически не развивается.
Но в качестве корпоративного сервера в защищенной сети – jabberd1 – идеальное решение. Простота и быстрота развертываня.
Меня интересует возможности миграции. Попробую сохраняя пользователей – обновлять версии. Пока в 1 ой ветке.
Начинаю с установки сервера jabberd 1 ой ветки.
Уже стоит и работает довольно давно – jabberd 1.4.3. Без шифрования. Пользователи хранятся в виде файлов вида *.xml.
Качаем дистрибутив. Где не помню, можа погуглить. Многие ссылки на момент написания поста, – не работали. В инете найти я думаю можа.
Скачали jabberd-1.4.3.1.tar.gz.
Соглассно инструкции по установки: распакуем содержимое архива.
Копируем данное содержимое в место предстоящей дислокации нашего сервера
Я скопирнул – в /usr/local/jabber.
Далее – Согласно описанию:
To build, run «./configure» and then type «make»
Edit jabber.xml, replace «localhost» by the host name of your server throughout the file. Edit other values as desired.
Для запуска: ./jabberd/jabberd -h your.domain.name &
Для отладки: for lots of debug output, use the -D flag
Мои действия :
#./configure
А в ответ :
Searching for SSL… Disabled.
Support for IPv6… Disabled.
Getting pth settings…./configure: line 97: pth-config: команда не найдена
./configure: line 98: pth-config: команда не найдена
./configure: line 99: pth-config: команда не найдена
./configure: line 100: pth-config: команда не найдена ____________________________________________________________ GNU Pth (1.4.0 or newer) is not currently installed. GNU Pth is required for building Jabberd. ____________________________________________________________ Error.
You may now type ’make’ to build your new Jabber system.
Пробую на халяву
#yum install pth
……………………………..
Installed: pth.i386 0:2.0.7-3 Complete!Конфигурить не получается. Те же ошибки.
Ставим с исходников. Гуглим. И находим.
Распаковываем.
# ./configure
# make
# make install
Заходим в директорию – /usr/local/jabber
[root@nstest jabber]# ./configure
Running Jabber Configure ========================
Searching for SSL… Disabled.
Support for IPv6… Disabled.
Getting pth settings…Done.
Setting Build Parameters…Done.
Generating Settings Script… Done.
You may now type ’make’ to build your new Jabber system.
#make
……………………….
[root@nstest jabber]# pwd /usr/local/jabber
ls -la ./jabberd/
ls -l /usr/local/jabber/
итого 228
-rwxr–r-x 1 1000 1000 5865 Мар 4 2005 configure
drwxr–r-x 3 1000 1000 4096 Ноя 12 2003 cygwin
drwxr–r-x 2 1000 1000 4096 Фев 6 18:45 dialback
drwxr–r-x 2 1000 1000 4096 Фев 6 18:45 dnsrv
-rw-r–r– 1 root root 3490 Фев 6 21:32 error.log
-rwxr–r-x 1 1000 1000 1869 Ноя 13 2003 generateSSLkey
drwxr–r-x 4 1000 1000 4096 Фев 6 18:45 jabberd
-rw——- 1 root root 5 Фев 6 21:28 jabber.pid
-rw-r—– 1 root root 23351 Фев 6 21:28 jabber.xml
-rw-r—– 1 bezdr bezdr 23619 Фев 6 14:45 jabber.xml.okna.orig
-rw-r—– 1 root root 23347 Фев 6 16:23 jabber.xml.okna.test2
-rw-r—– 1 root root 23476 Фев 6 15:17 jabber.xml.orig
-rw-r—– 1 root root 23831 Фев 6 16:14 jabber.xml.test
-rw-r—– 1 root root 23278 Фев 6 19:42 jabber.xml.work
drwxr–r-x 3 1000 1000 4096 Фев 6 18:45 jsm
drwxr–r-x 2 root root 4096 Фев 6 18:51 jud
drwxrwSr-x 2 1027 1102 4096 Фев 6 15:54 jud-ansi-c
-rwxr–r-x 1 1000 1000 2321 Ноя 3 2003 Makefile
-rwx—— 1 root root 337 Фев 6 18:45 platform-settings
drwxr–r-x 2 1000 1000 4096 Фев 6 18:45 pthsock
-rw-r–r– 1 1000 1000 1644 Ноя 13 2003 README
-rw-r–r– 1 root root 1573 Фев 6 21:32 record.log
drwxrwxrwx 4 1000 1000 4096 Фев 6 20:28 spool
-rw-r–r– 1 1000 1000 3274 Ноя 6 2003 UPGRADE
drwxr-xr-x 2 root root 4096 Фев 6 18:50 worklib
drwxr–r-x 2 1000 1000 4096 Фев 6 18:45 xdb_file
Собственно усе. Теперь настраиваем сам сервер.
Для настройки правим конфигурациоонный файл – jabber.xml.
Маленькое уточнение библиотеки скопированы :
ls -l /usr/lib/jabber/ итого 1596 -rwxr-xr-x 1 root root 130434 Мар 4 2005 dialback.so
-rwxr-xr-x 1 root root 94442 Мар 4 2005 dnsrv.so
-rwxr-xr-x 1 root root 1156276 Мар 4 2005 jsm.so
-rwxr-xr-x 1 root root 112603 Мар 4 2005 jud.so
-rwxr-xr-x 1 root root 58237 Мар 4 2005 pthsock_client.so
-rwxr-xr-x 1 root root 48011 Мар 4 2005 xdb_file.so
из папок jabberd в диррктории /usr/local/jabber. Список приведен выше.
Соответствующий путь надо было указать в конфигурационном файле.
С этими библиотеками jabber работать не смог . Выдавалась следующая ошибка :
jabber]# [1]+ Ошибка сегментирования /usr/local/jabber/jabberd/jabberd
Это при попытке зарегистрировать пользователя.
А также :
#Memory Leak! [pmalloc received NULL pool, unable to track allocation, exiting.
При копировании вместо скомпелированных библиотек, скопировал ранее работавшие на сервере Slackware11. (в папку /usr/lib/jabber)
Сервер у меня заработал. При регистрации ошибок не возникало.
Скорее всего проблемы с библиотеками . Версия этого сервера старая, так что скорее всего она не совместима с новыми дистрибутивами, тем более Fedor-ой. Разбираться не хотелось..
Последний стабильный релиз – jabberd14-1.6.1.1 от 22-Jul-2007.
Перед настройкой конфигурационного файла.
Первым делом убедитесь что ваш компьютер отзывается в DNS. Основные вещи необходимо проверить.
Привожу свой конфиг частями:
jabber.mainnet.ru – мой сервер
users.jabber.mainnet.ru – для поиска пользователей.
<host>jabber.mainnet.ru</host>
Еще не забудьте разрешить заводить пользователей, для этого откомментируйте:
<register notify=»yes»>
<instructions>Choose a username and password to register with this server.</instructions>
<name/>
<email/>
Здесь нужно дописать адреса пользователей для оповещения.
</register>
В строке определяется обычный (не ssl) порт на котором будет работать jabberd
<ip port=»5222″/>
Для активизации модуля jud, раскоментируйте строчку в секции <strong>brows</strong>:
<service type=»jud» jid=»users.jabber.mainnet.ru» name=»Jabber User Directory»>
<ns>jabber:iq:search</ns>
<ns>jabber:iq:register</ns>
</service>
а в секцию <strong>jabber</strong> внесите вот такие:
<service id=»jud»>
<host>users.jabber.mainnet.ru</host>
<load><jud>/usr/lib/jabberd/jud.so</jud></load>
(Все библиотеки я перенес в /usr/lib/jabber)
<jud xmlns=»jabber:config:jud»>
<vCard>
<FN>Local User Directory</FN><DESC>This service provides a simple user directory service.</DESC>
<URL>http://nsnew.mainnet.ru/</URL>
</vCard>
</jud>
</service>
Для отладк:
Запускаем сервер с ключом /usr/local/jabber/jabberd/jabberd -D&
Будет выводить сообщения на консоль. Очень помогает при отладке.
Проверяем доступность по порту.
#telnet nsnew.mainnet.ru 5222
netstat -na | grep 5222
netstat -l –inet
Для возможности поиска пользователей Jabber сервера. Не обходимо установить
следующий модуль. — JUD – Jabber User Directory
http://jud.jabberstudio.org
Распаковываем в диркторию Jabber в папку jud. Заходим в папку jud.
#make
создается файл jud.so.
Как я уже писал выше, все файлы *.so я взял со старого сервера на Слаке.
В redmi было написано:
Then add the following to your jabber.xml configuration file:
<service id=»jud»>
<host>jud.localhost</host>
<load><jud>./jud/jud.so</jud></load>
<jud xmlns=»jabber:config:jud»>
<vCard>
<FN>Local User Directory</FN>
<DESC>This service provides a simple user directory service.</DESC>
<URL>http://jud.jabberstudio.org/</URL>
</vCard>
<!– Enable full user listing retrieval by browsing to
‘jud.localhost/users’ with your Jabber client.
Definitely not suitable for large user bases.
<userbrowse/> –>
<!– You only need this section if you want customized
instructions or database fields
<register>
<instructions>Fill in the fields to register</instructions>
<name/>
<age/>
<colour/>
</register> –>
<!– You only need this section if you want to customize
the search dialog
<search>
<instructions>Enter values to search</instructions>
<age/>
<colour/>
</search> –>
</jud>
</service>
Переброс пакетов в фаерволе можно выполнить вот так:
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp
-s 150.252.139.80 -d 56.224.244.80 –dport 5222 -j DNAT
–to-destination 172.16.5.253:5222
Дистрибутивы и доки:
http://jabberd.org/
В качестве клиентов я использовал Miranda 0.3.2 , Psi 0.10. Для того чтобы можно было искать пользователей, после регистрации пользователя необходимо заполнить Vcard. В миранде – это PersonalvCard.
Рисунок 1.

#################################
Рисунок 2.

Файлы логинов вида login.xml ( ivanov.xml ) хранятся в папке spool. У меня
/usr/local/jabber/spool
#ls -la
jud -папка где хранятся данные- для поиска зарегистрированных пользователей
сервера Jabber. Файл global.xdb – список контактов. Данные в нем в формате xml.
По мере регистрации новых пользователей, и внесения данных в vcard, данные заполняются постепенно в global.xdb.
jabber.mainnet.ru – папка где хранятся файлы вида *.xml , в которых данные логинов.
Пароли, логин, почта …..
Папки jud и jabber.mainnet.ru должны вроде создаваться сами у меня такого не было, поэтому создал вручную.
Есть возможность конференций - https://gna.org/projects/mu-conference/
Пока не пробовал. Попробую чуть позже.
Февраль 7, 2008 в 3:05 пп
Пока все !