From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <45EC1A21.2070602@altlinux.org> Date: Mon, 05 Mar 2007 16:24:49 +0300 From: Mikhail Yakshin User-Agent: Thunderbird 1.5.0.8 (X11/20061205) MIME-Version: 1.0 To: ALT Devel discussion list Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Subject: [devel] I: jabber services X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Mar 2007 13:27:22 -0000 Archived-At: List-Archive: List-Post: Приветствую! Предлагаю вниманию интересующихся некий примерный проект того, как планируется организовывать инфраструктуру сборки 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 ... Буду рад услышать комментарии, мысли. Если принципиальных возражений нет - то готов буду скоро предоставить реализацию этой идеи в виде скриптов. -- С уважением, Михаил Якшин