XEN
XEN
Ormai da anni bazzico nel settore VoIp, ma non ho mai scritto un articolo in merito.
Questa volta, partendo dalla guida di freepbx a questo indirizzo http://wiki.freepbx.org/display/HTGS/Installing+FreePBX+on+Debian+Wheezy ed apportando alcune modifiche per renderlo adeguato alle mie esigenze ho partorito questa guida che permette di installare un centralino su XEN.
Premetto che questa istallazione non prevede aggiornamento oltre la 2.8, pertanto una volta istallato è meglio non aggiornare automaticamente i pacchetti, il rischio è quello di massacrare tutto.
Cominciamo con il creare la macchina virtuale XEN che ospiterà il server virtuale.
xen-create-image –hostname=centralino –vcpus=2 –pygrub –dist=precise –ip=192.168.0.1
Chiaramente cambiamo il nome e l’ip a nostro piacimento.
Preferisco assegnare 2 processori alla macchina virtuale XEN peché il centralino “mangia” parecchie risorse ed avendo necessità del “realtime” con 2 o più processori dovremmo riuscire ad ottenere un buon risultato.
Preferisco partire da una Ubuntu 64 bit perché mi trovo parecchie cose già istallate e configurate, il 64 bit lavora meglio del 32 quando è presente tanta ram come in questo caso e gestisce meglio il multi processore.
Quello che manca lo installo adesso all’interno della macchina XEN.
Come prima cosa effettuiamo l’upgrade del sistema perché lo xen-create-image non istalla l’ultima versione, quindi:
apt-get update
apt-get upgrade
quindi un sano REBOOT
poi istalliamo il software di contorno che ci facilita la vita:
apt-get install -y mc build-essential smartmontools zip unzip rar unrar arj lha zoo sox vim
Cominciamo con l’istallare il webserver, il mail server, il database che ospiterà le configurazioni il kernel e tutto il software necessario alla preparazione del centralino:
apt-get install -y libxml2-dev linux-headers-`uname -r` openssh-server bison flex apache2 php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd curl sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 lame libiksemel-dev libssl-dev libncurses5 g++ libapache2-mod-php5 mysql-server mysql-client gcc make
A questo punto ci verrà chiesta la password del database, per semplicità useremo 123456, ognuno userà quella che preferisce.
Adesso istalliamo postfix che servirà per farci mandare, in e-mail i messaggi della casella vocale e rimuoviamo l’eventuale exim.
quindi diamo in sequenza i comandi:
apt-get –purge remove ‘exim4*’
apt-get install -y postfix postfix-mysql
Quando richiesto selezioniamo sito internet e procediamo.
Installiamo il supporto bluetooth che ci tornerà utile per configurare cellulari o cuffiette.
apt-get install -y libbluetooth-dev bluez-utils bluez-hcidump
Adesso istalliamo l’interfaccia phpmyadmin che ci potrebbe tornare utile per amministrare il database.
apt-get install -y phpmyadmin
Quando richiesto diamo la password come sopra 123456
Con questo abbiamo installato tutti i pacchetti necessari all’interno della nostra virtual machine XEN, ed anche qualcosa in più.
Adesso diamo una pulitina, quindi:
apt-get clean
A questo punto, un sano ed onesto riavvio farà si che tutti i moduli necessari saranno caricati nel kernel.
reboot
Al riavvio….
Cominciamo con il costruire il nostro PBX vero e proprio.
Definiamo l’utente con il quale girerà il pbx, quindi aggiungiamo l’utente asterisk
adduser asterisk –disabled-password –no-create-home –gecos “Centralino VoIp”
Adesso ci diamo giù di compilatore perchè i pacchetti che ci servono non sono nei repositori e se anche ci fossero non sono adatti alle nostre esigenze.
L’ideale sarebbe compilare anche make, ma per questa volta sorvoliamo.
mkdir /usr/src/PBX
cd /usr/src/PBX
scarichiamo i sorgenti digitando tutto di seguito senza andare a capo.
wget http://mirror.freepbx.org/freepbx-2.7.0.tar.gz && wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-1.6.2.24.tar.gz && wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.6.1+2.6.1.tar.gz && wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-addons-1.6.2.4.tar.gz
un ls -la –si ci mostra questi 4 file
asterisk-1.6.2.24.tar.gz
asterisk-addons-1.6.2.4.tar.gz
dahdi-linux-complete-2.6.1+2.6.1.tar.gz
freepbx-2.7.0.tar.gz
adesso scompattiamo e compiliamo.
tar xvfz asterisk-1.6.2.24.tar.gz
cd asterisk-1.6.2.24
./configure
make && make install && make samples
cd ..
tar xvfz asterisk-addons-1.6.2.4.tar.gz
cd asterisk-addons-1.6.2.4
./configure –with-bluetooth
adesso dobbiamo correggere un errore nel sorgente
vi channels/chan_mobile.c
e con il comando / cerchiamo la parola opening, il vim ci porterà alla sezione che dobbiamo correggere
… case 1: /* find the opening quote (“) */
if (buf[i] == ‘”‘) {
state++;
}
case 2: /* m ….
La correggiamo in questo modo:
case 1: /* find the opening quote (“) */
if (buf[i] == ‘”‘) {
state++;
}
break;
case 2: /* mark the start of the number */
if (from_number) {
*from_number = &buf[i];
state++;
}
break;
/* fall through */
case 3: …
in pratica dobbiamo aggiungere break; nella sezione case 1 e case 2
per salvare ed uscire “ESC duepunti X”
Adesso compiliamo ed istalliamo
make && make install && make samples
cd ..
tar xvfz dahdi-linux-complete-2.6.1+2.6.1.tar.gz
cd dahdi-linux-complete-2.6.1+2.6.1
make all && make install && make config
cd ..
Ed il motore è stato compilato ed installato, adesso popoliamo il database
mysqladmin create asteriskcdrdb -p123456
mysqladmin create asterisk -p123456
mysql -p123456
GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY ‘123456’;
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY ‘123456’;
flush privileges;
quit;
Adesso è ora di accendere il ns motore
/usr/sbin/asterisk start
se tutto è andato bene, e se l’istallazione è stata fatta di default, le scritte diverranno bianche, diversamente la scritta rimarrà del colore originale.
scompattiamo l’interfaccia grafica
tar xvfz freepbx-2.7.0.tar.gz
cd freepbx-2.7.0
popoliamo le tabelle
mysql -p123456 asterisk < ./SQL/newinstall.sql
mysql -p123456 asteriskcdrdb < ./SQL/cdr_mysql_table.sql
una volta popolate le tabelle:
./install_amp
Questo è un passo rognoso, sbagliare qui significa compromettere tutta l’istallazione
Dove chiede l’indirizzo ip digitare l’indirizzo ip della macchina, nel nostro caso 192.168.0.1, quindi alla domanda:
Enter the IP ADDRESS or hostname used to access the AMP web-admin:
[xx.xx.xx.xx]
dobbiamo rispondere 192.168.0.1
A tutte le domande dove chiede la password dobbiamo rispondere 123456 o con la password che abbiamo stabilito in precedenza.
A tutte le altre cose possiamo dare semplicemente invio.
Terminato istruiamo apache a girare con i permessi del centralino.
sed -i ‘s/^\(User\|Group\).*/\1 asterisk/’ /etc/apache2/apache2.conf
aggiungiamo il webserver al gruppo del PBX
adduser www-data asterisk
Creiamo i file mancanti e sistemiamo i permessi
touch /var/www/html/panel/variables.txt
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
chown -R asterisk /var/www/
chown -R asterisk:asterisk /etc/amportal.conf
mkdir -p /var/run/asterisk
chown asterisk:asterisk /var/run/asterisk
Interrompiamo l’esecuzione del webserver per poi riattivarlo con il nuovo utente.
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
sistemiamo le ultime cose prima di riavviare
echo “ARI_ADMIN_USERNAME=admin” >>/etc/amportal.conf
echo “ARI_ADMIN_PASSWORD=123456” >>/etc/amportal.conf
Abbiamo quasi finito, dobbiamo sistemare un file che reca un errore da qualche parte, troppo complicato da fixare, pertanto lo sistemiamo a mano adesso.
nel file /etc/asterisk/manager.conf la password è errata, pertanto lo editiamo a manina e mettiamo il nostro bel 123456 accanto alla richiesta di password.
A questo punto dobbiamo insegnare al nostro server che deve accendere il motore asterisk all’avvio, quindi
cd /etc/rc2.d
ln -s /usr/local/sbin/amportal S70amportal
facciamo partire il PBX a mano e controlliamone il funzionamento:
/usr/local/sbin/amportal
puntare il browser su http://192.168.0.1/html
se tutto è andato bene dovremmo poter vedere la pagina del centralino.
Prima di iniziare la programmazione un reboot ci sta benissimo.
reboot
Poiché xen mi ha istallato tutto in inglese, volendo modificare la lingua dobbiamo istallare i pacchetti necessari.
apt-get install -y language-pack-it
locale-gen it_IT
dpkg-reconfigure locales
locale -a
Per ragioni di sicurezza php è impostato per poter utilizzare al massimo 8Mb di memoria, poiché il centralino ruspa parecchio è necessario modificare il parametro post_max_size in /etc/php5/apache2/php.ini portandolo a 128Mb
Il file di configurazione della macchina virtuale andrebbe impostato così
vcpus = ‘2’
memory = ‘8192’
root = ‘/dev/xvda1 ro’
bootloader = ‘/usr/lib/xen-4.1/bin/pygrub’
Il centralino è estremamente vulnerabile pertanto è opportuno configurare a dovere il firewall e ricordo che: IL NAT NON È UN FIREWALL
Comunque si decida di configurare il proprio centralino, con provider voip o meno, questo ha in se del denaro, pertanto è particolarmente appetibile.
Non serve avere password complicate sul database o password di root irricordabili, è importante avere un buon firewall davanti al centralino e per buon firewall non intendo un router adsl da 15 euro.
Ringrazio freepbx per l’ottimo software ed il padrone del sito http://francofait.wordpress.com/2012/06/16/installare-centralino-voip-su-ubuntu-prima-parte/ che ha fornito parecchi spunti.
Nonché il sito http://www.lovisolo.com dal quale ho tratto altri spunti, miscelando tutto assieme è saltata fuori questa guida scritta, come sempre mentro effettuo l’istallazione.
Più di qualcuno mi ha fatto notare che sul mirror di freebsd non c’è più il software di cui io ho messo il link.
L’articolo non lo cambio, è giusto lasciare il link anche se questo è rotto, tuttavia aggiungo questo link dal quale è possibile prelevare TUTTI i pacchetti necessari.
https://drive.google.com/open?id=0Bx2rhWg3VBsXZEdLOFhVM0VnOTQ
Qualora ci fossero problemi nel trasferire il file, vi prego di scrivermi e ve lo invio in altro modo.Daltronde questo sito è ospitato gratuitamente da una delle aziende per le quali lavoro, pertanto non posso chiedere più di quanto ho ottenuto.
Utilizzando freepbx mi sono accorto che dopo qualche tempo (random) smette di funzionare il log presente nel report, pertanto il traffico telefonico non viene più registrato.
È sufficiente aggiungere una riga al crontab per far ripartire il log, io lo faccio partire tutti i giorni a mezza notte 🙂
00 00 * * * /usr/sbin/asterisk -rx reload
Altro BUG tremendo, purtroppo non sono un programmatore, sono un sistemista, pertanto i bug li fixo a livello di sistema anche se questo non è un fix definitivo.
Freepbx comincia a farmi girare la pazienza (per non essere volgare).
Li ho contattati e mi hanno risposto che la mia segnalazione non è replicabile, invece ho istallato diversi sistemi e tutti, anche se in momenti differenti, presentano lo srtesso BUG, ovvero quando gli girano le scatole smette di funzionare il log delle chiamate, meglio conosciuto col nome di CDR.
Io ho risolto da sistemista, quindi vi prego di perdonare la brutalità, se avessi un programmatore volenteroso si potrebbe fixare il file php ed insultare quelli di freepbx ai quali ricordo che questo non è il modo giusto di fare opensource.
Capisco che devono guadagnare, anche io guadagno con l’opensource, ma lo faccio in modo differente.
Comunque, tornando a noi, posizioniamo un file dove ci pare con questo contenuto:
use asteriskcdrdb;
SELECT * INTO OUTFILE ‘/tmp/results.txt’ FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘\”‘ LINES TERMINATED BY ‘\n’ FROM cdr WHERE calldate BETWEEN ‘$(date -d “$(date) -1 month” +%Y-%m-%d)’ AND ‘$(date +%Y-%m-%d)’;
io l’ho posizionato in /etc/asterisk/results_db.sql
poi creiamo uno script e lo mettiamo dove vogliamo, io l’ho messo in /etc/asterisk/cdrscript.sh
dento c’è scritto:
#! /bin/bash
rm -rf /tmp/results.txt
sync
mysql -uroot -p123456 < /etc/asterisk/results_db.sql /usr/local/sbin/amportal restart a questo punto dal crontab, ogni giorno alle 23:55 faccio partire il mio script 55 23 * * * /etc/asterisk/cdrscript.sh > /dev/null 2>&1
Teoricamente non è una soluzione definitiva, ma visto che quelli di freepbx se ne fottono, finchè un anima pia non fixa il codice questo sistema va egregiamente bene.
Altro piccolo bug.
In questi file /etc/asterisk/cdr_mysql.conf in alcuni casi, viene riscritta la password con degli spazi.
Pertanto, una volta corretta la password, bisogna rimuovere i permessi di scrittura.
chmod -w /etc/asterisk/cdr_mysql.conf