May 26, 2010

Установка ejabberd-сервера на FreeBSD

UPD: в этом блоге также есть запись об установке jabberd-сервера, см. тег jabber.

UPD: Памятка мне не забыть вникнуть в -DWITHOUT_JAVA

Ставим erlang:
cd /usr/ports/lang/erlang-lite && make install clean
┌────────────────────────────────────────────────────────────────────┐
│                Options for erlang-lite r13b04_2,1                  │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │               [ ] JAVA  Enable Java applications               │ │
│ │               [ ] X11   Enable X11 support                     │ │
│ │               [ ] WX    Enable WX Extensions                   │ │
│ │               [X] ODBC  Enable ODBC                            │ │
│ │               [X] SMP   Enable SMP                             │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
│ │                                                                │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│                       [  OK  ]       Cancel                        │
└────────────────────────────────────────────────────────────────────┘

Enable ODBC — разрешили поддержку работы с базами данных (нас интересует MySQL)
cd /usr/ports/net-im/ejabberd && make install clean

echo ejabberd_enable=YES>>/etc/rc.conf

cp /usr/local/etc/ejabberd/ejabberd.cfg.example /usr/local/etc/ejabberd/ejabberd.cfg && cp /usr/local/etc/ejabberd/ejabberdctl.cfg.example /usr/local/etc/ejabberd/ejabberdctl.cfg && cp /usr/local/etc/ejabberd/inetrc.example /usr/local/etc/ejabberd/inetrc


В файле inetrc отредактируйте имя домена.

В файле ejabberd.cfg отредактируйте:
  • {hosts, ["jabber.domain.tld"]}.
  • {auth_method, internal}. -> {auth_method, odbc}.
  • {odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "ejabberd"}}.
  • {acl, admin, {user, "имя_пользователя_админа", "jabber.domain.tld"}}.
  • Меняем значения:
    mod_last на mod_last_odbc
    mod_offline на mod_offline_odbc
    mod_privacy на mod_privacy_odbc
    mod_private на mod_private_odbc
    mod_roster на mod_roster_odbc
    mod_vcard на mod_vcard_odbc

Сгенерируем самоподписанный сертификат на 10 лет (Внимание! Не забудьте заменить имя домена на своё):
cd /usr/local/etc/ejabberd && openssl req -new -x509 -nodes -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem -subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=jabber.domain.tld/emailAddress="mail@jabber.domain.tld && cat privkey.pem >> server.pem && rm privkey.pem && mv server.pem ssl.pem


Выдержка из секции listen:
{5222, ejabberd_c2s, [
%%
%% If TLS is compiled in and you installed a SSL
%% certificate, specify the full path to the
%% file and uncomment this line:
%%
{certfile, "/usr/local/etc/ejabberd/ssl.pem"}, starttls,
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
{5223, ejabberd_c2s, [
{access, c2s},
{certfile, "/usr/local/etc/ejabberd/ssl.pem"}, tls,
{max_stanza_size, 65536}
]},
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},


Теперь необходимо создать одноимённую БД для ejabberd (я это делал через ISPmanager) и загрузить в неё все таблицы для работы ejabberd. Это можно сделать через консоль или же PHPMyAdmin.
cd /usr/local/etc/ejabberd && fetch http://dl.dropbox.com/u/958658/Misc/ejabberd/mysql.sql && mysql -u root -p -D ejabberd

mysql>\. mysql.sql
mysql> EXIT
Bye


Теперь необходимо установить модуль Erlang, необходимый для работы с MySQL. Узнаём версию ejabberd:
pkg_info | grep ejabberd

У меня была 2.1.35
cd /usr/local/lib/erlang/lib/ejabberd-2.1.5/ebin/ && fetch http://dl.dropbox.com/u/958658/Misc/ejabberd/mysql_r13.tar.gz && tar -xzvf mysql_r13.tar.gz && mv ./mysql_r13/mysql* ./ && rm -rf mysql_r13.tar.gz mysql_r13 && chown -R ejabberd:ejabberd /usr/local/lib/erlang/lib/ejabberd-2.1.5/ebin/mysql*


Внимание! Для ejabberd версии 2.1.3 требовался модуль mysql_r12.tar.gz. Свежую версию я скачал на support.process-one.net.

Запуск:
/usr/local/sbin/ejabberdctl start


Теперь необходимо зарегистрировать указанный выше административный аккаунт. Для управления через web-интерфейс авторизуйтесь полным JID администратора.

Если у вас возникает ошибка Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}) и в /var/log/ejabberd создаётся файл erl_crash_день-время.dump, убедитесь что запускаете ejabberd именно командой /usr/local/sbin/ejabberdctl start

UPDATE Установка mod_logdb, записывающего сообщения в базу данных. Идём в /usr/ports/distfiles/ находим там архив ejabberd-2.1.5, распаковываем его, переходим в получившуюся папку ./ejabberd-2.1.5/src/ и загружаем туда patch-src-mod_logdb-2.1.3.diff. Это — файл патча, применяем его:
cd /usr/ports/distfiles/ejabberd-2.1.5/src && patch -p0 < patch-src-mod_logdb-2.1.3.diff




Устанавливаем:
./configure
gmake install

В конфиг дописываем:
{access, mod_logdb, [{allow, all}]}.

Там, где модули добавляем:
{mod_logdb, [
{dbs, [{mysql5, [{user, "%пользователь_бд%"},{password, "%пароль%"},{server, "localhost"},{port, 3306},{db, "%имя_бд%"}]}]},
{vhosts, [{"localhost", mysql5}]}
]},

2 comments:

Anonymous said...

автору большое спасибо. редко встретишь такое хауту, которое работает с колёс. единственное дополнение. пропущено описание создания БД ejabberd и назначение прав на неё. что-то типа create database ejabberd; GRANT ALL PRIVILEGES ON ejabberd.* TO "ejabberd"@"localhost" IDENTIFIED BY "password"; FLUSH PRIVILEGES; иначе у копипастеров сходу не получится.

Anonymous said...

не, поспешил. после пересборки с патчем для mod_logdb, после первой же перезагрузки работать не будет. и стартовый скрипт в rc.d тоже. найти причину легко. достаточно разобраться почему в системе два управляющих скрипта ejabberdctrl. один в /sbin и второй в /usr/local/sbin. также советую найти beam файл, отвечающий для запись сообщений в базу.