Hola, después de mucho tiempo sin escribir en el blog, reaparezco con un tutorial paso a paso. En esta ocasión vamos a trastear un poco con Asterisk.

Asterisk es un backend VOIP open source, ampliamente usado en todo el mundo. Nos sorprendería la cantidad de appliances que se venden que ocultan en su interior un Asterisk. Se trata de un software que funciona bajo un sistema Linux, y no requiere de licencias de ningún tipo (ni de Sistema Operativo, a no ser que se use SLES o RedHat Enterprise…).

Existen multitud de distribuciones Linux preparadas con Asterisk, entre ellas destaco 3:

  • AsteriskNOW: La parte Free de Digium distribuye esta appliance gratuita basada en Centos y Asterisk 1.6.
  • Trixbox Community Edition: La última versión estable también está basada en Centos 5 y Asterisk 1.6
  • Elastix: Es la única de las destacadas que sólo tiene versión Community, no tiene variante de pago. Basada en Centos 5.5 y Asterisk 1.6

El problema común de todas ellas es que no usan la versión Asterisk 1.8, las dos primeras están muy encaradas a las versiones de pago, con lo que la ayuda no abunda mucho en sus respectivos foros. La que más me ha gustado ha sido Elastix, de hecho ha sido xon la que más he podido jugar. ¿El problema? Pues  que estas distros llevan demasiadas cosas: Que si agenda, que si servidor de correo, un CRM pre-instalado (vtiger, muy bueno, os lo recomiendo), servidor de Fax, un sistema de mensajería interno llamado Openfire… Demasiados componentes, la verdad.

Yo necesito un servidor Asterisk cuanto más pequeño y menos componentes mejor, basado en un sistema estable, y si puede ser con las últimas versiones de Asterisk, pues mejor que mejor!! Además de poderle instalar las Tools de VMware sin complicaciones.

Objetivo:

  • Sistema Operativo estable: Vamos a usar Debian 6: Fácil de instalar, posibilidad de instalar un sistema mínimo (no necesitamos consola gráfica, manejaremos Asterisk desde una bonita interfaz WEB).
  • Última versión de Asterisk estable: Asterisk 1.8.7.1.
  • Una consola de administración para Asterisk basada en WEB: FreePBX
  • No necesitamos instalar DAHDI, ya que no tenemos tarjetas FXO físicas, sino que conectaremos las líneas de teléfono a través de gateways de telefonía SIP, y los teléfonos también serán SIP. Esto lo veremos en futuros post.

Vamos allá:

Creamos una nueva máquina virtual en nuestra infraestructura (qué cómodo….), la he aprovisionado con 1 tarjeta de red, 20 GB de disco duro (Thin provisioning), 1vCPU y 1GB de ram.

Comenzamos con la instalación, para ello usamos la ISO de Debian mínima (que realiza una instalación desde Internet, así que necesitaremos que la máquina virtual adquiera IP y tenga acceso a Internet). Seleccionaremos la instalación normal, no gráfica (la de los frikis!!!)

Seleccionamos el idioma de la instalación, se configura la red (en principio si tenemos un servidor DHCP en la red, podremos realizar la instalación, después ya configuraremos correctamente la red, por esto no os preocupéis), pondremos un nombre a la máquina y un nombre de dominio (opcionalmente). Nos pedirá una clave del super-usuario (root), y nos pedirá los datos de un usuario “normal” sin privilegios, es necesario crear uno… Ubicación de la zona horaria, y nos vamos al particionado, he usado el particionado Manual, y usado el siguiente esquema:

La explicación:

  • Partición primaria, marca de arranque, 10GB, ext4 y pto de montaje /
  • Partición primaria, 4 GB, ext4, pto de montaje /var: Los logs pueden crecer, no harán que el sistema de ficheros principal pete porque se llena la partición de logs…
  • Partición primaria, 0.5 GB, swap. No es conveniente swaps grandes en máquinas virtuales, en caso de quedarnos sin RAM (deberemos monitorizar) aprovisionaremos con más RAM la VM.
  • Partición primaria, 7 GB, ext4, pto montaje /home

A continuación configuramos los repositorios, elegiremos los servidores de Estados Unidos, que suelen ir mejor que los de aquí. Recargará la información de los repositorios, y podremos elegir los paquetes del sistema que vamos a instalar:

Sólo seleccionamos:

  • Servidor ssh
  • Utilidades estándar del sistema

Sólo eso!! El resto ya lo instalaremos luego manualmente. Ahora se instalará el sistema, descargando los paquetes necesarios desde Internet. Al finalizar nos preguntará si deseamos instalar GRUB en el registro MBR, aceptamos y reiniciamos.

Al arrancar la VM por primera vez veremos esto:

Nos logearemos como root, y veremos la IP que tenemos asignada, así podremos acceder por ssh y continuar el proceso de manera más cómoda (desde nuestra consola podremos copiar y pegar texto, el cursor irá más rápido, etc…)

Una vez obtenida la IP, ya podemos cerrar la consola de nuestra máquina virtual y continuar desde un terminal (si trabajamos en Linux, o desde un programita tipo Putty si estamos en Windows)

$ ssh -lroot 10.10.1.113
The authenticity of host ’10.10.1.113 (10.10.1.113)’ can’t be established.
RSA key fingerprint is 73:d4:65:52:28:91:3d:c3:26:5c:2f:c5:b4:b1:3e:7f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’10.10.1.113′ (RSA) to the list of known hosts.
root@10.10.1.113′s password:

Una vez dentro del sistema comprobaremos el espacio libre en disco:

root@asterisk:~# df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda1             9,2G  603M  8,2G   7% /
tmpfs                 500M     0  500M   0% /lib/init/rw
udev                  495M  104K  495M   1% /dev
tmpfs                 500M     0  500M   0% /dev/shm
/dev/sda4             6,4G  143M  6,0G   3% /home
/dev/sda2             3,7G  190M  3,3G   6% /var

Y la memoria RAM usada:

root@asterisk:~# free -m
total       used       free     shared    buffers     cached
Mem:           999         60        939          0          5         21
-/+ buffers/cache:         32        966
Swap:          476          0        476

Perfecto, usamos más o menos 1 GB de disco y unos 60 MB de RAM, nada mal. No olvidemos que uno de nuestros objetivos es que la máquina tiene que ser lo más pequeña posible.

Instalamos los pre-requisitos:

root@asterisk:~# apt-get update

root@asterisk:~# apt-get upgrade

Para compilar e instalar Asterisk necesitaremos:

root@asterisk:~# apt-get install build-essential linux-headers-`uname -r` libncurses5-dev libssl-dev libxml2-dev gawk sudo

Para instalar y usar FreePBX necesitaremos:

root@asterisk:~/asterisk_src# apt-get install apache2 php5 php5-mysql php-db mysql-server libapache2-mod-php5 php5-gd php-pear sox curl

Nos pedirá que introduzcamos contraseña de root para mysql server. Recordaremos esta contraseña, la necesitaremos más tarde al re-configurar mysql para configurar las bases de datos necesarias para FreePBX.

root@asterisk:~/asterisk_src# pear install DB

Descargamos las fuentes de Asterisk y FreePBX:

root@asterisk:~# cd /root/
root@asterisk:~# mkdir asterisk_src
root@asterisk:~# cd asterisk_src/
root@asterisk:~/asterisk_src# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.7.1.tar.gz
root@asterisk:~/asterisk_src# wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.12.tar.gz
root@asterisk:~/asterisk_src# wget http://downloads.asterisk.org/pub/telephony/libss7/releases/libss7-1.0.2.tar.gz
root@asterisk:~/asterisk_src# wget http://mirror.freepbx.org/freepbx-2.9.0.tar.gz

Veamos lo que tenemos:

root@asterisk:~/asterisk_src# ls -alh
total 50M
drwxr-xr-x 2 root root 4,0K oct 29 20:13 .
drwx—— 4 root root 4,0K oct 29 20:10 ..
-rw-r–r– 1 root root  28M oct 17 20:17 asterisk-1.8.7.1.tar.gz
-rw-r–r– 1 root root  22M jun 12 18:09 freepbx-2.9.0.tar.gz
-rw-r–r– 1 root root 332K jul  6 18:46 libpri-1.4.12.tar.gz
-rw-r–r– 1 root root  60K oct 28  2008 libss7-1.0.2.tar.gz

Comenzamos descomprimiendo todo:

root@asterisk:~/asterisk_src# tar -xzvf asterisk-1.8.7.1.tar.gz

root@asterisk:~/asterisk_src# tar -xzvf freepbx-2.9.0.tar.gz

root@asterisk:~/asterisk_src# tar -xzvf libpri-1.4.12.tar.gz

root@asterisk:~/asterisk_src# tar -xzvf libss7-1.0.2.tar.gz

Ejecutaremos los siguientes scripts de Asterisk, los cuales arrastrarán la instalación de todas las dependencias del sistema requeridas:

root@asterisk:~/asterisk_src# asterisk-1.8.7.1/contrib/scripts/install_prereq install

(Cuando nos pregunten por el código de la región, en la configuración del paquete libvpb0, elegiremos 34 si estamos en España)

root@asterisk:~/asterisk_src# asterisk-1.8.7.1/contrib/scripts/install_prereq install-unpackaged

El orden de instalación será:

>libPRI

>libSS7

>Asterisk

>FreePBX

libPRI: Provee de interconexión con redes E1, T1 y otros protocolos

root@asterisk:~/asterisk_src# cd libpri-1.4.12/

root@asterisk:~/asterisk_src/libpri-1.4.12# make

root@asterisk:~/asterisk_src/libpri-1.4.12# make install

root@asterisk:~/asterisk_src/libpri-1.4.12# cd ..

libSS7: Es una dependencia de Asterisk,  así que la instalamos.

root@asterisk:~/asterisk_src# cd libss7-1.0.2/
root@asterisk:~/asterisk_src/libss7-1.0.2# make
root@asterisk:~/asterisk_src/libss7-1.0.2# make install
root@asterisk:~/asterisk_src/libss7-1.0.2# cd ..

Asterisk: no hace falta decir más…

root@asterisk:~/asterisk_src# cd asterisk-1.8.7.1/
root@asterisk:~/asterisk_src/asterisk-1.8.7.1# ./configure

root@asterisk:~/asterisk_src/asterisk-1.8.7.1# contrib/scripts/get_mp3_source.sh

root@asterisk:~/asterisk_src/asterisk-1.8.7.1# make menuconfig

Se abrirá la ventana de selección de componentes. Seleccionaremos app_mysql, app_saycountpl, cdr_mysql, format_mp3, y res_config_mysql en la sección Add-ons:

En la sección Core Sound Packages, seleccionaremos CORE-SOUNDS-ES-WAV, y también CORE-SOUNDS-EN-WAV

El resto de opciones las dejaremos tal cual, y le daremos a “Save & Exit”.

El siguiente paso tardará dependiendo de la velocidad de la vCPU…

root@asterisk:~/asterisk_src/asterisk-1.8.7.1# make

root@asterisk:~/asterisk_src/asterisk-1.8.7.1# make install
root@asterisk:~/asterisk_src/asterisk-1.8.7.1# make config

root@asterisk:~/asterisk_src/asterisk-1.8.7.1# cd ..

Con esto ya tenemos Asterisk instalado. Deberemos realizar unos cambios, y poner en marcha asterisk antes de realizar el último paso (instalar freePBX)

root@asterisk:~/asterisk_src# groupadd asterisk
root@asterisk:~/asterisk_src# useradd -c “asterisk PBX” -d /var/lib/asterisk -g asterisk asterisk

root@asterisk:~/asterisk_src# chown asterisk. /var/run/asterisk
root@asterisk:~/asterisk_src# chown -R asterisk. /etc/asterisk
root@asterisk:~/asterisk_src# chown -R asterisk. /var/{lib,log,spool}/asterisk
root@asterisk:~/asterisk_src# chown -R asterisk. /var/www/
root@asterisk:~/asterisk_src# /etc/init.d/asterisk start

Llegamos al último paso:

FreePBX: Es un Frontend WEB de configuración para Asterisk. Necesita una base de datos mysql y un servidor Web con PHP, usaremos Apache2 y php5.

Primero preparamos el servidor mysql:

root@asterisk:~/asterisk_src# /etc/init.d/mysql stop

root@asterisk:~/asterisk_src# /usr/bin/mysql_install_db

root@asterisk:~/asterisk_src# /etc/init.d/mysql start

root@asterisk:~/asterisk_src# mysqladmin create asteriskcdrdb -p

root@asterisk:~/asterisk_src# mysql –user=root -p asteriskcdrdb < freepbx-2.9.0/SQL/cdr_mysql_table.sql

root@asterisk:~/asterisk_src# mysqladmin create asterisk -p

root@asterisk:~/asterisk_src# mysql –user=root -p asterisk < freepbx-2.9.0/SQL/newinstall.sql
root@asterisk:~/asterisk_src# mysql –user root -p

mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY ‘amp109′;
mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY ‘amp109′;

mysql> quit

Además, estableceremos la dirección IP con la que el servidor se va a quedar, así podremos configurar más tarde el panel Flash del FreePBX, para ello editaremos /etc/network/interfaces

Ya tenemos preparado el entorno para ejecutar la instalación de FreePBX, vamos allá:

root@asterisk:~/asterisk_src# cd freepbx-2.9.0/

root@asterisk:~/asterisk_src/freepbx-2.9.0# ./install_amp

La configuración la dejaremos por defecto toda excepto la ruta raíz del servidor apache, que será /var/www en vez de /var/www/html-

root@asterisk:~/asterisk_src/freepbx-2.9.0# amportal stop

root@asterisk:~/asterisk_src/freepbx-2.9.0# /etc/init.d/apache2 stop

Ahora deberemos modificar la configuración de Apache, para ajustar parámetros de PHP y para que apache2 se ejecute como el usuario asterisk.

root@asterisk:~/asterisk_src/freepbx-2.9.0# vim.tiny /etc/apache2/envvars

Modificamos las líneas:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Por:

export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

Cambiamos la configuración de PHP en estos dos archivos:

root@asterisk:~/asterisk_src/freepbx-2.9.0# vim.tiny /etc/php5/apache2/php.ini

root@asterisk:~/asterisk_src/freepbx-2.9.0# vim.tiny /etc/php5/cli/php.ini

Cambiamos:

upload_max_filesize = 2M

Por:

upload_max_filesize = 20M

Por fin, podremos poner en marcha todo:

root@asterisk:~/asterisk_src/freepbx-2.9.0# /etc/init.d/apache2 start

root@asterisk:~/asterisk_src/freepbx-2.9.0# amportal start

Entraremos en un navegador WEB,e iremos a la dirección IP de nuestro servidor Asterisk. Deberíamos ver esto:

Podremos entrar en el “FreePBX Administration” con el usuario “admin” y contraseña “admin”

IMPORTANTE:

Si deseamos cambiar cualquier parámetro del amportal (FreePBX), podremos borrar el archivo /etc/amportal.conf,  y volver a ejecutar el instalador de FreePBX (./install_amp). Por ejemplo, si dejamos todas las opciones por defecto, el panel Flash no funcionará porque la variable:

AMPWEBADDRESS=xx.xx.xx.xx

No apunta a la IP del servidor Asterisk. Re-ejecutando el instalador, podremos establecer correctamente este valor.

(edito: Yo no conseguía entrar en el Panel Flash, incluso borrando amportal.conf y re-instalando amportal, al final he solucionado el problema editando /etc/amportal.conf directamente y estableciendo la dirección IP para la variable AMPWEBADDRESS aunque en la cabecera del archivo indicaba que NO se editara el archivo.)

Pego la configuración que yo he usado:

Enter your USERNAME to connect to the ‘asterisk’ database:
[asteriskuser]
Enter your PASSWORD to connect to the ‘asterisk’ database:
[amp109]
Enter the hostname of the ‘asterisk’ database:
[localhost]
Enter a USERNAME to connect to the Asterisk Manager interface:
[admin]
Enter a PASSWORD to connect to the Asterisk Manager interface:
[amp111]
Enter the path to use for your AMP web root:
[/var/www/html]
/var/www
Enter the IP ADDRESS or hostname used to access the AMP web-admin:
[xx.xx.xx.xx] 10.10.1.113
Enter a PASSWORD to perform call transfers with the Flash Operator Panel:
[passw0rd]
Use simple Extensions [extensions] admin or separate Devices and Users [deviceanduser]?
[extensions]
Enter directory in which to store AMP executable scripts:
[/var/lib/asterisk/bin]
Enter directory in which to store super-user scripts:
[/usr/local/sbin]

Vamos a limpiar el sistema, reiniciarlo, y comprobaremos que todo funciona correctamente. Además de comprobar el espacio usado en disco y en RAM.

root@asterisk:~# rm /var/cache/apt/archives/*.deb

root@asterisk:~# reboot

Y al reiniciar, comprobamos que funciona el panel FreePBX. Veamos el espacio usado en disco y en RAM:

root@asterisk:~# df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda1             9,2G  1,8G  7,0G  20% /
tmpfs                 500M     0  500M   0% /lib/init/rw
udev                  495M  100K  495M   1% /dev
tmpfs                 500M     0  500M   0% /dev/shm
/dev/sda4             6,4G  143M  6,0G   3% /home
/dev/sda2             3,7G  321M  3,2G  10% /var
root@asterisk:~# free -m
total       used       free     shared    buffers     cached
Mem:           999        306        692          0         14        173
-/+ buffers/cache:        119        880
Swap:          476          0        476

No está nada mal, en menos de 2 GB y usando 300 MB de RAM tenemos nuestro asterisk en marcha, con su panel FreePBX corriendo.

En la próxima entrega veremos cómo configurar la troncal, las extensiones, rutas entrantes y salientes.