[devel] I: jabber services
Mikhail Yakshin
=?iso-8859-1?q?greycat_=CE=C1_altlinux=2Eorg?=
Пн Мар 5 16:24:49 MSK 2007
Приветствую!
Предлагаю вниманию интересующихся некий примерный проект того, как
планируется организовывать инфраструктуру сборки jabber-сервисов в ALT:
1. Серверы
Есть серверы - ejabberd, jabberd2, возможно wildfire. Каждый лежит в
своем пакете, ни от кого не зависит. Каждый можно поставить абсолютно
отдельно, без всего. Ничего, кроме себя, опять же, они не провайдят.
2. Транспорты
Есть транспорты, которые являются отдельными сервисами с точки зрения
системы (т.е. имеют отдельный собственный SysV-init). Предпочтительно
иметь в названии транспорта префикс "jabber" (jabber-jit, jabber-mrim,
jabber-pyicqt и т.п.) - и в названии пакета, и в названии сервиса.
Транспорт точно так же, никого не требует, никого не провайдит, кроме себя.
Rationale: транспорт не должен зависеть от сервера, т.к. сервер может не
быть в одном окружении с транспортом (на одной физической или
виртуальной машине).
3. Теоретическое обоснование их связи
Транспорты и серверы общаются между собой через протокол accept-connect
через TCP/IP. Все иные варианты взаимодействия использовать
рекомендуется не рекомендуется, т.к. они менее универсальны и зачастую
не позволяют разнести сервер с транспортом по сети.
Есть некая управляющая система (по механизму действия схожая с control
или alternatives), которая знает о том, что есть те и другие и связывает
их между собой. У системы есть один вызов типа "сделать все хорошо",
который вызывается при:
* инсталляции нового сервера
* инсталляции нового транспорта
"Сделать все хорошо" включает в себя прописывание всех транспортов по
все серверы, если только они оттуда не были принудительно выкинуты
(прописываемые строчки закомментированы).
Есть некая сложность в том, что во всех известных мне серверах
(jabberd1.4, jabberd2, ejabberd) нет нормальной модуляризации конфига с
возможностью подключения модуля через установку дополнительного кусочка
конфига в какой-то каталог, а в головном конфиге иметь что-то вроде
"include тот-каталог/*". Таким образом, управляющая система должна будет
влезать в конфиги этих серверов и что-то исправлять (дописывать) в них
вручную, при этом, разумеется, зная синтаксис каждого такого конфига.
4. Практический ход их связи
При инсталляции нового транспорта нужно сгенерировать конфиг, в котором
есть как минимум:
* номер порта (статический, заранее присвоенный в рамках ALT)
* hostname (генерящийся из заранее присвоенного префикса типа "mrim." +
hostname)
* генерящийся случайно пароль
Задачи управляющей системы:
1) получить от транспорта эти данные из конфига (очевидно, система не
может знать форматы конфигов всех возможных транспортов, для этого нужен
маленький адаптер со стороны транспорта)
2) поправить конфиг сервера - подключить этот по полученным данным новый
транспорт или проверить, что он уже подключен (опять же, система не
занимается этим сама - сервер несет внутри себя некий скрипт-адаптер).
Т.е. управляющая система - это лишь некий диспетчер, который получает
фиксированный набор данных от транспорта и передает его серверу.
5. Реализация
1) генерящийся конфиг со стороны транспорта (в postinstall)
2) адаптер со стороны транспорта - скрипт а ля pkgconfig, с опциями
--host, --port, --password.
3) адаптер со стороны сервера - скрипт, которому передаются такими же
опциями --host= --port= --password= параметры; после запуска скрипта
появляется некая уверенность в том, что данный транспорт подключен к
данному серверу.
4) скрипт-диспетчер "сделать все хорошо" (в postinstall всех транспортов
и серверов) - запускает все возможные комбинации адапетров серверов и
транспортов и пихает их вводы-выводы друг дружке.
6. Директории
Все серверы и транспорты имеют собственные директории логов / спулов /
lib и т.п., в соответствии с именем пакета. Рекомендуется использовать
что-то вроде:
/var/log/ejabberd
/var/log/jabber-pyicqt
/var/log/jabber-mrim
...
/var/lib/ejabberd
/var/lib/jabber-pyicqt
/var/lib/jabber-mrim
...
/var/spool/ejabberd
/var/spool/jabber-pyicqt
/var/spool/jabber-mrim
...
Буду рад услышать комментарии, мысли. Если принципиальных возражений нет
- то готов буду скоро предоставить реализацию этой идеи в виде скриптов.
--
С уважением, Михаил Якшин
Подробная информация о списке рассылки Devel