Blokování reklamy v internetových prohlížečích
7.9.2011 – 11.30 | 2 komentářů

Není nic horšího, než řvoucí reklama -ať v televizi nebo na internetu. Člověk se chce podívat na reportáž na některém internetovém médiu a musí sledovat čtvrtminuty šmoulí kampaně Albert, případně robota z Alzy. Hnus fialový …

Číst celý článek »
Akvaristika

Mé zkušenosti s akvaristikou a články k tématu

Blog

Život je jedno velké dobrodružství. Všechno, co se nevešlo do jiné kategorie.

IT

Informace a zkušenosti ze světa jedniček a nul

Geocaching

Kufrování s GPSkou, mapy, azimuty, souřadnice… :-)

Astronomie

Domů » Linux

Instalace ejabberd s ověřením proti mySQL

Přidal uživatel dne 28.1.2011 – 13.582 komentářů

Rozhodl jsem se vyzkoušet instalaci vlastního Jabber serveru. Jako démona jsem vybral ejabberd, který je součástí standardních repozitářů stable větve Debianu. Je potřeba ještě pár věcí doladit, ale i tak jsem narazil na pár věcí, které mě při instalaci zdrželi déle než jsem chtěl a proto je poznačím dřív než budou zapomenuty.

Instalaci ejabberd provedeme standardním postupem

apt-get install ejabberd erlang-dev subversion

Balík erlang-dev užijeme později při kompilaci modulu pro mySQL. Subversion potřebujeme pro stažení zdrojových kódů mySQL modulu.

Než začneme s konfigurací serveru, přidáme do DNS tři SRV záznamy.

Screenshot pochází z administrace DNS u Wedosu. Je nutné zadat pro každý záznam údaje ve tvaru Název (_jabber._tcp.domena.cz), Priorita (5), Váha (0), Port (5269) a Hodnota (dobranalada.cz)

Předpokládám, že máte instalováno mySQL. Založte v mySQL nového uživatele ejabber:

mysql -h localhost -p -u root
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.16-max

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

Poté vytvořte novou databázi ejabber:

mysql -h localhost -p -u ejabberd
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.1.16-max

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE ejabberd;
Query OK, 1 row affected (0.00 sec)

Stáhněte databázové schéma:

wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql

A proveďte jeho import:

mysql -D ejabberd -h localhost -p -u ejabberd < mysql.sql

Vytvoření tabulek v databázi můžete zkontrolovat:

echo "show tables;" | mysql -D ejabberd -h localhost -p -u ejabberd
Tables_in_ejabberd
last
privacy_default_list
privacy_list
privacy_list_data
private_storage
pubsub_item
pubsub_node
pubsub_node_option
pubsub_node_owner
pubsub_state
pubsub_subscription_opt
rostergroups
rosterusers
roster_version
spool
users
vcard
vcard_search

Teď příjde krok, který zřejmě není nutné provádět na novějších verzích ejabberd.  Aby bylo možné ověřovat uživatele proti mySQL databázi, je nutné zkompilovat modul pro mySQL. Nejprve stáhněte zdrojové kódy modulu z SVN. Je nutné mít nainstalovaný subversion z prvního kroku.

svn co https://svn.process-one.net/ejabberd-modules/mysql/trunk/ mysql

Kompilaci spusťte příkazem ./build.sh. V adresáři ebin vzniknou po úspěšné kompilaci soubory

mysql_auth.beam
mysql.beam
mysql_conn.beam
mysql_recv.beam

Tyto soubory překopírujte k ostatním .beam knihovnám ejabberd. V mém případě do adresáře /usr/lib/ejabberd/ebin. Konečně můžeme provést vlastní konfiguraci serveru. Zeditujeme soubor /etc/ejabber/ejabber.cfg a upravíme položky, které definují, který z účtů je administrátorem serveru a také doménu, na které server běží.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Options which are set by Debconf and managed by ucf
%% Admin user
{acl, admin, {user, "uzivatel", "domena.cz"}}.
%% Hostname
{hosts, ["domena.cz"]}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Dále je nutné odkomentovat část, která říká, na kterých portech bude server poslouchat:

%%%   ===============
%%%   LISTENING PORTS
%%
%% listen: Which ports will ejabberd listen, which service handles it
%% and what options to start it with.
%%
{listen,
 [
  {5222, ejabberd_c2s, [
			{access, c2s},
			{shaper, c2s_shaper},
			{max_stanza_size, 65536},
			starttls, {certfile, "/etc/ejabberd/ejabberd.pem"}
		       ]},
  %%
  %% To enable the old SSL connection method (deprecated) in port 5223:
  %%
  %%{5223, ejabberd_c2s, [
  %%			{access, c2s},
  %%			{shaper, c2s_shaper},
  %%			{max_stanza_size, 65536},
  %%			tls, {certfile, "/etc/ejabberd/ejabberd.pem"}
  %%		       ]},

  {5269, ejabberd_s2s_in, [
			   {shaper, s2s_shaper},
			   {max_stanza_size, 131072}
			  ]},
  %% External MUC jabber-muc (but internal mod_muc is better :) )
  %%{5554, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {host, "muc.localhost", [{password, "secret"}]}
  %%			    ]},
  %% Jabber ICQ Transport
  %%{5555, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {hosts, ["icq.localhost", "sms.localhost"],
  %%				       [{password, "secret"}]}
  %%			    ]},
  %% AIM Transport
  %%{5556, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {host, "aim.localhost", [{password, "secret"}]}
  %%			    ]},
  %% MSN Transport
  %%{5557, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {host, "msn.localhost", [{password, "secret"}]}
  %%			    ]},
  %% Yahoo! Transport
  %%{5558, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {host, "yahoo.localhost", [{password, "secret"}]}
  %%			    ]},
  %% External JUD (internal is more powerful,
  %% but doesn't allow to register users from other servers)
  %%{5559, ejabberd_service, [
  %%			    {ip, {127, 0, 0, 1}},
  %%			    {access, all},
  %%			    {shaper_rule, fast},
  %%			    {host, "jud.localhost", [{password, "secret"}]}
  %%			    ]},
  {5280, ejabberd_http, [
			 http_poll,
			 web_admin
			]}
 ]}.

Zbývá zakázat defaultní ověřování proti Mnesii a zapnout ověření proti mySQL. Zakomentujte

%% {auth_method, internal}.

A nastavte souřadnice na databázi (server, uživatel, databáze, heslo):

{auth_method, odbc}.
{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "password"}}.

Hotovo, uložte konfiguraci a spusťte:

/etc/init.d/ejabberd start

Poté zaregistrujte administrátorský účet, restartujte ejabber a můžete se připojit.

ejabberdctl register uzivatel domena.cz heslo
ejabberdctl restart

Share

2 komentářů »

  • Pavel Lang napsal:

    Chtěl bych se zeptat, jak je použití mysql autentizace nákladné oproti interní mnesii na zdroje (hlavně paměť a CPU). Nerozumím příliš tomu, jak mnesia interně funguje (cache, indexy, …) a tak nemám představu co posun k mysql udělá.

    Díky za postřehy

    • Michal napsal:

      Mám server víceméně pro osobní použití+pár přátel. Kamarád má jabber server s komunitou cca 2500 useru. Zda se, ze stroj s 3GHz, a 2g ram je na pokraji sil.
      Většinu výkonu přitom berou transporty v Pythonu. Chystá migraci do mysql. Dám vědět.
      Já začal s mysql hned odpočátku, nemůžu srovnat. Jediné v čem jsem přecházel jsou transporty z pythonu na spectrum.

Přidejte komentář k tomuto článku.

Přidejte váš komentář nebo trackback z vašich stránek. Můžete také reagovat na tyto komentáře přes RSS.

Pište slušně, srozimitelně a k tématu. Nespamujte.

Můžete použít tyto tagy:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tento weblog používá Gravatar. Pokud chcete záskat vlastní avatar, zaregistrujte se na Gravatar.