· ejabberd icq skype spectrum2 transports транспорты

Spectrum2 && Ejabberd

Spectrum2 – это очень хорошие и стабильные Jabber-транспорты. В чем их прелесть?

  • Многопротокольный транспорт, использующий libpurple (а сейчас – и еще несколько) бэкенд.
  • Написан на C++, что говорит о высокой скорости работы оных.
  • Легок в настройке и использовании

Я опишу настройку двух транспортов – ICQ и Skype, все остальные транспорты настраиваются по аналогии с ICQ-транспортом. В качестве базы данных будем использовать MySQL. Я не буду рассказывать про настройку БД, это остается на вашей совести :–) В качестве используемых данных тут будет использовано:

  • Пользователь – spectrum
  • База данных – spectrum
  • Пароль – spectrumpass

Также, возможно, вы захотите указать другие хостнеймы и порты для сервисов, так что не забудьте это сделать :–)

Самое сложное – Skype

Именно так – это самое сложное, потому что требует запущенного X-сервера (xvfb). Соответственно, увеличивается расход оперативной памяти и процессорного времени (будут работать иксы и скайп). Для начала вам необходимо установить Skype в соответствии с вашим дистрибутивом, а также установить xvfb для запуска скайпа.

Теперь самая магия – настройка траспорта. Вот его конфиг (в дебиане располагается по адресу /etc/spectrum2/transports/skype.cfg):

[service]
# 1 if Spectrum should run in server mode.
server_mode = 0

# The name of user/group Spectrum runs as.
#user=spectrum
#group=spectrum

# JID of Spectrum instance.
jid = skype.domain.tld

# Password used to connect the XMPP server in gateway mode.
# In server mode, this option is ignored.
password = pass_for_server

# XMPP server to which Spectrum connects in gateway mode.
# In server mode, this option is ignored.
server = 127.0.0.1

# XMPP server port.
port = 8890

# Full path to PKCS#12 cetficiate used for TLS in server mode.
#cert=

# Certificate password if any.
#cert_password=

# Number of users per one legacy network backend.
users_per_backend=10

# Full path to backend binary.
#backend=/usr/bin/spectrum2_libpurple_backend
#backend=/usr/bin/spectrum2_libcommuni_backend
# For skype:
backend=/usr/bin/xvfb-run -n BACKEND_ID -s "-screen 0 10x10x8" -f /tmp/x-skype-gw /usr/bin/spectrum2_skype_backend

[identity]
# Name of Spectrum instance in service discovery
name=Skype Transport

[logging]
# log4cxx/log4j logging configuration file in ini format used for main spectrum2 instance.
config = /etc/spectrum2/logging.cfg

# log4cxx/log4j logging configuration file in ini format used for backends.
backend_config = /etc/spectrum2/backend-logging.cfg

[database]
# Database backend type
# "sqlite3", "mysql", "pqxx", or "none" without database backend
type = mysql

# For SQLite3: Full path to database
# For MySQL and PostgreSQL: name of database
# default database = /var/lib/spectrum2/$jid/database.sql
database = spectrum

# Server.
server = localhost

# Port.
#port = 0

# User.
user = spectrum

# Paasword.
password = spectrumpass

# Prefix used for tables
prefix = skype_

[registration]
# Enable public registrations
enable_public_registration=1

# Text to display upon user registration form
#username_label=Jabber JID (e.g. user@server.tld):
#instructions=Enter your remote jabber JID and password as well as your local username and password

# If True a local jabber account on <local_account_server> is needed
# for transport registration, the idea is to enable public registration
# from other servers, but only for users, who have already local accounts
require_local_account=1
local_username_label=Local username (without @server.tld):
local_account_server=pztrn.ru
#local_account_server_timeout=10000

В этом конфиге разрешены регистрации только для локальных пользователей домена pztrn.ru. Не забудьте поменять домен на свой.

Почему только локальные пользователи? Потому что на одного пользователя тратится в среднем 50-80 мбайт оперативной памяти, ибо для каждого пользователя запускается отдельный инстанс скайпа.

ICQ, IRC и прочее

Конфиг для ICQ-транспорта:

[service]
# 1 if Spectrum should run in server mode.
server_mode = 0

# JID of Spectrum instance.
jid = icq.domain.tld

# Password used to connect the XMPP server in gateway mode.
# In server mode, this option is ignored.
password = pass_for_server

# XMPP server to which Spectrum connects in gateway mode.
# In server mode, this option is ignored.
server = 127.0.0.1

# XMPP server port.
port = 8888

# Interface on which Spectrum listens for backends.
backend_host = localhost

# Port on which Spectrum listens for backends.
# By default Spectrum chooses random backend port and there's
# no need to change it normally
#backend_port=10001

# Full path to PKCS#12 cetficiate used for TLS in server mode.
#cert=

# Certificate password if any.
#cert_password=

# Number of users per one legacy network backend.
users_per_backend=10

# Full path to backend binary.
backend=/usr/bin/spectrum2_libpurple_backend
#backend=/usr/bin/spectrum2_libcommuni_backend
# For skype:
#backend=/usr/bin/xvfb-run -n BACKEND_ID -s "-screen 0 10x10x8" -f /tmp/x-skype-gw /usr/bin/spectrum2_skype_backend

# Libpurple protocol-id for spectrum_libpurple_backend
#protocol=prpl-jabber
#protocol=prpl-msn
protocol=prpl-icq

[identity]
# Name of Spectrum instance in service discovery
name=ICQ Transport

# Type of transport ("msn", "icq", "xmpp").
# Check http://xmpp.org/registrar/disco-categories.html#gateway
type=icq

[logging]
# log4cxx/log4j logging configuration file in ini format used for main spectrum2 instance.
config = /etc/spectrum2/logging.cfg

# log4cxx/log4j logging configuration file in ini format used for backends.
backend_config = /etc/spectrum2/backend-logging.cfg

[database]
# Database backend type
# "sqlite3", "mysql", "pqxx", or "none" without database backend
type = mysql

# For SQLite3: Full path to database
# For MySQL and PostgreSQL: name of database
# default database = /var/lib/spectrum2/$jid/database.sql
database = spectrum

# Server.
server = localhost

# Port.
#port = 0

# User.
user = spectrum

# Paasword.
password = spectrumpass

# Prefix used for tables
prefix = icq_

[registration]
# Enable public registrations
enable_public_registration=1

Этим конфигом мы разрешаем регистрироваться всем на нашем транспорте (со всех серверов). Для того, чтобы ограничить регистрацию только локальными пользователями – смотрите последние строчки примера со скайпом.

Аналогично (с заменой icq на irc, msn, xmpp) настраиваются и другие транспорты.

Настройка сервера

Данный пример для ejabberd (добавляем в блок listen):

    {{8888, "127.0.0.1"}, ejabberd_service, [
                {access, all},
                {hosts, ["icq.domain.tld"],
                 [{password, "pass_for_server"}]
                }
                ]},

Где:

  • 8888 – порт для сервиса, который вы указали в конфиге.
  • icq.pztrn.ru – хостнейм для сервиса, который вы указали в конфиге.
  • pass_for_server– пароль для сервиса, который вы указали в конфиге.

Добавляете в конфиг ежика столько раз, сколько транспортов вы будете запускать (с измененным портом, естественно, для каждого транспорта свой).

Запускаем, проверяем…

(Пере)Запускаем ejabberd:

# ejabberdctl restart

Запускаем траспорты:

# spectrum2_manager start

Смотрим логи обоих серверов (обычно, это /var/log/ejabberd/ejabberd.log для ejabberd и /var/log/spectrum2/$адрес_сервера/spectrum2.log для spectrum2) и убеждаемся, что они успешно связались. Все, настройка окончена :–) Теперь осталось добавить все необходимое в автозагрузку вашей системы инициализации, и это опять же я оставляю на вашу совесть :–)

FAQ

Q: Почему сервисы запускаются в gateway mode, а не в server mode (server_mode=1)?

A: Потому что в таком случае они не работают. Я пока не встречал рабочих конфигураций с server_mode=1.

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket