Jak si spustit vlastní Jabber server za 15 minut

21. 9. 2010
Doba čtení: 6 minut

Sdílet

Kolem české jabber komunity je teď rušno a mnoho uživatelů začíná přemýšlet nad vlastním Jabber (XMPP) serverem. XMPP je otevřený protokol, takže není důvod, proč by to kdokoli nemohl udělat. Jenže linuxových implementací je tolik a vy pravděpodobně nevíte, kterou si vybrat. Máte volných patnáct minut?

Pokud o XMPP serverech nic nevíte a zrovna jste se rozhodli nějaký zkusit, asi budete na začátku hodně zmateni a ty nejlepší alternativy vám budou nakonec stejně skryty. Asi nejpoužívanějším XMPP serverem je ejabberd. Je napsán v jazyce Erlang a používá ho třeba největší český XMPP server Jabbim.cz. Jako druhý se vám do oka dostane Jabberd14, což je originální implementace protokolu XMPP a pro napsání byl zvolen jazyk C/C++. Třetím hráčem na poli XMPP serverů je jabberd2, který byl inspirován serverem jabberd14. Ten je také napsán v C/C++ a snaží se rychle implementovat novinky v protokolu.

Tyto tři implementace protokolu XMPP budete zkoušet asi jako první, ale doporučuji vám se jim vyhnout a to hlavně kvůli velmi komplexní konfiguraci, kterou na malém serveru stejně nevyužijete. Pokud potřebujete nasadit pouze malý server o několika uživatelích a k němu třeba ICQ transport, mnohem lepší volbou je projekt Prosody, napsaný v jazyce Lua. Ten vám nabídne vše co potřebujete, ale zároveň nebudete muset zkoumat zákoutí XMPP protokolu a všelijaké konfigurační nuance v XML souborech jabberd2, či pětisetřádkový konfigurační soubor ejabberdu.

Instalace malého XMPP serveru

U malého serveru je prioritní, aby byl co nejrychleji nahozen a šel snadno udržovat a doplňovat o transporty. Prosody tyto podmínky přesně splňuje a pokud neočekáváte tisíce aktivních uživatelů v jednom okamžiku, budete s ním nadmíru spokojeni. Cílem tohoto článku je nahození XMMP serveru s ICQ transportem za patnáct minut a díky Prosody se to dá bez problémů zvládnout.

Postup bude přizpůsoben distribuci Ubuntu Server, ale měl by fungovat prakticky do puntíku i na Debianu. U ostatních distribucí budou hlavní kroky stejné, ale instalace balíčků odlišná.

Začneme tedy tím, že si seženeme nějakou doménu, na které bude XMPP server provozován. Pokud chcete, aby komunikoval s ostatními XMPP servery, tak musí mít samozřejmě veřejnou IP adresu. Pokud máte jak doménu, tak adresu, není problém pokračovat.

V dalším kroku si stáhneme Prosody. Pokud má váš server Ubuntu ve verzi 10.04 a výš, je Prosody součástí oficiálního repositáře. V opačném případě je potřeba repositář přidat:

$ sudo su
# echo deb http://packages.prosody.im/debian stable main > /etc/apt/sources.list.d/prosody.list
# wget http://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add - 

Instalaci pak provedeme běžným způsobem:

# apt-get update
# apt-get install prosody 

Po instalaci se podíváme na konfigurační soubor /etc/prosody/pro­sody.cfg.lua. Ten je velmi dobře zdokumentován a celkově má přibližně 140 řádek. Zaměříme se na konfigurační direktivy:

  • admins
  • modules_enabled
  • allow_registration
  • VirtualHost
  • Component

U všech je již naznačeno, co máme vyplnit, takže do admins přidáme náš účet:

admins = { "admin@example.com" } 

V direktivě řekneme Prosody, co má zavést za moduly. Je vcelku jedno jaké si vyberete, ale některé jsou důležité, já jsem vybral tyto:

  • roster
  • saslauth
  • tls
  • dialback
  • disco
  • private
  • vcard
  • privacy
  • compression
  • legacyauth
  • version
  • uptime
  • time
  • ping
  • pep
  • register
  • posix
  • groups
  • announce
  • welcome
  • watchregistrations

V konfiguračním souboru je popsáno, které byste měli zvolit a které jsou jen hezké doplnění a volba tak zůstává hlavně na tom, co chcete se serverem dělat.

Dále povolíme registraci nových uživatelů:

allow_registration = true; 

A teď se můžeme pustit k samotné konfiguraci naší domény. Pro příklad jsem zvolil doménu example.com. Prosody umí fungovat na několika doménách najednou a to bez složitostí jaké má například jabberd2. Stačí do konfiguračního souboru přidat nový VirtualHost. Jeden již v konfiguračním souboru je, tak ho upravíme:

VirtualHost "example.com"
    enabled = true
    ssl = {
        key = "/etc/prosody/certs/example.com.key";
        certificate = "/etc/prosody/certs/example.com.crt";
    }
                                                } 

Nakonec vygenerujeme certifikáty tak, aby byly na místě uvedeném v konfiguračním souboru. K tomu nám pomůže druhý díl seriálu OpenSSL, který na Rootu vyšel před sedmi lety.

openssl req -new -x509 -nodes -out /etc/prosody/certs/example.com.crt -keyout /etc/prosody/certs/example.com.key -days 1098 

Tak teď by mělo být vše připravené a můžeme Prosody nastartovat s novou konfigurací:

# /etc/init.d/prosody restart 

Kdyby náhodou Prosody vypsalo

[...]
Prosody was unable to find LuaSec
[...] 

je potřeba ještě doinstalovat balíček liblua5.1-sec0.

ICQ transport

Teď bychom měli mít funkční XMPP server s TLS šifrováním, na který by se mělo jít bez problémů registrovat a komunikovat s ním s ostatními servery. Nyní si ještě ukážeme, jak doplnit naši službu o ICQ transport. K tomu použijeme projekt Spectrum. Ten pochází z českých luhů a hájů a původně byl vyvíjen pro český Jabbim. Nicméně pak se díky Google Summer of Code dostal na veřejnost jako open source. Jeho autorem je Jan Kaluža, ale na projektu pracuje i několik dalších vývojářů. Projekt sám o sobě je „jen“ rozhraním mezi knihovnou libpurple a XMPP protokolem a na rozdíl od ostatních transportů, se velmi jednoduše konfiguruje.

Spectrum podporuje protokolů víc, nám ovšem postačí jen ICQ. Nejdříve musíme Spectrum nainstalovat, jenže v oficiálním repositáři ho nenajdeme. Neoficiální je ovšem připraven, takže zas tolik to nebolí.

# echo deb http://packages.spectrum.im <dist> spectrum > /etc/apt/sources.list.d/spectrum.list
# wget -O - http://packages.spectrum.im/keys/apt-repository@fsinf.at | apt-key add -
# apt-get update
# apt-get install libpurple0-minimal spectrum 

Místo <dist> vložíme verzi našeho Ubuntu nebo Debianu, tzn.:

  • lenny
  • squeeze
  • hardy
  • intrepid
  • jaunty
  • karmic
  • lucid

Pokud se vše povedlo, přejdeme ke konfiguraci, která se nachází v /etc/spectrum/. Hned po instalaci se tam nachází ukázkový konfigurační soubor, takže ho povýšíme na běžný konfigurační soubor:

# cd /etc/spectrum
# mv spectrum.cfg.example spectrum.cfg 

V něm pak změníme několik řádků:

# Povolíme transport
enable=1
# vybereme jeden z podporovaných protokolů: aim, facebook, gg, icq, irc, msn, myspace, qq, simple, xmpp, yahoo
# v našem případě ICQ
protocol=icq
# Nastavíme adresu transportu
server=127.0.0.1
# Nastavíme správně doménu
jid=$protocol.example.com
# Nastavíme tajné heslo pro komunikaci transportu s XMPP serverem
password=secret
# Port můžeme nechat
port=5347 

A tím jsme s konfigurací ICQ transportu hotovi. Ještě zbývá nastavit Prosody, aby si spolu mohli povídat. To uděláme pomocí konfigurační direktivy Component, kterou přidáme nakonec konfiguračního souboru /etc/prosody/pro­sody.cfg.lua:

Component "icq.example.com"
    component_ports = { 5347 }
    component_interface = "127.0.0.1"
    component_secret = "secret" 

A restartujeme jak Prosody, tak Spectrum:

ict ve školství 24

# /etc/init.d/prosody restart
# /etc/init.d/spectrum restart 

Nyní by už měl fungovat i ICQ transport. Pokud byste chtěli přidat další transporty, lze to udělat obdobně. Stačí vytvořit další konfigurační soubor v adresáři /etc/spectrum/, s koncovkou .cfg a doplnit komponentu do konfiguračního souboru Prosody. Init skript se postará o spuštění všech transportů.

Závěr

Prosody i Spectrum jsem měl nahozené přibližně za 20 minut, a to jsem je viděl poprvé. Původně jsem chtěl psát o jednoduchém XMPP serveru postaveném na ejabberd, ale po konzultaci s týmem vývojářů kolem Jabbim.cz, jsem se nakonec rozhodl pro Prosody a mrzí mě, že jsem o něm nevěděl předtím, než jsem na svůj server dával jabberd2.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.