FreeSource : AltLinux/Policy/Jabber

Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Предлагаю вниманию интересующихся некий примерный проект того, как планируется организовывать инфраструктуру сборки jabber-сервисов в ALT:

1. Серверы


Есть серверы – ejabberd, jabberd2, возможно wildfire. Каждый лежит в своем пакете, ни от кого не зависит. Каждый можно поставить абсолютно отдельно, без всего. Ничего, кроме себя, опять же, они не провайдят.

2. Транспорты


Есть транспорты, которые являются отдельными сервисами с точки зрения системы (т.е. имеют отдельный собственный Sys V-init). Предпочтительно иметь в названии транспорта префикс “jabber” (jabber-jit, jabber-mrim, jabber-pyicqt и т.п.) – и в названии пакета, и в названии сервиса. Транспорт точно так же, никого не требует, никого не провайдит, кроме себя.

Rationale: транспорт не должен зависеть от сервера, т.к. сервер может не быть в одном окружении с транспортом (на одной физической или виртуальной машине).

3. Теоретическое обоснование их связи


Транспорты и серверы общаются между собой через протокол accept-connect через TCP/IP. Все иные варианты взаимодействия использовать рекомендуется не рекомендуется, т.к. они менее универсальны и зачастую не позволяют разнести сервер с транспортом по сети.

Есть некая управляющая система (по механизму действия схожая с control или alternatives), которая знает о том, что есть те и другие и связывает их между собой. У системы есть один вызов типа «сделать все хорошо», который вызывается при:


«Сделать все хорошо» включает в себя прописывание всех транспортов по все серверы, если только они оттуда не были принудительно выкинуты (прописываемые строчки закомментированы).

Есть некая сложность в том, что во всех известных мне серверах (jabberd1.4, jabberd2, ejabberd) нет нормальной модуляризации конфига с возможностью подключения модуля через установку дополнительного кусочка конфига в какой-то каталог, а в головном конфиге иметь что-то вроде «include тот-каталог/*". Таким образом, управляющая система должна будет влезать в конфиги этих серверов и что-то исправлять (дописывать) в них вручную, при этом, разумеется, зная синтаксис каждого такого конфига.

4. Практический ход их связи


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


Задачи управляющей системы:

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
...

7. Пользователи


В соответствии с [/Altlinux / Policy / Uid Gid], предлагается для каждого сервера и компонента иметь отдельного псевдопользователя, соответствующего имени пакета. Для серверов, как правило, имеющих в своем названии “jabber” это будет просто ejabberd, jabberd14, jabberd2 и т.п., для компонентов предлагается использование префикса “jabber-» – jabber-jit, jabber-mrim, jabber-muc, jabber-pyicq-t и т.п.