Instalación de Asterisk y FreePBX en Ubuntu / Debian

Esta es una traducción de la guía que publiqué en distintos medios para instalar Asterisk en Debian / Ubuntu.

Estos procedimientos fueron probados en Hardy Heron, Intrepid Ibex, Jaunty Jackalope (un paso agregado al final), Karmic Koala y en Debian Lenny.

Antes de instalar, cosas para tener listas

Instalar el servidor con el método de preferencia. Se puede marcar LAMP cuando se instalen los paquetes. Esto agrega al Linux el Apache, MySQL y PHP. Entramos al servidor y nos cambiamos al super-usuario

sudo su

Para estar seguros acerca de MySQL y PHP hacer esto

apt-get install php5-mysql libapache2-mod-php5 mysql-server

Puede que haga falta configurar apache apropiadamente, o al menos asegurarse de que el php5 está habilitado. En Intrepid Ibex, Jaunty o Krmic esto no hace falta:

a2enmod php5

Para que funcione la localización editar /etc/php5/apache2/php.ini and modify as follow (leny/sid):

; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "ISO-8859-1"
default_charset = "utf8"

La última línea fuerza la página de caractéres en utf8 para las páginas php  (sobreescribe la página de caracteres del apache).

De http://www.freepbx.org/trac/wiki/UbuntuServer

Tuve problemas con otros sitios php i18n php y esta modificación funcionó para ellos

Otros elementos de configuiración que deberías cambiar en el archivo Php.ini para hacer feliz al FreePBX.

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 100M      ; Maximum amount of memory a script may consume (16MB)

Instalar Asterisk

apt-get install asterisk asterisk-mysql asterisk-mp3 php-db php5-gd php-pear sox curl

No hay razón para instalar zaptel en kernels 2.6 o superiores porque el dispositivo de timing lo provee el kernel a menos que, por supuesto estemos usando una placa que lo requiera. Ztdummy ya no es necesario.

En Karmic se instalará la versión 1.6 de Asterisk, en las demás la versión 1.4.

Yo instalé además estos sonidos y avisos en español

apt-get install asterisk-prompt-es asterisk-sounds-extra

Hay dos aproximaciones para resolver el problema de los permisos, uno es agregar el grupo asterisk al usuario www-data que es el usuario por defecto del apache.

1. Mantener el usuario as www-data

adduser www-data asterisk

De esta forma, FreePBX da un error copiando /usr/share/asterisk/bin/agi-bin. Cambiamos el dueño del archivo de esta forma

chown www-data.asterisk -R /usr/share/asterisk

Después de instalar FreePBX hace falta cambiar el usuario en amportal.conf. Esto está en la sección “Instalación de FreePBX”.

Salteamos a la sección 3.

2. Cambiar el apache para que funcione con el usuario asterisk. Esta solución es la más fácil si en este servidor sólo tendremos funcionando el Asterisk.

Editar el archivo /etc/apache2/envvars y cambiar el usuario a asterisk.

#export APACHE_RUN_USER=www-data
#export APACHE_RUN_GROUP=www-data
export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

Si uno cambia del método 1 al 2, quedan archivos a nombre de un usuario distinto y pueden aparecer erroes. Se puede borrar los archivos de la sesión en /var/lib/php5 o cambiar el dueño de los archivos a asterisk.

3. Reiniciar el Apache

apache2ctl graceful

Para hacer que se inicie el servidor FOP, cambié el shell por defecto para el usuario asterisk que estaba puesto en false:

usermod -s /bin/bash asterisk

Por lo que entendí, el shell predeterminado para los deribados Debian es el Dash, y para toda esta implementación se espera el Bash como shell.

En /usr/sbin/safe_asterisk cambié la variable BACKGROUND que estaba en 0 a 1. Este archivo se modificará cuando actualicemos el FreePBX, mucha atención! Todavía no entiendo por qué en las instalaciones hechas sobre CentOS no hace falta poner este valor en 1.


Instalación de FreePBX

Bajar el FreePBX de http://www.freepbx.org

cd /tmp
wget http://mirror.freepbx.org/freepbx-2.5.1.tar.gz
cd /usr/src
tar xvfz /tmp/freepbx-2.5.1.tar.gz
cd freepbx-2.5.1

Lo probé también con la versión 2.6 sin problemas, me falta el 2.7 que recién salió.

Preparar la base de datos. Si tu instalación tiene clave de root para el mysql, como lo pide cuando se instala, entonces tendrás que agregar la opción ‘-p’ en todos los comandos que empiezan con mysql. Por ejemplo, el primer comando sería “mysqladmin create asterisk -p”. Cuando lo pide, poner la contraseña adecuada:

mysqladmin create asterisk
mysqladmin create asteriskcdrdb
mysql asterisk < SQL/newinstall.sql
mysql asteriskcdrdb < SQL/cdr_mysql_table.sql

mysql

GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'amp109';
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'amp109';
flush privileges;
quit

MUY IMPORTANTE ANTES DE INSTALAR FREEPBX: Hacer una copia de /etc/asterisk/modules.conf.  El FreePBX reescribe el archivo y estropea la instalación de Asterisk. Al reiniciar el Asterisk después de instalar el FreePBX, el Asterisk se cierra sin ningún mensaje.

cp /etc/asterisk/modules.conf ~/asterisk-modules.conf

Comenzar la instalación de freepbx:

./install_amp

Pongo la lista de preguntas para contestar, lo demás puede quedar con sus valores por defecto

AMPWEBROOT=/var/www/freepbx

OJO: Si ponemos FreePBX en un subdirectorio, el panel puede no funcionar correctamente en las páginas administrativas. Subí el error en FreePBX y lo corrigieron, pero no me acuerdo en qué versión.

Hay dos formas de hacerlo andar

1. Arreglar el error

Tocar el archivo /var/www/freepbx/admin/views/panel.php

// where it reads
//       '<iframe width="97%" height="600" frameborder="0" align="top" src="../../panel/index_amp.php?context='.$deptname.'"></iframe>'.
// you should erase one step back in the uri, as it shows here
         '<iframe width="97%" height="600" frameborder="0" align="top" src="../panel/index_amp.php?context='.$deptname.'"></iframe>'.

Vamos al paso 3.

2. Crear un servidor virtual y acceder a la instalación desde otra dirección http://freepbx

Si tienes acceso al dns, o al archivo hosts de tu computadora puedes agregar una entrada para identificar a tu servidor en el Apache. Editar el archivo /etc/apache2/sites-available/freepbx y poner esto.

################# Named VirtualHosts
<VirtualHost *:80>

    ServerName freepbx
    ServerAlias freepbx

    ServerAdmin yourname@yourdomain.com
    ErrorLog /var/log/apache2/freepbx.error.log
    CustomLog /var/log/apache2/freepbx.access.log combined

    DocumentRoot /var/www/freepbx
    <Directory /var/www/freepbx>
        Options Indexes FollowSymLinks MultiViews
        Order allow,deny
        AllowOverride All
        Allow from all
    </Directory>

    <Directory /var/www/freepbx/admin>
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile freepbx-passwd
        Require user admin
    </Directory>

</VirtualHost>

##################################################################

Hacemos un vínculo simbólico (bah, un symlink) para que esté disponible

ln -s /etc/apache2/sites-available/freepbx /etc/apache2/sites-enabled/099-freepbx

y agregamos un archivo de accesos si lo deseamos

htpasswd -c /etc/apache2/freepbx-passwd admin

3. Reiniciamos el Apache

/etc/init.d/apache2 restart

Ahora recuperamos la copia de seguridad que hicimos de modules.conf

cp ~/asterisk-modules.conf /etc/asterisk/modules.conf

Si se nos ha olvidado hacer una copia de seguridad, podemos acudir a /var/cache/apt y buscamos por ahí el archivo que viene en el paquete. O también podemos deshabilitar las librerías que impiden que el asterisk funcione. Para deshabilitar una librería podemos agregar estas líneas en /etc/asterisk/modules.conf antes de la directiva global.

noload =>app_directory.so
noload =>res_adsi.so

La directiva autoload cargará automáticamente cualquier cosa que esté en el directorio de las librerías (/usr/lib/asterisk/modules) descontando las que figuren expresamente para no ser cargadas. En Ubuntu Hardy Heron, también debemos deshabilitar

noload => app_voicemail_imap.so
noload => app_voicemail_odbc.so

De http://www.voip-info.org/wiki/view/Asterisk+modules

app_directory.so => (Extension Directory)<BR> res_adsi.so: Resource for ADSI applications. See http://www.voip-info.org/wiki/view/ADSI

Si mantuvimos al Apache corriendo como www-data agregamos estas líneas al final de /etc/amportal.conf

AMPASTERISKUSER=www-data
AMPASTERISKWEBUSER=www-data
AMPASTERISKGROUP=asterisk

Para iniciar todo esto al final de todo, agregamos estas líneas en /etc/rc.local antes del exit 0.

/usr/local/sbin/amportal start
exit 0

Opcional: Asterisk se inicia por su cuenta después de la instalación por paquetes. Si deseas correr el Asterisk bajo safe_asterisk y administrado por amportal, deshabilita el asterisk de esta manera

update-rc.d -f asterisk remove

Un detalle más que importante: el Asterisk desde el Amportal se inicia en modo seguro, con el comando safe_asterisk que reiniciará la central si el programa asterisk se muere. Además, configura los permisos para que la interfaz web puede reiniciar el servicio, recargar el servidor del FOP o Flash Operator Panel y grabar los sonidos correspondientes a las IVR’s con los permisos adecuados. Desgraciadamente, el modo safe también hace que un programa se conecte y se desconecte permanentemente, lo que es muy malo para debuguear al servidor.

Agregamos un symlink y cambiamos los permisos para hacer que las grabaciones del sistema estén disponibles para los IVRs, o preatendedores y menúes.

ln -s /var/lib/asterisk/sounds/custom /usr/local/share/asterisk/sounds/
chown -R asterisk:asterisk /usr/local/share/asterisk/
chmod -R 755 /usr/local/share/asterisk/

/usr/share/asterisk y subdirectorios deben pertenecer por el usuario y el grupo asterisk o aparecen errores en el FreePBX acerca de permisos en el abi-bin. Podemos verificar los permisos

$ ls -l /usr/share | grep asterisk
drwxr-xr-x   8 asterisk asterisk 4096 2009-02-11 22:59 asterisk

Si no aparece como arriba, se arreglan así

$ sudo chown -R asterisk:asterisk /usr/share/asterisk

Si usas Ubuntu 9.04 (Jaunty Jackalope) o Karmic Koala necesitarás agregar las siguientes líneas en /etc/apache2/httpd.conf:

DocumentRoot /var/www

y reiniciar apache

apache2ctl restart

Podemos encontrar la interfaz del servidor en http://ip-del-servidor/freepbx.

Para la versión 1.6 de Asterisk hay que revisar el archivo /etc/asterisk/manager.conf o crear un archivo en /etc/asterisk/manager.d/admin.conf y revisar que los permisos de escritura y lectura están completos para el usuario admin

read =  system,call,log,verbose,command,agent,user,config,originate,read,write
write = system,call,log,verbose,command,agent,user,config,originate,read,write

Las versiones en inglés las publiqué en Ubuntu y en FreePBX

https://wiki.edubuntu.org/installingFreepbx

http://www.freepbx.org/trac/wiki/UbuntuServerIntrepid

También lo puse en los foros

http://ubuntu-ky.ubuntuforums.org/showthread.php?p=8298193

Steliosv Me tiró la pista para que funcione en el 1.6, copio el mensaje que me mandó.

Re: Installing FreePBX on Intrepid Ibex

Since i was greatly helped by this post i thought i’d add that if you upgrade to asterisk 1.6 you need to create a new anything.conf file in order for freepbx (2.5.x) to work. i created the file /etc/asterisk/manager.d/admin.conf with the contents

[admin]
secret = password
read = system,call,log,verbose,command,agent,user,config, originate,read,write
write = system,call,log,verbose,command,agent,user,config, originate,read,write

for googling reference this fixes the error in

/var/log/asterisk/messages

manager.c: 127.0.0.1 tried to authenticate with nonexistent user ‘admin’

and

manager.c: 127.0.0.1 failed to authenticate as ‘admin’

and then this following link helped me figure the problem out.

http://www.n3ncy.com/UNIX/Debian/Asterisk-1.6x.htm

One thought on “Instalación de Asterisk y FreePBX en Ubuntu / Debian

  1. Bravo!!!!thx a lot 4 this post, i needed to start Asterisk 1.8 aultamticaoly on my Ubuntu Server and had no idea as how to do it. Your post did the Trick!!!(i still don’t understand starting scripts on linux though, but that’s another issue).Gracias mil.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.