Internet è il postino dei nostri tempi che nessun cane azzannerà.

— Mario Muratore

ArchLinux Small Business Server (31) - Instant Messaging (1)

http://www.stenoweb.it/files/blog/archlogo.png Un servizio di Instant Messaging per la nostra Small Business ? Già proprio così. L'idea mi è balenata quando, spostandomi di azienda in azienda, ho notato che la diffusione di Skype assume le dimensioni di una piovra: pazienza servisse per telefonare, ma nel 90% dei casi ho visto solo chat ! E usare la chat di Skype per lasciare messaggi a chi stà nella scrivania accanto mi sembra una boiata immensa: oltre allo spreco di banda (skype si connette a internet, magari siete nodo/centralino di un centinaio di utenti e non lo sapete), si pone anche il problema che senza connettività a internet il "servizio" si interrompe. E allora, signori e signore (mi sà che le signore sono poche ...), risolviamo il problema alla radice, un bel server IM privato realizzato per l'occasione grazie al signor Jabber, libero e spensierato.

La babele dei formati

Cercando la soluzione più adatta mi son scontrato con una marea di sigle/implementazioni per realizzare un servizio di Instant Messaging: AIM, ICQ, IRC, MSN, Gadu-Gadu, Yahoo!, Sametime, Skype, Jabber, ecc. e sicuramente ne ho dimenticato qualcuno. Per la peppa, cosa scegliere ?

Per scremare allora fissiamo i nostri obiettivi:

voglio un sistema di messaggistica senza dover scendere a compromessi, senza dover subire la pubblicità di chissà quale "multinazionale della messaggistica", senza dover dare informazioni a proposito della propria vita, senza dover essere maggiorenni, o americani inglesi francesi russi, senza dover dare un contatto mail sicuramente spammato, senza una marea di n00b che si divertono con i loro nick colorati a inviare le loro catene di ogni santo gli venga in mente, privato e integrato con il sistema di autorizzazione utenti aziendale basato su PAM e LDAP e che supporti i messaggi a utenti off-line

Con queste richieste ho già spazzato via praticamente tutti i pretendenti, con l'eccezzione di uno: JABBER.

Il software basato su Jabber/XMPP è libero e standarlizzato, chiunque può "tirar su" un server. E'diffuso su migliaia di macchine disseminate su internet e usato quotidianamente da milioni di persone. Esistono server pubblici e privati che interagiscono tra loro, e in teoria basta un unico utente su di un qualsiasi server e immediatamente posso comunicare con qualsiasi altro utente ovunque sia registrato. In più, caratteristica unica, attraverso i gateway posso anche comunicare con utenti di altre reti tipo ICQ e MSN.

Ma a noi tutto questo interessa relativamente, a noi interessa un server privato, con registrazioni chiuse che accetti connessioni dalla nostra rete private (ed eventualmente nostri utenti mobili) e sfrutti gli utenti/password esistenti per l'autenticazione. Ricordate il Santo Graal del sistemista ? Single-Signon a tutti i servizi aziendali, cosa che Jabber ci permette di fare.

Bando alle ciance ed iniziamo.

Installazione

Purtroppo non tutto è disponibile per Archlinux, dovremmo "sporcare" la nostra installazione con compilazioni manuali. Certo, potrei farne un PKGBUILD di quello che manca, ma per ora và bene così, se qualcuno si offre è il benvenuto.
Esistono diverse implementazioni per realizzare la parte "server" di Jabber io ho scelto la più sempliciotta che è anche la più "storica" essendo un progetto iniziato e rilasciato da Jeremie Miller (il creatore di jabber) nella prima versione nel lontano 2000. Ancora oggi (giunta alla verione 2) è più che adeguata e quindi non ho perso tempo.

sudo pacman -S jabberd

I moduli aggiuntivi dovrebbero essere installati come dipendenze, oppure li avete già installati seguendo questi articoli su Archlinux SBS. A noi serve:

  • OpenSSL
  • Libidn
  • MySQL

Potrei installare jabberd anche senza openSSL o libidn, tuttavia facciamo una installazione che comprende anche la crittografia dei messaggi, quindi installiamoli. MySQL verrà usato come Data Storage da Jabberd in alternativa a sqlite, PostgreSQL o BerkleyDB.

Potrei essere a posto così, ma siccome voglio implementare anche la conference tra più utenti (i channels di IRC) ho bisogno di un modulo aggiuntivo di cui non esiste il PKGBUILD. Allora preleviamo il sorgente, lo compiliamo e lo installiamo a manina.
Il componente in aggiunta è mu-conference che stà per Multi User Conference che verrà integrato al nostro server Jabber.
Mettiamoci in una directory vuota e preleviamo il sorgente:

wget http://download.gna.org/mu-conference/mu-conference_0.7.tar.gz

scompattiamolo
tar zxvf ./mu-conference_0.7.tar.gz

entriamo nella cartella mu-conference_0.7/src
ed editiamo il file Makefile per abilitare il supporto a MySQL. In questo modo muc scriverà nel database le rooms create per le chat/conferenze.
Per fare questo basta decommentare la seconda riga:
CFLAGS:=$(CFLAGS) -O2 -Wall -I../../lib -I../include `pkg-config --cflags glib-2.0` -D_JCOMP -D_REENTRANT -DLIBIDN -DHAVE_MYSQL

ora ritorniamo alla directory "padre" ma prima di compilare abbiamo bisogno ancora di qualcosa:
sudo pacman -S pkgconfig

Ora siamo pronti: da mu-conference_0.7 lanciamo :
make

La compilazione dura poco, al termine copiamo a manina i files al loro posto:
cp ./src/mu-conference /usr/bin
cp ./muc-default.xml /etc/jabberd/muc.xml

Bene, per ora ci fermiamo qui. Nel prossimo post procederemo con la configurazione.

Perchè non usare il protocollo bonjour, basato su zeroconf?

Io lo sto usando con i miei colleghi e funziona benissimo, non ha bisogno di un server centrale (anche se tutti gli utenti dovranno avere zeroconf sul proprio PC), e non richiede nessuna configurazione.

I collegamenti sono velocissimi perchè avvengo tra nodo e nodo senza passare per nessun server. Non saprei dire niente riguardo l'efficienza su una rete abbastanza grande, ma con pochi utenti è fortissimo.

Bonjour ? Di Apple ? Questo ?

http://it.wikipedia.org/wiki/Bonjour

A parte che non vedo il nesso con l'instant messaging in sè (iChat ? Ma non è solo per MacOSX ?) non credo faccia al mio caso, io voglio l'autenticazione utenti sull'albero openLDAP esistente (tramite PAM nel mio caso) in modo da usare la base utenti esistente in azienda, voglio che supporti utenti mobili che si collegano dall'esterno, e ho parecchi utenti su terminal server in cui non sò come si comporta zeroconf o bonjour.

Se poi mi sbaglio contraddicimi pure.

Lato utente (come vedremo) ho usato [http://psi-im.org/ PSI] come client jabber che non ha bisogno di essere installato ad ogni utente. In più decido dal server Samba chi deve usarlo o meno.

Si bonjour è il protocollo di Apple, che permette anche l'IM.

Certo il discorso cambia se vuoi fare autenticazione su LDAP, oppure se vuoi collegamenti esterni.

Funziona senza problemi anche con pidgin, basta attivare il server avahi.
Non saprei come si possa comporare su windows (il server zeroconf).

Io lo uso come ho detto con i miei colleghi e mi sembra valido e veloce.

Ciao

Forse non mi sono spiegato bene.

Avvii il server avahi (/etc/rc.d/avahi-daemon start)!
Avvii pidgin dopo aver creato un account bonjour!

Voila il gioco è fatto, automaticamente compaiono tutti gli utenti con attivo l'IM di bonjour nella LAN.

La comunicazione e lo scambio dei file è velocissima!

Se si vuole realizzare una cosa semplice e veloce IMHO è un'idea da considerare.

Si Mac con Adium e ichat chiaramente funziona bene, così come su Linux con avahi e pidgin, mentre non ho idea di come possa funzionare su windows, ma in teoria essendo un protocollo aperto...

ecco :( io ho **tutti** i client windows ....

Grazie delle info, non conoscevo questa possibilità.

Jabberd non è più nei repository... l'ho trovato su AUR ma manca lo schema per MySQL. Potresti renderlo disponibile?