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/prosody.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/prosody.cfg.lua:
Component "icq.example.com"
component_ports = { 5347 }
component_interface = "127.0.0.1"
component_secret = "secret"
A restartujeme jak Prosody, tak Spectrum:
# /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.