[Comm] ejabberd

Вадим Илларионов =?iso-8859-1?q?master_=CE=C1_usib=2Eirkps=2Eru?=
Пт Июн 24 13:14:00 MSD 2005


В сообщении от Пт 24 Июнь 2005 16:17 Mike Lykov написал(a):
> В сообщении от Пятница 24 Июнь 2005 12:10 Вадим Илларионов написал:
> > Покуда не пробовал. Хотя, видимо, стОит. После выходных постараюсь себя
> > заставить.
>
> Кстати, про ejabberd + jit (да еще без jabber14) мне и самому интересно! %)
Блин, так хотелось похвастаться без дальнейших обязательств - ан нет!

К прискорбию, я уже под пивом (работа кончилась, ура выходным!), так что 
напишу сюда. Ежели кому не лениво озаботиться приведением повествования к 
соответствующему для публикации тону, не ленитесь - озаботьтесь.

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

1. Не удавалось приконнектиться к веб-морде администрирования.
Оно, вроде, и не очень надо (всё можно сделать из старой доброй командной 
строки), однако ж...

Решение
=======
Далее довольно пространно, зато на эту ремарку после только и буду, что 
ссылаться (если не забуду в процессе).
В моей ситуации, когда машинка-маршрутизатор во внутренней сети зовётся 
router, а во внешней - хм... никак не зовётся, и привязать сервис надо к 
конкретному имени... В общем, геморроя хватило.
Прежде на рутере имелся ещё и реальный айпишник, к которому было привязано 
реальное имя - скажем, usib.irkps.ru (тем более, что так оно и обстояло).
Не так давно я для вящей безопасности да ради облегчения и без того 
непосильного админского труда ;) сныкался за аппаратным WAN-маршрутизатором. 
Благо, последний умеет прокидывать обращения извне на заданный адрес внутри и 
даже более того: при обращении изнутри на внешний адрес, возвращать 
обратившегося "куда надо" (блин, мозги вывихнешь).
Так вот, почти всё дальнейшее повествование будет связано с именем 
usib.irkps.ru, если обратное не оговорено особо.
Важно! В конфиге ejabber вместо директивы 'host' пользоваться директивой 
'hosts', где в качестве параметров указать оба имени: и внутреннее, и 
внешнее; например:
 {hosts, ["router", "usib.irkps.ru"]}
Почему именно так, оставлю до более светлых времён и умов.
После первого запуска сервиса регистрируем в нём себя, любимого (кому ж ещё 
доверить роль админа!), причём с указанием домена. В моём случае:
 ejabberdctl register owner на usib.irkps.ru usib.irkps.ru <passwd>
Теперь в конфиг сервиса добавим (раскомментарим и поправим имеющуюся) строчку:
 {acl, admin, {user, "owner", "usib.irkps.ru"}}
и перезапустим его.
Всё, можно заходить на http://usib.irkps.ru:5280/admin с логином 
owner на usib.irkps.ru и паролем <passwd>. (Гы. А вы подберите. =))

2. При регистрации через JIT вываливалась "Ошибка отправки регистрационных 
данных. Причина: XDB troubles"

Решение
=======
Дело в следующем. Как я уже писал, jabber-jit не умеет жить без xdb_file.so, 
который принадлежит jabber-1.4. Но жабер-то остановлен! И в противовес ему 
рулит парадом Е-жабер. Значит, надо подсунуть эту библиотечку jit'y, чтоб 
выкручивался сам. (Майнтейнеры, ау!) Более того, в доке к е-жаберу есть 
рецепт, как это сделать. Просто переточим его под Альт, и добавим 
в /etc/jabber/jabber-jit.xml подправленную "подкоренную" секцию из примера 
("корневее" только <jabber>):

  <!--
     Some Jabber server implementations do not provide XDB services
     (for example jabberd 2.0 and ejabberd).
     xdb_file_so is loaded in to handle all XDB requests.
  -->
  <xdb id="xdb">
    <host/>
    <load>
      <!-- Майнтейнеры, ау 2 раза!! -->
      <xdb_file>/usr/lib/jabber/xdb_file/xdb_file.so</xdb_file>
    </load>
    <xdb_file xmlns="jabber:config:xdb_file">
      <!-- ...3 раза!!! Каталог /var/lib/jabber не принадлежит jabber-jit! -->
      <spool><jabberd:cmdline 
flag='s'>/var/lib/jabber</jabberd:cmdline></spool>
    </xdb_file>
  </xdb>

# Лирическое отступление.
Почему подправлена секция <xdb_file>, можно увидеть тривиальным пролистыванием 
файловой системы. А вот о секции <spool> - в сути №...
# Кранты лирическому отступлению.

...3. Попытка импорта экаунтов из jabber-1.4 (хоть поюзерно, хоть каталогом) 
обламывалась хоть и многословно, но всегда со словечком "eacces" (да-да, не 
опечатка).

Решение
=======
Всё просто. ejabberdctl import-something запускается от юзера ejabberd, тогда 
как права на /var/lib/jabber/<hostname>/* принадлежат юзеру.группе 
jabber.jabber с маской 700 на каталоги (начиная с /var/lib/jabber) и 600 на 
файлы. То есть, довольно НА МОМЕНТ ИМПОРТА отдать права ПРОЧИМ на 
чтение-исполнение, и - вуаля! По запросу:
 ejabberdctl import-file /var/lib/jabber/<hostname>/<user>.xml
или вообще:
 ejabberdctl import-file /var/lib/jabber/<hostname>
из объектива вылетает кролик!
Важно не забыть ПОТОМ вернуть допуски к файлам-каталогом в прежнее состояние, 
потому что...
...Вот и добрались до спула. Как я уже подмечал, JIT живёт без жабера, но как 
юзал спул жабера под жабером, так и будет юзать спул _жабера_ под Е-жабером 
(майнтейнеры, фиг ли). И если локальные клиенты имели регистрацию в аське, 
самым безболезненным вариантом станет не новая их регистрация в пресловутом, 
но достойном сервисе, а прозрачный своею незаметностию для означенных юзверей 
переход на новый, хоть и чуть более прогрессивный... Ой, наплёл-наплёл! 
Простите пиво, а?
Надеюсь, теперь понятно, почему важные на мой затуманенный взгляд моменты 
касательно жабер-спула были выделены КАПСЛОКОМ.

Если вы меня поняли, вашим юзерам не придётся перерегистрироваться в аське. 
Если нет - придётся не только ЭТО, но и после новой регистрации, для того, 
чтоб респонденты выглядели зеленовато при коннекте, не останется ничего 
иного, как по новой просить у каждого респондента авторизации (эту проблему я 
не описывал в запросе, однако ж сам в неё упёрся - после решения первых 
трёх).

Постскриптум
============
Ремарка (вспомнил, ура!) на пункт 1. Если ваши юзера помимо жабер-сервиса, 
которого вполне хватает для внутреннего сообщения, юзают ещё и внешнюю аську 
(тогда почему бы не позволить им пользовать собственные жабер-экаунты 
наружу?), не отстраивайте icq-транспорт на имена icq.localhost и 
sms.localhost.
Почему? Да хз. Каким-то образом jabber-1.4 с этим вариантом живёт себе, и в ус 
не дует, а Е-жабер отчего-то не уживается. Е-жаберу какого-то чёрта вынь да 
положь транспорты с расширением в виде FQDN.

Впрочем, не настаиваю на собственной правоте. Если кому удастся их сдружить 
таким макаром, буду рад всяческим комментариям.
________________________
С уважением,
Вадим Илларионов
системный администратор
Усолье-Сибирский почтамт
JID: см. <mailto:>
UIN: 7899517
Телефоны:
Мобильный +7 904 658 41 54
Рабочий   +7 395 43 444 00



Подробная информация о списке рассылки community