ejabberd — это свободный, распределённый и устойчивый к отказам XMPP-сервер, написанный в основном на Erlang. Установка его тривиальна:
sudo zypper ar -k http://download.opensuse.org/repositories/server:/messaging/openSUSE_12.1/server:messaging.repo
sudo zypper ref
sudo zypper in --no-recommends ejabberd
Чтобы наш сервер мог связываться с другими, нужно привязать его к домену. Регистрируемся на любом сервер Free DNS, например, здесь. Выбираем и добавляем субдомен типа A здесь. Ваш ip автоматически определится и привяжется к домену.
Если фаервол настроен параноидально, ползём в Яст (Безопасность и пользователи => Бранмауэр => Разрешённые службы => Дополнительно) и открываем порты 5222 5269, записываем через пробел, сохраняем изменения и перезапускаем фаервол. Рядом (Система => Системные службы (Уровень зпауска)) можно включить автозагрузку демона.
Редактируем конфиг /etc/ejabberd/ejabberd.cfg: вместо строки {hosts, ["localhost"]}. делаем hosts, ["localhost", "наш.домен"]}. Подключаемся к нашему серверу через домен (NB! Аккаунт с тем же именем, созданный для локалхост будет отличным от аккаунта, привязанного к домену), создаём новый аккаунт. После регистрации можно заменить сервер для джида на localhost. Запрещаем новые регистрации: в строке {access, register, [{allow, all}]}. заменяем allow на deny.
Теперь желательно автоматизировать обновление записи DNS. Здесь берём свои параметры. Здесь выбираем утилиту. Пролистав доступные, я выбрал скрипт от Adam Dean и модифицировал его, свой вариант отправил админу сайта. Скрипт надо выполнять после каждого переподключения, я закинул его в kvpnc.
Пробежимся по содержимому скрипта:
dig @8.8.8.8 $DOM пробьёт домен через DNS гугла;
egrep -v "^$|;
" выбросит пустые строки и строки с точкой с запятой;
Опционально можно выводить уведомления в KDE (не работает с kvpnc) или обновлять запись в хостс (нужны права root). Несмотря на все хитрости, похоже, что связь с другими серверами работает только, когда у них обновятся DNS. Поэтому после запуска компьютера ждём минут 5, уходим аккаунтов оффлайн, потом онлайн, и всё будет работать.
Подпилил скрипт для огробления статистики провайдера. Во-первых, для сравнения чисел нужно использовать -gt вместо >. Теперь скрипт не гадит пустыми файлами при запуске. Во-вторых, непустую строку можно опознать параметром -n. [man test
или с примерами.] Этот вариант работает в zsh. Актуальная версия: 0.2.1.3. Спасибо, ascrazy, aesdana, settler!