Bueno, estoy ahora trabajando en la automatización de mi servidor Asterisk para que trabaje en conjunto con un sistema que utiliza PostgreSQL, por ello no quiero utilizar los típicos ficheros de configuración que utiliza Asterisk, así que cambiaremos todo a una plataforma PostgreSQL, tanto CDR como configuraciones en RealTime.
Primero que nada asumiré que tienen instalado un Debian Etch 4.0 limpio y actualizado. El primero paso para optimizar el funcionamiento de nuestro Asterisk, es cambiar algunos parametros en nuestro Kernel, por lo cual lo recompilaremos, este paso es OPCIONAL.
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential cd /usr/src #Descarga un source del kernel #Yo personalmente utilice el siguiente: apt-get install linux-source-2.6.24 tar xjfv linux-2.6.24 ln -s /usr/src/linux-source-2.6.24 /usr/src/linux cd /usr/src/linux make clean && make mrproper cp /boot/config-`uname -r` ./.config make menuconfig
Ahora en la configuración seleccionaremos lo siguiente, si es que esta disponible en su versión del kernel.
Processor type and features >> [*]IRQ balancing
Processor type and features >> Timer frequency = 1000 Hz.
Processor type and features >> [*]High Resolution Timer Option
Processor type and features >> [*]HPET Timer Support
Device Drivers >> Character Devices >> [*]Enchanced Real Time Clock Support
Library Routines >> [*]CONFIG_CRC_CCITT
Compilamos y empaquetamos el kernel, para luego instalarlo.
make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers cd /usr/src dpkg -i linux-image-2.6.24-custom_2.6.24-custom-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.24-custom_2.6.24-custom-10.00.Custom_i386.deb reboot -t now!
Con eso ya tenemos nuestro kernel optimizado, podemos ratificar que sea el que estamos utilizando con un simple uname -a. Ahora vamos a preparar la maquina para compilar Asterisk y todas sus posibles dependencias.
apt-get install build-essential libcurl3-dev libvorbis-dev libspeex-dev unixodbc unixodbc-dev libiksemel-dev apt-get install flex xsltproc odbc-postgresql libusb-dev libnewt-dev libxml2-dev bison apt-get install linux-headers-`uname -r` g++ libncurses5-dev libnewt-dev libusb-dev subversion git-core apt-get install postgresql-8.3 postgresql-contrib-8.3 postgresql-client-8.3 postgresql-server-dev-8.3
Preparamos los sources para Asterisk, como trabajaremos con la ultima versión de 1.6 bajaremos todo por SVN, no utilizaremos Zaptel, en su lugar la nueva y renombrada version DAHDI y tambien agregaremos mISDN para troncales ISDN
cd /usr/src mkdir asterisk cd asterisk svn co http://svn.digium.com/svn/asterisk/trunk asterisk svn co http://svn.digium.com/svn/asterisk-addons/trunk asterisk-addons svn co http://svn.digium.com/svn/dahdi/linux/trunk dahdi-linux svn co http://svn.digium.com/svn/dahdi/tools/trunk dahdi-tools svn co http://svn.digium.com/svn/libpri/branches/1.4 libpri git-clone git://git.misdn.org/git/mISDN.git/ git-clone git://git.misdn.org/git/mISDNuser.git/
Ahora partimos por compilar el modulo de DAHDI que es quien controlara los dispositivos Digium y similares.
cd /usr/src/asterisk/dahdi-linux make make install #Y ahora los DAHDI-Tools cd /usr/src/asterisk/dahdi-tools ./configure make menuselect #Aqui seleccionamos todos los modulos precentes. make make install make config
Ahora para optimizar el tiempo de boot y los modulos que se cargan, vamos a ir a /etc/dahdi/modules y comentaremos todos los modulos a exepcion del utilizado para el modelo de nuestra tarjeta, yo tengo una TDM400P, así que solo dejare des comentado el modulo wctdm
Ahora vamos por la libpri.
cd /usr/src/asterisk/libpri make && make install
Ahora solo para quienes lo necesitan mISDN es para lineas troncales en tarjetas ISDN, si no utilizas estas tarjetas puedes omitir este paso.
cd /usr/src/asterisk/mISDN make make install cd /usr/src/asterisk/mISDNuser make && make install mISDN scan #Escaneamos en busca de dispositivos mISDN config #Configuramos mISDN start #Iniciamos el demonio misdnportinfo #Para revisar de que todo esta OK /usr/sbin/update-rc.d mISDN defaults 15 30
Y ahora si compilamos e Instalamos Asterisk.
cd /usr/src/asterisk/asterisk ./configure make menuconfig #Aqui seleccionamos los paquetes de Audio que queremos utilizar. make make install make samples make config asterisk -vvvc #Ctrl+C para salir
Hasta ahí ya tenemos un asterisk 1.6 comun y corriente funcionando sin problemas, ahora viene la parte interesante, configurarlo para que tome todas sus configuraciones desde una base de datos PostgreSQL en tiempo real, y además almacene ahí los VoiceMail y los CDR.
Primero que nada tienen que descargar la base de datos que utilizaremos, ya que la que viene incluida en asterisk le faltan algunas tablas y no funciona bien, aquí les dejo la misma pero con las tablas faltantes “Base de Datos“, asi que la descargamos en /usr/src/asterisk y ahora si vamos manos a la obra.
su - postgres createuser -s -D -R -l -P -e asterisk createdb -O asterisk -e asteriskDB psql -U asterisk -h localhost -d asteriskDB < /usr/src/realtime_pgsql.sql
Ahora preparamos la coneccion, editando el fichero de conecciones de postgres
echo "local asteriskDB asterisk md5" >> /etc/postgresql/8.3/main/pg_hba.conf
Y preparamos los ficheros de configuracion de Asterisk para conectarse a la base de datos, son 2 los que nos interesan, uno de la configuracion de tiempo real y el otro del CDR; asi que vamos por el CDR
nano /etc/asterisk/cdr_pgsql.conf
Y lo dejamos asi:
[global]
hostname=localhost
port=5432
dbname=asteriskDB
password=password
user=asterisk
table=cdr
Y ahora la configuracion en tiempo real:
nano /etc/asterisk/extconfig.conf
Y lo dejamos asi:
[settings]
extensions => pgsql,asteriskDB,extensions_conf
sipuser => pgsql,asteriskDB,sip_conf
sippeers => pgsql,asteriskDB,sip_conf
sipregs => pgsql,asteriskDB,sip_conf
voicemail => pgsql,asteriskDB,voicemail_users
queues => pgsql,asteriskDB,queue_table
queue_members => pgsql,asteriskDB,queue_member_table
nano /etc/asterisk/res_pgsql.conf
Y lo dejamos asi:
[general]
dbhost=127.0.0.1
dbport=5432
dbname=asteriskDB
dbuser=asterisk
dbpass=password
requirements=warn
Y listo, ahora reiniciamos Asterisk con un simple
/etc/init.d/asterisk restart
Y luego nos conectamos a nuestro asterisk para revisar que todo este OK
asterisk -rY Felicitaciones, ya tienes tu Asterisk trabajando con PostgreSQL
