lunedì, febbraio 04, 2008

OpenIMSCore: guida all'installazione e alla configurazione

Come si può notare, è da parecchio che non scrivo. Sarà il periodo di stage presso Accenture (Roma) e sarà il tempo impiegato allo scrivere la tesi, ma non riesco proprio ad investire tempo nel blog. Oggi vi scrivo e traduco una guida che sto utilizzando per installare e testare IMS.

Cosa è IMS?


L'architettura di rete IP Multimedia Subsystem (IMS) è divenuta standard grazie alla collaborazione di Telecoms & Internet converged Services & Protocols for Advanced Networks (TISPAN) e Il Third Generation Partnership Project (3GPP), commissioni istituite dall'organo di standardizzazione European Telecommunications Standards Institute (ETSI).
IMS (IP Multimedia Subsystem) svolge un ruolo importante offrendo dei servizi chiave come la Quality of Service (QoS), la sicurezza, la messaggistica istantanea (Instant Messaging), IP Television (IPTV), etc. sia in reti fisse che in reti mobili.
La struttura base di IMS che permette di supportare i servizi di IM e di chat è la seguente:
  • Home Subscriber Server (HSS)

  • Proxy - Call Session Control Function (P-CSCF)

  • Interrogating - Call Session Control Function (I-CSCF)

  • Serving - Call Session Control Function (S-CSCF)


Per maggiori informazioni, sull'architettura e sui componenti vi consiglio di dare una lettura a http://en.wikipedia.org/wiki/IP_Multimedia_Subsystem.



Cosa è OpenIMSCore?


OpenIMSCore è un progetto OpenSource (di Fraunhofer FOKUS, ente tedesco che focalizza la sua attenzione nella ricerca e sviluppo di nuove tecnologie) che ha prodotto l'omonimo software: tale software implementa le funzionalità delle 3 tipologie di CSCF e una versione approssimativa, ma comunque efficace, dell'HSS. Il progetto OpenIMSCore appartiente ad un progetto OpenSource OpenIMS Playground (gestito dallo stesso gruppo FOKUS) molto più esteso che cerca di implementare tutti i servizi definiti dallo standard IMS.

Per maggiori informazioni su OpenIMSCore e su OpenIMS Playground vi consiglio di visionare i seguenti siti:
http://www.openimscore.org/
http://www.fokus.fraunhofer.de/bereichsseiten/testbeds/ims_playground/index.php?lang=en

Guida d'installazione


La seguente guida d'installazione è stata testata su due versioni di Ubuntu: Ubuntu 7.04 Feisty Fawn e Ubuntu 7.10 Gutsy Gibbon. Inoltre, in questa guida, al fine di testare la corretta funzionalità del sistema proporrò l'installazione e la configurazione di un client SIP/IMS UctIMSClient (client sviluppato dall'Università di Cape Town in Sudafrica: http://uctimsclient.berlios.de/) che permette di capire se i messaggi SIP vengono elaborati correttamente dall'architettura. Se non si desidera utilizzare tale software si può utilizzare qualsiasi client SIP/IMS tra i quali sottolineo:

In questi casi, almeno in prima istanza non propongo ne una guida d'installazione ne una configurazione. Comunque per chi volesse provarli, tali software sono facili da configurare e le informazioni per configurarle possono essere facilmente ricavate dalle informazioni utilizzate per configurare UctIMSClient, il quale da un punto di vista didattico risulta essere il più completo.

Per chi volesse implementare un numero maggiore di servizi e componenti, l'Università di Cape Town ha creato il codice e la relativa guida per installarli. In particolare, i servizi prodotti e le relative guide d'installazione sono:
La mia guida sarà una fusione ed una integrazione con delle configurazioni personali che hanno permesso di far girare correttamente il software con semplicità. In particolare, le guide usate sono:
Come si può notare, la maggiorparte delle guide gira su Ubuntu e in molti casi su Ubuntu 7.10 Gutsy Gibbon.

OpenIMSCore: download del codice sorgente


Per scaricare il codice sorgente abbiamo bisogno del pacchetto subversion:

sudo apt-get install subversion

Creiamo le cartelle nel quali verrà posto il codice sorgente scaricato:

sudo mkdir /opt/OpenIMSCore/

Diamo i diritti all'utente con cui accediamo di solito di poter lavorare sulla cartella richiesta /opt/OpenIMSCore:
sudo chown -R username /opt/OpenIMSCore/

dove al posto di username inseriamo il nome utente dell'utente che siamo soliti utilizzare.
Adesso creiamo le due cartelle in cui viene posto il codice: in una verrà posto il codice che compilato produrrà le funzionalità degli CSCF e nell'altra verrà posto il codice che compilato produrrà le funzionalità di HSS.
cd /opt/OpenIMSCore
mkdir ser_ims
mkdir FHoSS

Scarichiamo adesso il codice:
svn checkout http://svn.berlios.de/svnroot/repos/openimscore/ser_ims/trunk ser_ims
svn checkout http://svn.berlios.de/svnroot/repos/openimscore/FHoSS/trunk FHoSS

In questo caso, si considera che il collegamento ad internet avvenga in maniera diretta. Se ci troviamo dietro ad un proxy dobbiamo configurare correttamente subversion.

OpenIMSCore: installazione dei pacchetti utili per la compilazione


Abbiamo bisogno di un certo numero di pacchetti per la compilazione. Per installarli lanciare da terminale il seguente comando:
sudo apt-get install sun-java6-jdk mysql-server libmysqlclient15-dev libxml2 libxml2-dev bind9 ant flex bison


OpenIMSCore: configurare le impostazioni del Server DHCP e del Server DNS


Siccome stiamo imponendo che il server DNS giri sulla nostra macchina, allora dobbiamo cancella il # e rende attiva l'opzione prepend domain-name-servers 127.0.0.1; nella file /etc/dhcp3/dhclient.conf. Ricordati di aprire il seguente file con i diritti di root.

Copiamo il file open-ims.dnszone nella cartella /etc/bind:
sudo cp /opt/OpenIMSCore/ser_ims/cfg/open-ims.dnszone /etc/bind/

Ricordo che bind è un server DNS OpenSource.
Aggiungiamo in coda al file /etc/bind/named.conf.local le seguenti righe:

zone "open-ims.test" {

type master;

file "/etc/bind/open-ims.dnszone";

};

Riavviamo il server DNS con il seguente comando:

sudo /etc/init.d/bind9 restart

Dobbiamo fare in modo che il server DNS possa essere contattato dal nostro PC: per questo motivo editiamo il file /etc/resolv.conf aggiungendo le seguenti righe:
search open-ims.test
nameserver 127.0.0.1

Verifichiamo che funzioni correttamente pingando pcscf.open-ims.test

ping pcscf.open-ims.test

Di regola, dovremmo ottenere risposta. Se il ping non va, riavviamo l'interfaccia di rete lo (localhost) o attiviamola, nel caso non sia stata attivata:

sudo /etc/init.d/networking restart

e rieseguiamo il ping attraverso il comando precedentemente descritto.
Questa è la fase più complessa di tutta l'installazione in quanto in molti casi il software non gira correttamente a causa dell'errata configurazione del server bind.

OpenIMSCore: configurare i database


Così come succede nell'architettura IMS, anche in OpenIMSCore viene implementato un database in MySql. Per questo motivo bisogna settarlo introducendo le informazioni sia riferite a I-CSCF che ad HSS.
Lanciamo i seguenti comandi:
cd /opt/OpenIMSCore
mysql -u root -p < ser_ims/cfg/icscf.sql
mysql -u root -p < FHoSS/scripts/hss_db.sql
mysql -u root -p < FHoSS/scripts/userdata.sql

Ci verrà chiesta una password che di default non viene settata in MySql: per questo motivo premiamo semplicemente Invio.

OpenIMSCore: Compilazione dei sorgenti


Compiliamo inizialmente i CSCF. Per farlo lanciamo i seguenti comandi:
cd /opt/OpenIMSCore/ser_ims/
sudo make install-libs all

La durata della compilazione varia in base alle caratteristiche della macchina in cui viene installato il software. In genere, la durata si aggira tra i 5-10 minuti.
Per compilare invece HSS (FHoSS nel OpenIMSCore) dobbiamo settare la variabile d'ambiente di JAVA attraverso il comando:
export JAVA_HOME="/usr/lib/jvm/java-1.6.0-sun"

Siccome tale variabile d'ambiente deve essere settata ogni qualvolta si lancia lo script relativo all'esecuzione di FHoSS, vi consiglio di modificare .bashrc presente nella propria home dell'utente:

gedit ~/.bashrc

Incolliamo alla fine la seguente stringa:
export JAVA_HOME="/usr/lib/jvm/java-1.6.0-sun"

salviamo e chiudiamo il file. Lanciamo:

source ~/.bashrc

per rendere effettive le modifiche alle variabili d'ambiente.
Compiliamo FHoSS attraverso i seguenti comandi
cd /opt/OpenIMSCore/FHoSS
ant compile deploy

Infine modifichiamo il file ZhDataType.xsd presente nella cartella /opt/OpenIMSCore/FHoSS/xsd/
gedit /opt/OpenIMSCore/FHoSS/xsd/ZhDataType.xsd

e sostituiamo la linea
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
con
schemaLocation="file:///opt/OpenIMSCore/FHoSS/xsd/xml.xsd"/>


OpenIMSCore: Esecuzione dei vari script


Per facilitare l'esecuzione copiamo tutti i file di configurazione di tutti CSCF e di FHoSS e i relativi script di esecuzione nella cartella /opt/OpenIMSCore/:
cp /opt/OpenIMSCore/ser_ims/cfg/* /opt/OpenIMSCore/

Infine lanciamo tutte le entità di OpenIMSCore. Vi consiglio di aprire una nuova scheda (Ctrl+Masc+T) ad ogni entità e di settare il titolo della scheda.
Per lanciarce P-CSCF
/opt/OpenIMSCore/pcscf.sh

Per lanciare I-CSCF
/opt/OpenIMSCore/icscf.sh

Per lanciare S-CSCF
/opt/OpenIMSCore/scscf.sh

Per lanciare FHoSS
/opt/OpenIMSCore/fhoss.sh


OpenIMSCore: testare OpenIMSCore e installare UctIMSClient


Per testare OpenIMSCore, bisogna installare UctIMSClient (nel mio caso). Se desiderate installare o utilizzare un altro software che supporta SIP così come spiegato nell'introduzione.

UctIMSClient: Download e installazione del pacchetto .deb


Nel caso il Sistema Operativo sul quale avete installato OpenIMSCore sia Ubuntu 7.04 Feisty Fawn, dovete scaricare la versione 1.07 di UctIMSClient
cd ~/Desktop
wget http://download.berlios.de/uctimsclient/uctimsclient1.0.7.deb

Nel caso il Sistema Operativo sul quale avete installato OpenIMSCore sia Ubuntu 7.10 Gutsy Gibbon, dovete scaricare la versione 1.09 (l'ultima) di UctIMSClient:
cd ~/Scrivania
wget http://download.berlios.de/uctimsclient/uctimsclient1.0.9.deb

Per l'installazione possiamo utilizzare o il doppio click o utilizzare il comando:
sudo dpkg -i uctimsclient1.0.*.deb

Durante l'installazione, vengono installati e configurati vari pacchetti scaricati dai repository ufficiali di Ubuntu.

UctIMSClient: configurazione


Bisogna inizialmente lanciare UctIMSClient, aprendo una nuova scheda e impostate il titolo Bob:
uctimsclient

Di regola, le impostazioni di default di UctIMSClient sono conformi alle informazioni contenute nel HSS e conformi alla topologia della rete. Nella figura sottostante viene presentata la configurazione dell'utente Bob che è già configurato nel database . Le stesse configurazioni a meno del Public User Identity, Private User Identity e della Password.


Comunque nel caso di Bob:
  • Public User Identity: sip:bob@open-ims.test
  • Private User Identity: bob@open-ims.test
  • Password: bob


Aprite inoltre un altra scheda con il titolo di Alice e lanciate un altro UctIMSClient:
uctimsclient


Nel caso di Alice:
  • Public User Identity: sip:alice@open-ims.test
  • Private User Identity: alice@open-ims.test
  • Password: alice

UctIMSClient: invio del messaggio register deregister e chiamata SIP


Per eseguire la register, bisogna semplicemente cliccare sul tasto Register as Alice nel caso del terminale di Alice, così come in figura sottostante; nel caso di Bob bisogna cliccare sul tasto Register as Bob nel caso del terminale di Bob.



Basta cliccare sul tasto Deregister nel UctIMSClient per eseguire la deregister dell'utente desiderato a cui appartiene il client UctIMSClient.
Consiglio inoltre attraverso di tasti di Call or Answer, ricordatoci di indicare correttamente l'indirizzo SIP al quale rivolgere la chiamata. Nel caso si utilizzi il terminale di Alice, l'indirizzo al quale rivolgere la chiamate è sip:bob@open-ims.test, cosi come nella figura sottostante.


OpenIMSCore: aggiungere nuovi utente e gestire HSS (opzionale)


Per aggiungere un nuovo utente e per gestire l'HSS, siamo facilitati dall'interfaccia grafica che viene chiamata attraverso un browser web.
Per farlo, aprite Firefox e scrivere dentro:
http://localhost:8080

Vi verranno chieste Username e Password ed inserite le seguenti info:
Username: hssAdmin
Password: hss

Ricordo che è case-sensitive.

OpenIMSCore: Customizzare la rete IMS


Potete cambiare il realm (nel caso delle impostazioni di default era open-ims.test) e l'indirizzo IP di tutta la rete (nel caso delle impostazioni di default era 127.0.0.1).
Gli sviluppatori hanno realizzato uno script di bash chiamato configurator.sh che permette di modificare i file di configurazione utili per una customizzazione della rete IMS su un unica macchina, cioè tutti gli script delle varie entità IMS devono essere lanciati dalla stessa macchina.

E' importante ricordare che questo script può essere usato solo una volta partendo da una installazione andata a buon fine: in pratica, se installate correttamente OpenIMSCore, potete usare configurator.sh; ma se modificate i file di configurazione manualmente o utilizzate configurator.sh dopo l'installazione di OpenIMSCore, non potete riusare lo script configurator.sh e siete costretti o a modificare configurator.sh al fine che rendi effettivi i nuovi cambi o dovete modificare manualmente i file di configurazione (operazione complessa per l'utente medio)

Lo script configurator.sh si trova, se avete seguito questa guida, in /opt/openIMSCore. Per customizzare la rete IMS, lanciare:

./configurator.sh pcscf.cfg icscf.cfg icscf.xml scscf.cfg scscf.xml ser_ims/cfg/icscf.sql FHoSS/deploy/DiameterPeerHSS.xml FHoSS/deploy/hss.properties FHoSS/scripts/hss_db.sql FHoSS/scripts/userdata.sql

Vi verranno chiesti, come già detto precedentemente, il realm e l'indirizzo IP.
Una volta fatto ciò, bisogna aggiornare il database utlizzando i seguenti comandi:
cd /opt/OpenIMSCore
mysql -u root -p < ser_ims/cfg/icscf.sql
mysql -u root -p < FHoSS/scripts/hss_db.sql
mysql -u root -p < FHoSS/scripts/userdata.sql

Se avete modificato il realm o l'IP, dovete rivedere le informazioni degli utenti e dei network setting presenti in HSS.
Infine, dovete riavviare le varie entità. In particolare, dovete bloccare i 3 cscf utilizzando Ctrl+C mentre dovete bloccare FHoSS scrivendo exit. Riattivate i servizi usando rispettivamente nelle 4 schede i comandi:
Per lanciarce P-CSCF
/opt/OpenIMSCore/pcscf.sh

Per lanciare I-CSCF
/opt/OpenIMSCore/icscf.sh

Per lanciare S-CSCF
/opt/OpenIMSCore/scscf.sh

Per lanciare FHoSS
/opt/OpenIMSCore/fhoss.sh


Riferimenti e supporto


Vi elenco i riferimenti a cui mi sono rifatto.



Per quanto riguarda il supporto, vi indico i possibili modi per avere assistenza:

Spero che la guida sia utile e comprensibile nonchè corretta. Questo progetto è veramente interessante e vi posso dire che sono riuscito ad installarlo su 4 macchine virtuali (che possono essere considerate 4 macchine reali), ognuna con un indirizzo IP diverso e su ognuna lanciavo una entità diversa. Il tutto, definito in un realm diverso da open-ims.test, funziona correttamente e successivamente proverò ad accedere alla rete IMS con i client SIP/IMS installato sui PC in rete con le macchine virtuali e con il client OpenIC installato su un palmare (se riesco a trovarlo).

Per piacere testatelo e fatemi sapere se ci sono errori nella guida o se commette errori nell'installazione o nella configurazione di OpenIMSCore. Quando diventerà stabile, penso che la farò rientrare nella documentazione di ubuntu-it.

Alla prossima.

Continua a leggere!