<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gonzalo Marcote &#124; Open source, open mind</title>
	<atom:link href="http://www.gonzalomarcote.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.gonzalomarcote.com</link>
	<description>Blog personal sobre GNU/Linux, programación, virtualización y vozip</description>
	<lastBuildDate>Thu, 29 Jul 2010 14:59:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Monitorizar asterisk con snmp en Debian o Ubuntu</title>
		<link>http://www.gonzalomarcote.com/?p=120</link>
		<comments>http://www.gonzalomarcote.com/?p=120#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:52:44 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=120</guid>
		<description><![CDATA[Publico este post, porque di bastantes vueltas hasta que pude echarlo a andar, ya que en en un servidor debian o ubutnu el tema es un poco diferente. Instalamos los siguientes paquetes para que asterisk tenga soporte SNMP: aptitude install libsnmp15 libsnmp-base libsnmp-dev Cuando hagamos el &#8216;make menuconfig&#8217; nos aseguramos que en &#8216;Resource Modules&#8217; esté [...]]]></description>
			<content:encoded><![CDATA[<p>Publico este post, porque di bastantes vueltas hasta que pude echarlo a andar, ya que en en un servidor debian o ubutnu el tema es un poco diferente.</p>
<p>Instalamos los siguientes paquetes para que asterisk tenga soporte SNMP:<code><br />
aptitude install libsnmp15 libsnmp-base libsnmp-dev<br />
</code></p>
<p>Cuando hagamos el &#8216;make menuconfig&#8217; nos aseguramos que en &#8216;Resource Modules&#8217; esté seleccionado el módulo &#8216;res_snmp&#8217;.</p>
<p>Una vez compilado tendremos en nuestro dir /etc/asterisk el archivo res_snmp.conf</p>
<p>Nos aseguramos en el CLI de que esta cargado:<code><br />
pulsar*CLI&gt; module show like snmp<br />
Module                         Description                              Use Count<br />
res_snmp.so                    SNMP [Sub]Agent for Asterisk             0<br />
1 modules loaded</code></p>
<p><span id="more-120"></span></p>
<p>Ahora procedemos a instalar los paquetes: snmp y snmpd<code><br />
aptitude install snmp snmpd<br />
</code></p>
<p>Hacemos una copia del archivo /etc/snmp/snmpd.conf y procedemos a editarlo. Ponemos:<code><br />
master agentx<br />
agentXPerms 0660 0660 root root</code></p>
<p><code>com2sec local localhost nombre_comunidad<br />
com2sec mynetwork 192.168.X.0/24 nombre_comunidad</code></p>
<p><code>group MyROGroup any local<br />
group MyROGroup any mynetwork</code></p>
<p><code>view all included .1</code></p>
<p><code> </code></p>
<p><code>access MyROGroup "" any noauth 0 all none none<br />
</code></p>
<p>Yo pongo user y group &#8216;root root&#8217; porque corro asterisk como root.<br />
En los datos de la red (192.168.X.0/24) tienes que poner los datos de tu red para que puedas acceder a los datos desde ella (también podríamos validar tan solo una cierta IP).<br />
También tienes que poner el nombre de tu comunidad snmp.</p>
<p>A continuación reiniciamos el servicio:<code><br />
# service snmpd restart<br />
</code></p>
<p>A continuación configuramos en asterisk el archivo /etc/asterisk/res_snmp.conf y descomentamos ambas líneas:<code><br />
;<br />
; Configuration file for res_snmp<br />
;<br />
[general]<br />
; We run as a subagent per default -- to run as a full agent<br />
; we must run as root (to be able to bind to port 161)<br />
subagent = yes<br />
; SNMP must be explicitly enabled to be active<br />
enabled = yes<br />
</code></p>
<p>Ahora vamos al dir de las sources de asterisk y copiamos los archivos .mib.tx al dir /usr/share/snmp/mibs:<br />
<code><br />
# cd /usr/src/asterisk-1.6.0.XX/doc<br />
# cp digium-mib.txt /usr/share/snmp/mibs/<br />
# cp asterisk-mib.txt /usr/share/snmp/mibs/<br />
</code></p>
<p>Reiniciamos el servicio snmpd de nuevo:<code><br />
# service snmpd restart<br />
</code></p>
<p>Y exportamos los MIBS:<code><br />
# export MIBS=+ASTERISK-MIB<br />
</code></p>
<p>Por último reiniciamos asterisk:<code><br />
CLI&gt; core restart when convenient<br />
</code></p>
<p>Probamos que asterisk nos de toda la información por snmp:<code><br />
# snmpwalk -On -c nombre_cominudad -v 2c localhost .1.3.6.1.4.1.22736<br />
</code><br />
Y debería de salirte un porrón de información sobre lo que esta pasando en asterisk (canales, llamadas, extenciones, etc, etc)</p>
<p>El motivo por el cual no lograba hacerlo funcionar en Debian o en Ubuntu desde otra máquina es por que esta habilitado para escuchar solo en localhost. Para que puedas leerlo desde otro equipo o aplicación tienes que hacer este cambio en /etc/default/snmpd:<code><br />
#SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1 -x /var/agentx/master'<br />
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid -x /var/agentx/master'<br />
</code><br />
Quitando la ip para que escuche solo en localhost y reiniciar el servicio.</p>
<p>Ahora ya podemos acceder desde nagios o PTRG por ej.</p>
<p><span style="text-decoration: underline;">Fuentes:</span><br />
<a title="http://www.danielaliaman.com/blog/files/AsteriskSNMPtutorial.pdf" href="http://www.danielaliaman.com/blog/files/AsteriskSNMPtutorial.pdf"> http://www.danielaliaman.com/blog/files/AsteriskSNMPtutorial.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=120</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HA Asterisk &#8211; Alta disponibilidad Asterisk (II). Asterisk + Redfone</title>
		<link>http://www.gonzalomarcote.com/?p=76</link>
		<comments>http://www.gonzalomarcote.com/?p=76#comments</comments>
		<pubDate>Tue, 20 Jul 2010 11:58:32 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=76</guid>
		<description><![CDATA[El siguiente paso es independiente de Hearbeat y Drbd. Heartbeat + Drbd lo puedes usar para un servidor apache, mysql, host virtualizado que aloje varias VM&#8217;s, etc. Yo en mi caso he hecho HA en Asterisk para el Call Center en el que trabajo. De forma que si cae el servidor, pase el control al [...]]]></description>
			<content:encoded><![CDATA[<p>El siguiente paso es independiente de Hearbeat y Drbd. Heartbeat + Drbd lo puedes usar para un servidor apache, mysql, host virtualizado que aloje varias VM&#8217;s, etc. Yo en mi caso he hecho HA en Asterisk para el Call Center en el que trabajo.<br />
De forma que si cae el servidor, pase el control al otro nodo y desde el Call Center se puedan seguir haciendo llamadas, perdiendo tan solo 5 segundos de servicio (mas o menos). Es decir un Call Center a prueba de Bombas!.</p>
<p>Así que siguiendo con la configuración del anterior post, en este vamos a explicar como adaptar asterisk a este entorno y finalmente como configurar el redfone.</p>
<p>Lo único que hay que tener en cuenta es que después de instalar asterisk en ambos servidores hay que &#8216;mover&#8217; los dirs de asterisk a la partición conjunta y crear enlaces.</p>
<p><span id="more-76"></span></p>
<p>Es decir, instalamos normalmente dahdi (ya podemos instalar la 2.3.0 que trae soporte TDMoE para el redfone), libpri y asterisk.</p>
<p>Una vez instalado tenemos que poner los dirs mas importantes de la instalación en el dir de la répicla del Drbd &#8216;/mnt/local/replica/asterisk&#8217;:<code><br />
# cd /mnt/local/replica/asterisk<br />
# cp -r /etc/asterisk etc_asterisk<br />
# cp -r /var/lib/asterisk var_lib_asterisk<br />
# cp -r /usr/lib/asterisk usr_lib_asterisk<br />
# cp -r /var/spool/asterisk var_spool_asterisk<br />
# cp -r /var/log/asterisk var_log_asterisk<br />
</code></p>
<p>Y creamos enlaces a esos dirs:<code><br />
# ln -s  /mnt/local/replica/asterisk/etc_asterisk/ /etc/asterisk<br />
# ln -s  /mnt/local/replica/asterisk/var_lib_asterisk /var/lib/asterisk<br />
# ln -s  /mnt/local/replica/asterisk/usr_lib_asterisk /usr/lib/asterisk<br />
# ln -s /mnt/local/replica/asterisk/var_spool_asterisk /var/spool/asterisk<br />
# ln -s /mnt/local/replica/asterisk/var_log_asterisk /var/log/asterisk<br />
</code></p>
<p>Ahora podemos ir a asterisk2 e instalar nuevamente dahdi, asterisk y libpri borrar los dirs y crear los enlaces.<br />
En este caso serán enlaces rotos, hasta el momento en que se le pase el control.</p>
<p><strong><br />
Redfone</strong><br />
Ahora ya podemos proseguir con la instalación del redfone.<br />
Redfone es un gateway que a través de un interfaz de red (protocolo TDMoE) nos proporciona conectividad T1/E1.<br />
En el caso de que un servidor asterisk se caiga, el tráfico lo redirige al otro asterisk y le da el control de los E1/T1. Proveyendo así de redundancia y alta disponibilidad.<br />
Al ser un dispositivo externo, nos olvidamos de tarjetas PCI y sus problemas (conflicto de IRQ&#8217;s, andar abriendo el servidor&#8230;).<br />
El Redfone funciona en modo activo-pasivo (no pueden salir dos asterisk a la vez por los primarios).<br />
También disponen de cancelador de eco. Para mas info consultar la página de <a href="http://www.red-fone.com/">redfone</a></p>
<p><strong><br />
Instalación física</strong><br />
Para conectar el Redfone a cada servidor asterisk, lo conectamos con un cable de red cruzado directamente y evitar así utilizar un switch entre la red de datos y la conexión TDMoE que une el Asterisk y el foneBridge2, ya que la cantidad de tráfico entre estos es tan grande y constante que suelen volver loco a los switches normales, y además, conviertes al switch en un punto de fallo innecesario.</p>
<p>Por lo cual necesita su propio interfaz de red que configuraremos en cada uno de los servidores.<br />
Los FB del redfone son las IP&#8217;s: FB1=192.168.1.254 y FB2=192.168.1.253 por lo cual configuraremos el interfaz de red de ambos servidores con una ip en rango 1.X. Por ejemplo la 192.168.1.200 para los dos:<code><br />
auto ethX<br />
iface ethX inet static<br />
address 192.168.1.200<br />
netmask 255.255.255.0<br />
network 192.168.1.0<br />
broadcast 192.168.1.255<br />
</code></p>
<p>El cable de red para el T1/E1 es un cable de red cruzado o un RJ48.</p>
<p><strong><br />
Instalación</strong><br />
1- Instalamos las dependencias necesarias:<code><br />
aptitude install openssh-server<br />
aptitude install build-essential<br />
aptitude install linux-headers-2.6.24-19-server<br />
aptitude install libnet1 libnet1-dev<br />
aptitude install libpcap0.8 libpcap0.8-dev<br />
aptitude install libargtable2-0 libargtable2-dev<br />
aptitude install libncurses5-dev<br />
aptitude install libnewt-dev<br />
</code></p>
<p>2- Descargamos libfb (fonulator library) y fonulator (the fonebridge configuration utility):<code><br />
# cd /usr/src<br />
# wget http://support.red-fone.com/downloads/fonulator/libfb-2.0.0.tar.gz<br />
# wget http://support.red-fone.com/downloads/fonulator/fonulator-2.0.1.tar.gz<br />
</code></p>
<p>Instalamos fonulator library:<code><br />
# tar xzvf libfb-2.0.0.tar.gz<br />
# cd libfb-2.0.0/<br />
# make clean<br />
# ./configure<br />
# make<br />
# make install<br />
# cd ..<br />
</code></p>
<p>Si instala bien saldrá algo como:<code><br />
Libraries have been installed in:<br />
/usr/local/lib</code></p>
<p><code>If you ever happen to want to link against installed libraries<br />
in a given directory, LIBDIR, you must either use libtool, and<br />
specify the full pathname of the library, or use the `-LLIBDIR'<br />
flag during linking and do at least one of the following:<br />
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable<br />
during execution<br />
- add LIBDIR to the `LD_RUN_PATH' environment variable<br />
during linking<br />
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag<br />
- have your system administrator add LIBDIR to `/etc/ld.so.conf'</code></p>
<p><code> </code></p>
<p><code>See any operating system documentation about shared libraries for<br />
more information, such as the ld(1) and ld.so(8) manual pages.<br />
</code></p>
<p>Instalamos Fonebdridge utility:<code><br />
# tar xzvf fonulator-2.0.0.tar.gz<br />
# cd fonulator-2.0.0<br />
# ./configure<br />
# make<br />
# make install<br />
# cd ..<br />
</code></p>
<p>Para confirmar que se ha instalado correctamente:<code><br />
# fonulator -V<br />
fonulator 2.0.0<br />
Copyright (C) 2007 Redfone Communications, LLC.<br />
Build Number: 36<br />
</code></p>
<p>Descargamos e instalamos dahdi en su version 2.3.0 o superior ya que ya trae incluido de serie el <a href="http://www.sinologic.net/blog/2010-04/los-fonebridge2-redfone-soportados-dahdi/">soporte</a> TDMoE para los redfone.</p>
<p>Instalamos todos los demás componentes de asterisk con normalidad (ver mas arriba para adaptar la instalación al Drbd).</p>
<p><strong><br />
Configuración y provisionamiento del redfone</strong><br />
Mi configuración será para dos primarios E1 con crc4. Como siempre deberías adaptarlo a tu configuración o consultar la página de soporte de redfone.</p>
<p>Nos descargamos en /etc el archivo redfone.conf y procedemos a editarlo tanto en Asterisk1 como en Asterisk2. Debemos definir ambos spans aunque solo tengamos un solo primario conectado:<code><br />
# cd /etc/<br />
# wget http://support.red-fone.com/downloads/fonulator/redfone.conf<br />
</code></p>
<p>En asterisk1 ponemos:<code><br />
globals]<br />
fb=192.168.1.254<br />
port=1<br />
server=DIRECCION-MAC-DE-LA-TARJETA-ETHX-DE-ASTERISK1-CONECTADA-AL-REDFONE<br />
priorities=0,1,2,3</code></p>
<p><code># E1 primario<br />
[span1]<br />
framing=ccs<br />
encoding=hdb3<br />
crc4</code></p>
<p><code> </code></p>
<p><code># E1 secundario<br />
[span2]<br />
framing=ccs<br />
encoding=hdb3<br />
crc4<br />
</code></p>
<p>En asterisk2 ponemos:<code><br />
[globals]<br />
fb=192.168.1.253<br />
port=1<br />
server=DIRECCION-MAC-DE-LA-TARJETA-ETHX-DE-ASTERISK2-CONECTADA-AL-REDFONE<br />
priorities=0,1,2,3</code></p>
<p><code># E1 primario<br />
[span1]<br />
framing=ccs<br />
encoding=hdb3<br />
crc4</code></p>
<p><code> </code></p>
<p><code># E1 secundario<br />
[span2]<br />
framing=ccs<br />
encoding=hdb3<br />
crc4<br />
</code></p>
<p>Ahora debemos provisionar (configurar) los parámetros del redfone.<br />
Desde asterisk1 ejecutamos:<code><br />
# fonulator -v /etc/redfone.conf<br />
Detecting foneBRIDGE<br />
Found a foneBRIDGE with 2 spans on 1 transceivers.<br />
DSP Status: Available<br />
Stopping foneBRIDGE TDMoE transmission<br />
Detecting current foneBRIDGE link configuration<br />
Stopping foneBRIDGE TDMoE transmission<br />
WPLL Enabled<br />
Starting foneBRIDGE TDMoE transmission<br />
foneBRIDGE reconfigured!<br />
</code></p>
<p>A continuación editamos el archivo /etc/dahdi/system.conf tanto en Asterisk1 como en Asterisk2. Si tenemos un redfone de dos primarios, debemos configurar los 2 dynamic spans aunque solo tengamos conectado un solo primario.<br />
En el /etc/dahdi/system.conf de asterisk1 ponemos:<code><br />
dynamic=ethmf,eth1/00:XX:C2:XX:D6:2A/0,31,0<br />
dynamic=ethmf,eth1/00:XX:C2:XX:D6:2A/1,31,1<br />
#<br />
bchan=1-15,17-31<br />
dchan=16<br />
bchan=32-46,48-62<br />
dchan=47<br />
#<br />
# NOTE: Most E1 use alaw codec and this must be specified.<br />
alaw=1-62<br />
#<br />
loadzone = es<br />
defaultzone = es<br />
</code></p>
<p>Esto significa que nuestro asterisk1 se comunica con su interfaz de red eth4 con el FB1 del redfone cuya Mac address es: 00:XX:C2:XX:D6:2A</p>
<p>En el asterisk2 en el /etc/dahdi/system.conf ponemos:<code><br />
dynamic=ethmf,eth1/00:XX:C2:XX:D6:2B/0,31,0<br />
dynamic=ethmf,eth1/00:XX:C2:XX:D6:2B/1,31,1<br />
#<br />
bchan=1-15,17-31<br />
dchan=16<br />
bchan=32-46,48-62<br />
dchan=47<br />
#<br />
# NOTE: Most E1 use alaw codec and this must be specified.<br />
alaw=1-62<br />
#<br />
loadzone = es<br />
defaultzone = es<br />
</code></p>
<p>Que significa que cuando fonulator levante el redfone aqui, el asterisk2 se comunicará desde su interfaz de red eth3 con el FB2 cuya Mac address es: 00:XX:C2:XX:D6:2B.</p>
<p><strong>NOTA</strong><br />
Este es uno de los motivos por los que el dir /etc/dahdi no puede estar en Drbd, porque estos archivos necesitan ser diferentes</p>
<p>A continuación nos toca configurar el archivo /etc/asterisk/chan_dahdi.conf lo cual es igual que siempre y dependerá de tu config. El mío es:<code><br />
[channels]<br />
group=1<br />
language=es<br />
musiconhold=default<br />
pridialplan=unknown<br />
prilocaldialplan=unknown<br />
;internationalprefix=00<br />
usecallerid=yes<br />
hidecallerid=no<br />
restrictcid=no<br />
usecallingpres=yes<br />
callerid=asreceived<br />
callwaiting=yes<br />
threewaycalling=yes<br />
transfer=yes<br />
immediate=no<br />
;resetinterval=never<br />
echocancel=yes<br />
;echocancel=256<br />
echocancelwhenbridged=no<br />
;echocancelwhenbridged=yes<br />
echotraining=no<br />
;echotraining=yes<br />
priindication=outofband<br />
callgroup=1<br />
pickupgroup=1<br />
txgain=0.0<br />
rxgain=7.0<br />
switchtype=euroisdn<br />
context=incoming-loquesea<br />
signalling=pri_cpe<br />
channel =&gt; 1-15<br />
channel =&gt; 17-31<br />
</code></p>
<p>Cargamos los módulos dahdi_dynamic y dahdi_dynamic_ethmf con modprobe y comprobamos con dahdi_tool que ha reconocido el Redfone:<code><br />
# modprobe -a dahdi_dynamic_ethmf<br />
# dahdi_cfg -vvv<br />
# dahdi_tool<br />
</code></p>
<p>Y comprobamos que los primarios están levantados y en &#8216;Ok&#8217;.</p>
<p><strong><br />
Script fonulator<br />
</strong></p>
<p>Este tema es especifico para la instalación con Heartbeat.<br />
Si se cae asterisk1, se tiene que ejecutar fonulator desde asterisk2 para configurarlo para su mac address y hacerse con el control.<br />
Los servicios que se deben ejecutar cuando haya un failover, se especifican en el archivo /etc/ha.d/haresources en ambos asterisk:<code><br />
asterisk1 drbddisk::r0 Filesystem::/dev/drbd0::/mnt/local/replica::ext4 IPaddr::192.168.3.111/24/eth0 fonulator asterisk sendmail<br />
</code></p>
<p>Son scrits de inicio que debe haber en /etc/init.d. asterisk es el script de inicio de asterisk en si, sendmail es un script hecho por mi para que me envíe un mail si alguna vez hay un &#8216;failover&#8217; y fonulator es un Scrip para que provisione el redfone con el otro servidor cuando haya un &#8216;failover&#8217;.</p>
<p>Aquí está el script adaptado para Debian, ubuntu y derivadas (Muchas gracias a Mark de Redfone por su aportación <img src='http://www.gonzalomarcote.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ):<code><br />
#!/bin/bash<br />
#<br />
# fonulator   Starts and Stops the Redfone fonulator utility<br />
#<br />
# chkconfig: - 60 50<br />
# description: Utility for configuring the Redfone fonebridge<br />
#<br />
# processname: fonulator<br />
# config: /etc/redfone.conf</code></p>
<p><code># Source function library.<br />
#. /etc/rc.d/init.d/functions</code></p>
<p><code># Source networking configuration.<br />
#. /etc/sysconfig/network</p>
<p># Check that networking is up.<br />
#[ ${NETWORKING} = "no" ] &amp;&amp; exit 0</p>
<p>[ -x /usr/local/bin/fonulator ] || exit 0</p>
<p>RETVAL=0<br />
prog="fonulator"</p>
<p>start() {<br />
# Start daemons.</p>
<p>if [ -d /etc/ ] ; then<br />
for i in `ls /etc/redfone.conf`; do<br />
site=`basename $i .conf`<br />
echo -n $"Starting $prog for $site: "<br />
/usr/local/bin/fonulator $i &amp;<br />
RETVAL=$?<br />
[ $RETVAL -eq 0 ] &amp;&amp; {<br />
touch /var/lock/subsys/$prog<br />
#success $"$prog $site"<br />
}<br />
echo<br />
done<br />
else<br />
RETVAL=1<br />
fi<br />
return $RETVAL<br />
}</p>
<p>stop() {<br />
# Stop daemons.<br />
echo -n $"Shutting down $prog: "<br />
killproc $prog<br />
RETVAL=$?<br />
echo<br />
[ $RETVAL -eq 0 ] &amp;&amp; rm -f /var/lock/subsys/$prog<br />
return $RETVAL<br />
}</p>
<p># See how we were called.<br />
case "$1" in<br />
start)<br />
start<br />
;;<br />
stop)<br />
stop<br />
;;<br />
restart|reload)<br />
stop<br />
start<br />
RETVAL=$?<br />
;;<br />
condrestart)<br />
if [ -f /var/lock/subsys/$prog ]; then<br />
stop<br />
start<br />
RETVAL=$?<br />
fi<br />
;;<br />
status)<br />
status $prog<br />
RETVAL=$?<br />
;;<br />
*)<br />
echo $"Usage: $0 {start|stop|restart|condrestart|status}"<br />
exit 1<br />
esac</p>
<p></code></p>
<p><code>exit $RETVAL<br />
</code></p>
<p>Lo ponemos en /etc/init.d y le damos permisos de ejecución.</p>
<p><strong><br />
Solucionando el orden de arranque de los servicios y posibles kernels panics</strong><br />
Si por algún motivo al apagar el equipo nos da uin kernel panic, esto sucede porque está intentando apagar la red cuando dahdi aún está en uso. Por lo cual parece que hay que apagar Dahdi antes de apagar la red.<br />
Es decir el orden de apagado debería de ser, primero asterisk, luego dahdi y por último la red<br />
Por favor, si esto no es exactamente así agradecería que me lo comentaseis. A mi me ha funcionado.</p>
<p>Por lo tanto he puesto el apagado en este orden:<code><br />
K03asterisk -&gt; ../init.d/asterisk<br />
K05heartbeat -&gt; ../init.d/heartbeat<br />
K08drbd -&gt; ../init.d/drbd<br />
K70dahdi -&gt; ../init.d/dahdi<br />
S35networking -&gt; ../init.d/networking<br />
</code></p>
<p>La forma de hacerlo en Debian/Ubuntu es la siguiente.<br />
Primero borramos dahdi:<code><br />
# update-rc.d -f dahdi remove<br />
</code></p>
<p>Luego lo ponemos en la nueva posición:<code><br />
# update-rc.d dahdi defaults 15 70<br />
Adding system startup for /etc/init.d/dahdi ...<br />
/etc/rc0.d/K70dahdi -&gt; ../init.d/dahdi<br />
/etc/rc1.d/K70dahdi -&gt; ../init.d/dahdi<br />
/etc/rc6.d/K70dahdi -&gt; ../init.d/dahdi<br />
/etc/rc2.d/S15dahdi -&gt; ../init.d/dahdi<br />
/etc/rc3.d/S15dahdi -&gt; ../init.d/dahdi<br />
/etc/rc4.d/S15dahdi -&gt; ../init.d/dahdi<br />
/etc/rc5.d/S15dahdi -&gt; ../init.d/dahdi<br />
</code></p>
<p>Nótese que lo hace solo para el rc0.d rc1.d y rc6.d que son los encargados del halt y el reboot.<br />
Comprobamos también que el orden de apagado de la red vaya de último.</p>
<p>Si nos descargamos las versiones de dahdi desde redfone que traen soporte TDMoE (anteriores a la 2.3.0), hay que sustituir el script de inicio de dahdi por uno que provee redfone. Este script permite que NO se cargue el módulo dahdi_dummy, ya que puede dar problemas con el timming, asi que es importante sustituirlo.<br />
Me gustaría saber si esto es necesario con el dahdi oficial que ya trae soporte TDMoE (&gt;=2.3.0).<br />
Yo no lo he sustituido y no he tenido ningún problema con el módulo dahdi_dummy, pero estaría bien poder confirmar que las nuevas versiones de dahdi ya traen adaptado este script.</p>
<p>Si queremos sustituirlo haremos:<code><br />
# wget http://support.red-fone.com/downloads/dahdi/dahdi<br />
# chmod +x dahdi<br />
# cp dahdi /etc/init.d/<br />
</code></p>
<p>PD:<br />
Por cierto estas instrucciones me han funcionado a mi y se ofrecen sin ningún tipo de garantía.<br />
Siento no permitir comentarios, en parte porque siempre me olvido de contestarlos y porque entiendo que si has llegado hasta aquí y estás intentando instalar algo así tendrás los recursos necesarios para solucionarlo por tu cuenta y no tener que investigar yo sobre como solucionarlo… espero que no suene muy borde <img src='http://www.gonzalomarcote.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Si necesites adaptar ciertas cosas e investigar mas sobre el asunto, estaría bien leer las siguientes fuentes en las que me basé.</p>
<p>Fuentes:<br />
<a href="http://support.red-fone.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=13">http://support.red-fone.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=13</a><br />
y<br />
<a href="http://support.red-fone.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=8">http://support.red-fone.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=8</a><br />
y<br />
<a href="http://www.sinologic.net/blog/2010-01/probamos-el-fonebridge2-single-port-e1-t1/">http://www.sinologic.net/blog/2010-01/probamos-el-fonebridge2-single-port-e1-t1/</a><br />
y<br />
<a href="http://www.sinologic.net/blog/2010-05/mini-tutorial-sobre-configuracion-de-equipos-redfone/">http://www.sinologic.net/blog/2010-05/mini-tutorial-sobre-configuracion-de-equipos-redfone/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=76</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HA Asterisk &#8211; Alta disponibilidad Asterisk (I). Heartbeat + Drbd</title>
		<link>http://www.gonzalomarcote.com/?p=58</link>
		<comments>http://www.gonzalomarcote.com/?p=58#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:07:46 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=58</guid>
		<description><![CDATA[HeartBeat y Drbd es una gran solución para crear un cluster de servidores con &#8216;Alta Disponibilidad&#8217;. Podríamos aplicarlo para cualquier tipo de servidor que necesite alta disponibilidad, como un servidor web, una base de datos o una PBX Asterisk. En este HowTo vamos a instalar un cluster de dos asterisk conectados a un redfone, el cual [...]]]></description>
			<content:encoded><![CDATA[<p>HeartBeat y Drbd es una gran solución para crear un cluster de servidores con &#8216;Alta Disponibilidad&#8217;. Podríamos aplicarlo para cualquier tipo de servidor que necesite alta disponibilidad, como un servidor web, una base de datos o una PBX Asterisk.</p>
<p>En este HowTo vamos a instalar un cluster de dos asterisk conectados a un <a href="http://www.red-fone.com/">redfone</a>, el cual nos permite tener varias centralitas conectadas a un primario (o varios primarios) y no tener que usar varias tarjetas de telefonía.</p>
<p>﻿En un Call Center donde el sistema debe ser altamente confiable, no se puede dar el lujo de que si cae un servidor asterisk se pare el servicio. Si sucede esto con tarjetas de telefonía y una instalación sin HA, aún teniendo otro asterisk igual configurado, tendríamos que pasar toda la configuración, logs y migrar al nuevo hardware las tarjetas PCI físicamente. Lo cual puede tardar un buen tiempo en ser realizado.</p>
<p>Montando un cluster de asterisk en HA, podríamos tener dos sevidores compartiendo una IP virtual (Heartbeat) y sincronizando los datos de sus directorios (con Drbd) de forma que si el servidor primario se cae, el segundo automáticamente coge esa IP y empieza a dar servicio (Heartbeat). Y todo esto con una parada de servicio de unos 5 segundos.</p>
<p>Así que no mas caidas de servicio y no mas llamadas en medio de la noche <img src='http://www.gonzalomarcote.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Los distribución usada será Ubuntu server (LTS. hardy o Lucid) ya que es a la que estoy mas acostumbrado, pero valdría perfectamente para Debian. Se presuponen conocimientos de Asterisk y GNU/Linux.</p>
<p><span id="more-58"></span></p>
<p><a href="http://www.drbd.org/">DRBD</a> (Distributed Replicated Block Device). En pocas palabras, DRBD es un arreglo de software parecido a un RAID1 pero en red, el cual construye un mirror de discos sobre LAN. Sincroniza dos particiones de dos servers diferentes. No es recomendable sincronizarlos a través del switch o router de tu red ya que genera muchísimas peticiones. Deberían tener cada server dos interfaces de red. Una para la red y otra con un cable cruzado directamente entre los dos servers para el Drbd. De esta forma no colapsaremos la red.</p>
<p><a href="http://linux-ha.org/wiki/Heartbeat">Heartbeat</a> hace referencia a un servicio o un ping periódico para comprobar que el sistema está levantado y corriendo. Mantendrá de esta forma 2 o mas nodos sincronizados bien por puerto serie o por red (UDP).<br />
Se pueden hacer configuraciones avanzadas, pero en este caso usaremos un Hearbeat de 2 nodos.</p>
<p>Empezamos instalando los componentes:</p>
<p><strong>Drbd</strong><br />
Antes de nada explicar que durante la instalación debemos particionar ambos servidores exactamente igual y tendremos que crear una partición extra que en mi caso se va a llamar &#8216;replica&#8217; que es la que va a tener los datos replicados en ambos servidores. En mi caso he hecho una instalacion con LVM y he creado un raiz de 20 GB y replica de 48 GB. La partición &#8216;replica&#8217; la formateamos en ext3 o ext4 y la dejamos sin montar.</p>
<p>Los equipos se van a llamar &#8216;asterisk1&#8242; y &#8216;asterisk2&#8242;. En primer lugar configuramos el segundo interfaz de red para que haga Drbd directo a traves de un cable cruzado y no pase por el switch de nuestra red ya que pordría colapsarla. Ya vamos avisando de que será necesario un servidor con 3 interfaces de red. Uno para la red, otro para el drbd y otro para el Redfone.<br />
Estos datos serían los adecuados para mi red. Seguramente deberás adaptarlos a la tuya.<br />
En el /etc/network/interfaces de astetisk1 ponemos:<code><br />
# The loopback network interface<br />
auto lo<br />
iface lo inet loopback</code></p>
<p><code># The primary network interface<br />
auto eth0<br />
iface eth0 inet static<br />
address 192.168.3.141<br />
netmask 255.255.255.0<br />
network 192.168.3.0<br />
broadcast 192.168.3.255<br />
gateway 192.168.3.1<br />
# dns-* options are implemented by the resolvconf package, if installed<br />
dns-nameservers 192.168.3.103 192.168.3.203<br />
dns-search telemarketing.es</code></p>
<p><code> </code></p>
<p><code>auto eth1<br />
iface eth1 inet static<br />
address 192.168.10.141<br />
netmask 255.255.255.0<br />
network 192.168.10.0<br />
broadcast 192.168.10.255<br />
</code></p>
<p>Y en el /etc/network/interfaces de asterisk2:<code><br />
# The loopback network interface<br />
auto lo<br />
iface lo inet loopback</code></p>
<p><code># The primary network interface<br />
auto eth0<br />
iface eth0 inet static<br />
address 192.168.3.142<br />
netmask 255.255.255.0<br />
network 192.168.3.0<br />
broadcast 192.168.3.255<br />
gateway 192.168.3.1<br />
# dns-* options are implemented by the resolvconf package, if installed<br />
dns-nameservers 192.168.3.103 192.168.3.203<br />
dns-search telemarketing.es</code></p>
<p><code> </code></p>
<p><code>auto eth1<br />
iface eth1 inet static<br />
address 192.168.10.142<br />
netmask 255.255.255.0<br />
network 192.168.10.0<br />
broadcast 192.168.10.255<br />
</code></p>
<p>La primera interfaz de red es la del servidor en si y la segunda la del drbd.<br />
También nos aseguramos de que ambos puedan resolver al otro (sin ningún servidor DNS por medio). Para ello editamos en ambos el /etc/hosts y definimos la entrada del otro.</p>
<p>En el /etc/hosts de asterisk1 ponemos:<code><br />
127.0.0.1        localhost<br />
192.168.3.141    asterisk1.tudominio.es      asterisk1<br />
192.168.10.142	 asterisk2.tudominio.es	    asterisk2<br />
</code></p>
<p>Y en el /etc/hosts de asterisk2 ponemos:<code><br />
192.168.3.142    asterisk2.tudominio.es      asterisk2<br />
192.168.10.141	 asterisk1.tudominio.es	    asterisk1<br />
</code></p>
<p>En Karmic y Lucid es muy fácil instalar Drbd. Ya no hay que construir el módulo con m-a. En las versiones recientes ya viene compilado de serie, así que tan solo lo tenemos que cargarlo con modprobe o modconf:<code><br />
# modprobe drbd<br />
</code></p>
<p>E instalamos las utilidades:<code><br />
# aptitude install drbd8-utils<br />
</code></p>
<p>El archivo de configuración se encuentra en /etc/drbd.conf este debería de ser idéntico en los dos servidores.<br />
Como siempre, primero procedemos a hacer un backup &#8216;cp /etc/drbd.conf /etc/drbd.conf.backup&#8217; y lo editamos:<code><br />
#<br />
# At most ONE global section is allowed.<br />
# It must precede any resource section.<br />
#<br />
global {<br />
usage-count yes;<br />
}</code></p>
<p><code>common {<br />
syncer { rate 100M; }<br />
}</code></p>
<p><code>#<br />
# this need not be r#, you may use phony resource names,<br />
# like "resource web" or "resource mail", too<br />
#</code></p>
<p><code> </code></p>
<p><code>resource r0 {<br />
protocol C;<br />
startup {<br />
wfc-timeout  5;<br />
degr-wfc-timeout 3;<br />
}<br />
on asterisk1 {<br />
device /dev/drbd0;<br />
disk /dev/mapper/asterisk1-replica;<br />
address 192.168.10.141:7788;<br />
meta-disk internal;<br />
}<br />
on asterisk2 {<br />
device /dev/drbd0;<br />
disk /dev/mapper/asterisk2-replica;<br />
address 192.168.10.142:7788;<br />
meta-disk internal;<br />
}<br />
}<br />
</code></p>
<p>Esta es mi configuración. Mira los recursos que cito para ajustarla a la tuya.<br />
Una vez editado los archivos de config reiniciamos ambos servidores.</p>
<p>Ahora procedemos a crear la particion virtual /dev/drbd0 en ambos servidores:<code><br />
# drbdadm create-md r0<br />
</code></p>
<p>y nos saldrá un mensaje de éxito:<code><br />
initialising activity log<br />
NOT initialized bitmap<br />
New drbd meta data block sucessfully created.<br />
success<br />
</code></p>
<p>Si nos sale un error como este:<code><br />
md_offset 48259657728<br />
al_offset 48259624960<br />
bm_offset 48258150400</code></p>
<p><code>Found ext3 filesystem which uses 47128576 kB<br />
current configuration leaves usable 47127100 kB</code></p>
<p><code>Device size would be truncated, which<br />
would corrupt data and result in<br />
'access beyond end of device' errors.<br />
You need to either<br />
* use external meta data (recommended)<br />
* shrink that filesystem first<br />
* zero out the device (destroy the filesystem)<br />
Operation refused.</code></p>
<p><code> </code></p>
<p><code>Command 'drbdmeta /dev/drbd0 v08 /dev/mapper/asterisk1-replica internal create-md' terminated with exit code 40<br />
drbdadm create-md r0: exited with code 40<br />
</code></p>
<p>Pués deberemos ejecutar en asterisk1:<code><br />
# dd if=/dev/zero of=/dev/mapper/asterisk1-replica bs=1M count=128<br />
</code><br />
y en asterisk2 idem:<code><br />
# dd if=/dev/zero of=/dev/mapper/asterisk2-replica bs=1M count=128<br />
</code><br />
y ahora ya debería dejar crearlo:<code><br />
# drbdadm create-md r0<br />
</code></p>
<p>Ahora iniciamos el servico Drbd en ambos servidores. Primero asterisk1 y luego en asterisk2:<code><br />
# /etc/init.d/drbd start<br />
</code><br />
y nos saldrá algo como:<code><br />
root@asterisk1:~# /etc/init.d/drbd start<br />
* Starting DRBD resources                                                                                                                                   [ s(r0) ]<br />
</code><br />
y también en asterisk2:<code><br />
root@asterisk2:~# /etc/init.d/drbd start<br />
* Starting DRBD resources                                                                                                                                   [ d(r0) n(r0) ]<br />
</code></p>
<p>Ahora si hacemos un &#8216;cat /proc/drbd&#8217; veremos que aun no esta sicronizando los discos:<code><br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---<br />
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:47127100<br />
</code></p>
<p>Para que empiecen a sincronizar, primero debemos marcar uno como primario. En este caso asterisk1:<code><br />
drbdadm -- --overwrite-data-of-peer primary all<br />
</code></p>
<p>En este mismo momento asterisk2 mepzará a sincronizar los datos. Lo vemos con un:<code><br />
root@asterisk2:~# cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r---<br />
ns:0 nr:3369544 dw:3369492 dr:0 al:0 bm:205 lo:14 pe:2379 ua:13 ap:0 ep:1 wo:b oos:43757608<br />
[&gt;...................] sync'ed:  7.2% (42732/46022)M<br />
finish: 1:02:23 speed: 11,644 (11,268) K/sec<br />
</code></p>
<p>Una vez aparezca &#8216;ds:UpToDate/UpToDate&#8217; quiere decir que ya habrá sincronizado las particiones.</p>
<p>Podemos determinar cual es el &#8216;rol&#8217; de un servidor ejecutando:<code><br />
# drbdadm role r0<br />
</code><br />
en cada uno de ellosy nos dirá Primary/Secondary o Secondary/Primary</p>
<p><em><span style="text-decoration: underline;">Ahora tan SOLO en el primario</span></em><br />
Por último nos falta formatear esta nueva partición, en mi caso en ext4 y montarla para que sea accesible. OJO, esto solo lo tenemos que hacer en el servidor primario:<code><br />
# mkfs.ext4 /dev/drbd0<br />
</code><br />
y lo montamos:<code><br />
mount -t ext4 /dev/drbd0 /mnt/local/replica<br />
</code></p>
<p>ATENCION!!, ahora quietos paraos, que ya os veo montandolo en el secundario y probando a escribir algo. No se puede tenerlo montado en los dos a la vez e intentar escribir en el.<br />
Si queremos comprender como funciona podemos hacer las siguientes pruebas (opcional):</p>
<p><strong>Pruebas funcionamiento</strong><br />
- Primera prueba:<br />
Una vez montada la partición /dev/drbdo en /mnt/local/replica en el primario, copiamos algo a ella:<code><br />
# cp /etc/hosts /mnt/local/replica/<br />
</code></p>
<p>desmontamos el recurso y hacemos que el primario pase a ser secundario:<code><br />
# umount /mnt/local/replica<br />
# drbdadm secondary r0<br />
</code></p>
<p>Si ahora ejecutamos un &#8216;drbdadm role r0&#8242; veríamos:<code><br />
Secondary/Secondary<br />
</code></p>
<p>Nos vamos al secundario y lo volvemos primario montamos la partición y comprobamos que este el archivo:<code><br />
drbdadm primary r0<br />
mkdir /mnt/local/replica<br />
mount -t ext4 /dev/drbd0 /mnt/local/replica<br />
ls /mnt/local/replica<br />
</code></p>
<p>En este punto el primario (asterisk1) ha tomado el rol de secundario y el secundario (asterisk2) ha tomado el rol del primario.</p>
<p>- Segunda prueba:<br />
Apagamos el que es ahora el servidor secundario (osea asterisk1). Veremos que deja de estar sincronizado:<code><br />
# cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r---<br />
ns:56 nr:48000148 dw:48000204 dr:33 al:3 bm:2877 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0<br />
</code></p>
<p>Copiamos unos archivos mas a /mnt/local/replica:<code><br />
# cp /etc/hosts.* /etc/group /mnt/local/replica<br />
</code></p>
<p>Y encendemos otra vez asterisk1. Cuando encienda empieza a sincronizar la partición drbd. Es decir los datos estan replicados en los dos, pero SOLO puede acceder y montar el recurso para escribir uno de ellos en todo momento.</p>
<p>Una vez ha arrancado el secundario (asterisk1) volvemos a chequear el primario y veremos que vuelve a estar sincronizado:<code><br />
cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r---<br />
ns:176 nr:48000148 dw:48000324 dr:149 al:5 bm:2880 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0<br />
</code></p>
<p>- Tercera prueba:<br />
Ahora procedemos a apagar el primario (asterisk2) directamente, sin desmontar /dev/drbd0 ni nada.</p>
<p>Al rato el secundario estará des-sincronizado:<code><br />
# cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r---<br />
ns:0 nr:120 dw:120 dr:0 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0<br />
</code></p>
<p>Entonces lo volvemos a hacer primario:<code><br />
drbdadm primary r0<br />
</code></p>
<p>Y montamos el recurso:<code><br />
mount -t ext4 /dev/drbd0 /mnt/local/replica<br />
</code></p>
<p>En este momento asterisk1 vuelve a ser el primario y asterisk2 el secudario</p>
<p>Ahora cuando encendamos el secundario, al arrancar, se dara cuenta de que el ya no es el primario y de que el otro (asterisk1) tiene los datos mas &#8216;frescos&#8217; por lo cual se actualizará con el (ya que mientras ha etado apagado se pueden haber creado mas archivos).</p>
<p>Esta prueba deja el sistema degradado ya que no hemos hecho un apagado en &#8216;orden&#8217;. Para hacer un apagado en orden tenemos que desmontar el recurso y ceder el mando al otro servidor haciendonos secundario y poniendo al otro primario. Habría que automatizar esto y aun no se como se hace (cualquier aporte será agradecido).</p>
<p>Al arrancar nos aparaecerá algo como &#8220;Split-Brain detected&#8221;, entonces en el secundario que acabamos de arrancar, hacemos:<code><br />
drbdadm secondary r0<br />
drbdadm -- --discard-my-data connect r0<br />
</code></p>
<p>Y en el primario:<code><br />
drbdadm connect r0<br />
</code></p>
<p>Y ya tenemos otra vez el sistema sincronizado.</p>
<p>Bien, como hemos visto esto esta todo muy bien, pero si no lo podemos automatizar no nos vale de nada. Si un servidor nos casca, tendríamos que estar allí para desmontar y pasar el control al secundario, lo cual lo hace inservible.</p>
<p>Para automatizar esto esta Heartbeat.</p>
<p><strong>Heartbeat</strong></p>
<p>Para instalarlo en Ubuntu simplemente hacemos:<code><br />
# aptitude install heartbeat<br />
The following NEW packages will be installed:<br />
gawk{a} heartbeat heartbeat-common{a} libcurl3{a} libheartbeat2{a} libltdl7{a} libnet1{a} libopenhpi2{a} libopenipmi0{a} libperl5.10{a} libsensors3{a}<br />
libsnmp-base{a} libsnmp15{a} libsysfs2{a} libxml2-utils{a} openhpid{a}<br />
0 packages upgraded, 16 newly installed, 0 to remove and 0 not upgraded.<br />
Need to get 5671kB of archives. After unpacking 18,4MB will be used.<br />
</code></p>
<p>Veremos que nos suelta algo como:<code><br />
Heartbeat not configured: /etc/ha.d/ha.cf not found.<br />
Heartbeat failure [rc=1]. Failed.<br />
</code></p>
<p>Esto es normal, porque lo vamos a configurar a continuación.<br />
Necesitamos configurar tres archivos en el dir /etc/ha.d/ así que nos vamos a este directorio y como no, nos leemos el README de turno.</p>
<p>Estos tres archivos son:<code><br />
ha.cf - Main configuration file<br />
haresources - Resource configuration file<br />
authkeys - Authentication information<br />
</code></p>
<p>Los copiamos de /usr/share/doc/heartbeat a /etc/ha.d/ y los descomprimimos:<code><br />
# cp /usr/share/doc/heartbeat/ha.cf.gz .<br />
# cp /usr/share/doc/heartbeat/authkeys .<br />
# cp /usr/share/doc/heartbeat/haresources.gz .</code></p>
<p><code> </code></p>
<p><code># gzip -d ha.cf.gz<br />
# gzip -d haresources.gz<br />
</code></p>
<p>Editamos primero ha.cf y ponemos:</p>
<p><span style="font-family: monospace;">debugfile /var/log/ha-debug</span></p>
<p><code> logfile /var/log/ha-log<br />
logfacility     local0<br />
keepalive 2<br />
deadtime 20<br />
warntime 10<br />
initdead 40<br />
udpport 694<br />
bcast eth0<br />
auto_failback off<br />
node	asterisk1<br />
node	asterisk2<br />
</code></p>
<p>La opcíon &#8216;auto_failback off&#8217; significa que si asterisk1 se cae, el control pasa a asterisk2 y que si asterisk1 vuele a estar disponible, que asterisk2 no le devuleva el control.</p>
<p>Lo configuro de esta forma, porque en ocasiones un servidor puede estar con un interfaz de red o latiguillo mal y estar pasando de disponible a no disponible todo el rato, lo cual volvería loco al servicio. Es mejor que pase el servicio al secundario y luego estudiar que ha sucedido.</p>
<p>De esta forma se provee una funcionalidad básica en modo activo/pasivo. Cada opción viene explicada en el archvio de configuración que hemos copiado.<br />
Este archico (/etc/ha.d/ha.cf) ha de ser igual en los dos servidores.</p>
<p>A continuación en el archivo haresources definimos en donde vamos a montar el recurso DRBD (/dev/drbd0), que IP va a ser usada como &#8216;Virtual&#8217;, para acceder a los servicios y los scripts en init.d que se van a iniciar durante un failover o un switchover (fonulator y asterisk).<br />
Editamos el /etc/ha.d/haresources de asterisk1 y asterisk2 y ponemos (ojo! TODO en una misma línea):<code><br />
asterisk1 drbddisk::r0 Filesystem::/dev/drbd0::/mnt/local/replica::ext4 IPaddr::192.168.3.111/24/eth0 asterisk fonulator mail-heartbeat<br />
</code></p>
<p>Al final van los servicios de /etc/init.d que queremos que se ejecuten cuando se haya un failover o un switchover.</p>
<p>En este caso yo pongo:</p>
<li>asterisk. Dahdi no hace falta, ya que los módulos van a estar cargados en ambas máquinas permanentemente.</li>
<li>fonulator. Habrá que crear un script en /etc/init.d que se encague de ejecutar &#8216;fonulator&#8217; cada vez que haya un failover</li>
<li>mail-heartbeat. Programamos un script que envíe un mail de aviso, asi cada vez que haya un failover o switchover nos envía un menmsaje</li>
<p>A continuación editamos el archivo authkeys, que provee un nivel de seguridad para que se autentiquen solo estos dos servidores. Ponemos en ambos servidores:<code><br />
auth 2<br />
2 sha1 Elpasswordquetedelagana<br />
</code></p>
<p>Y le quitamos los permisos de lectura a todos menos a root:<code><br />
# sudo chmod 600 /etc/ha.d/authkeys<br />
</code></p>
<p>Ahora ya están los dos servidores configurados.</p>
<p><strong><br />
Pruebas</strong><br />
Apagamos ambos servidores y encendemos el primario (asterisk1). Veremos que monta la partición drdb y que la VIP (Virtual IP) este accesible (la podemos ver haciendo un ifconfig).<br />
También comprobamos que es el primario:<code><br />
# drbdadm role r0<br />
veríamos:<br />
Primary/Unknown<br />
</code></p>
<p>A continuación arrancamos el secundario (asterisk2). Y comprobamos que es el secundario:<code><br />
# drbdadm role r0<br />
Secondary/Primary<br />
</code></p>
<p>Y que sincroniza:<code><br />
cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r---<br />
ns:0 nr:8 dw:8 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0<br />
</code></p>
<p>Ahora viene la prueba de fuego. Hacemos un &#8216;failover&#8217;. Apagamos a machete el servidor primario. Veremos que acto seguido pasa a ser el primario, que toma control del recurso drdb, que lo monta y que toma control de la ip. De hecho si mantenemos un ping a la VIP veremos que se corta el servicio tan solo entre unos 5-10 segs (en mi caso).</p>
<p>Para volver a poner el primario en asterisk1, tal y como explicamos anteriormente hacemos un &#8216;switchover&#8217; (cambio controlado).<br />
Encendemos asterisk1, que ahora es el secundario:<code><br />
# drbdadm role r0<br />
Secondary/Primary<br />
</code></p>
<p>y esperamos a que sincronicen los discos:<code><br />
# cat /proc/drbd<br />
version: 8.3.0 (api:88/proto:86-89)<br />
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by ivoks@ubuntu, 2009-01-17 07:49:56<br />
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r---<br />
ns:0 nr:8192 dw:8192 dr:0 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0<br />
</code></p>
<p>Y ahora es tan fácil como ir al primario (asterisk2) y hacer un:<code><br />
# /etc/init.d/heartbeat restart<br />
Stopping High-Availability services:<br />
Done.</code></p>
<p><code>Waiting to allow resource takeover to complete:<br />
Done.</code></p>
<p><code> </code></p>
<p><code>Starting High-Availability services:<br />
2010/02/08_15:23:50 INFO:  Resource is stopped<br />
Done.<br />
</code></p>
<p>Y voila!. Asterisk1 pasa a tomar el control, con el recurso montado, la IP virtual y demas.</p>
<p>En el siguiente post explicaré como adaptar la instalación de asterisk a este entorno y como instalar el redfone.</p>
<p>PD:<br />
Por cierto estas instrucciones me han funcionado a mi y se ofrecen sin ningún tipo de garantía.<br />
Siento no permitir comentarios, en parte porque siempre me olvido de contestarlos y porque entiendo que si has llegado hasta aquí y estás intentando instalar algo así tendrás los recursos necesarios para solucionarlo por tu cuenta y no tener que investigar yo sobre como solucionarlo&#8230; espero que no suene muy borde <img src='http://www.gonzalomarcote.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Si necesites adaptar ciertas cosas e investigar mas sobre el asunto, estaría bien leer las siguientes fuentes en las que me basé.</p>
<p>Fuentes Drbd + Hearbeat:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
<a href="http://roaksoax.wordpress.com/2008/07/31/installing-drbd-on-hardy/">http://roaksoax.wordpress.com/2008/07/31/installing-drbd-on-hardy/</a><br />
<a href="http://roaksoax.wordpress.com/2008/08/04/installing-drbd-on-hardy-part-2/">http://roaksoax.wordpress.com/2008/08/04/installing-drbd-on-hardy-part-2/</a></p>
<p>Fuentes Drbd:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<a href="http://kylecordes.com/2007/01/27/drbd-ubuntu/">http://kylecordes.com/2007/01/27/drbd-ubuntu/</a><br />
<a href="http://davehall.com.au/blog/dave/2009/12/08/drbd-ubuntu-karmic">http://davehall.com.au/blog/dave/2009/12/08/drbd-ubuntu-karmic</a><br />
<a href="https://wiki.ubuntu.com/Testing/Cases/UbuntuServer-drbd">https://wiki.ubuntu.com/Testing/Cases/UbuntuServer-drbd</a><br />
<a href="http://www.guatewireless.org/como-instalar-drbd-sobre-linux-debian-ubuntu/">http://www.guatewireless.org/como-instalar-drbd-sobre-linux-debian-ubuntu/</a><br />
<a href="http://www.howtoforge.com/drbd-on-centos-4.5">http://www.howtoforge.com/drbd-on-centos-4.5</a></p>
<p>Fuentes HeartBeat:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<a href="http://www.associatedcontent.com/article/1930488/installing_and_configuring_heartbeat.html?cat=15">http://www.associatedcontent.com/article/1930488/installing_and_configuring_heartbeat.html?cat=15</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un shell en tu navegador. Preparándose para Chrome OS</title>
		<link>http://www.gonzalomarcote.com/?p=49</link>
		<comments>http://www.gonzalomarcote.com/?p=49#comments</comments>
		<pubDate>Tue, 15 Jun 2010 10:36:48 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[chrome OS]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=49</guid>
		<description><![CDATA[La verdad es que Google tiene mucha razón de que cada día pasamos mas tiempo en el navegador. Sin duda el navegador Chrome es buenísimo y ya ha sustituido a firefox en mi ubuntu. Buscando información sobtre Chrome OS, una de las cosas que veo que le falta (por lo menos la iso de Chromium [...]]]></description>
			<content:encoded><![CDATA[<p>La verdad es que Google tiene mucha razón de que cada día pasamos mas tiempo en el navegador. Sin duda el navegador Chrome es buenísimo y ya ha sustituido a firefox en mi ubuntu.<br />
Buscando información sobtre Chrome OS, una de las cosas que veo que le falta (por lo menos la iso de Chromium OS que he probado) es la facilidad de acceder a un terminal para administrar otras máquinas (sin irse a un TTY matando las X, calro).</p>
<p>Una posible solución que me ha sorprendido y que ya estoy usando en mi ubuntu es <a href="http://code.google.com/p/shellinabox/">Shellinabox</a>.<br />
Podemos descargar las sources desde de karmic desde <a href="https://launchpad.net/~popey/+archive/shellinabox">Launchpad</a> e instalarlo por apt (valen para lucid).</p>
<p>Podemos acceder al shell a través de <a href="https://localhost:4200/">https://localhost:4200/</a></p>
<p>La configuración es bien simple.<br />
Podemos definir el aspecto, creando o borrando links en los dirs <code>/etc/shellinabox</code>.<br />
Las posibilidades son muchas, como acceder desde fuera si nateamos el puerto que trae por defecto (4200). En el caso de que solo queramos acceder localmente podemos editar el archivo <code>/etc/default/shellinabox</code> y poner la opción:<br />
<code><br />
SHELLINABOX_ARGS="--no-beep --localhost-only --disable-ssl"<br />
</code><br />
Así no se pueden conectar desde otras máquinas y desactivamos el soporte https.</p>
<p>Ahora ya no salgo de mi navegador chrome para nada <img src='http://www.gonzalomarcote.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<a href="http://www.gonzalomarcote.com/blog/wp-content/uploads/2010/06/Pantallazo.png"><img src="http://www.gonzalomarcote.com/blog/wp-content/uploads/2010/06/Pantallazo-300x193.png" alt="" title="Shellinabox" width="300" height="193" class="alignnone size-medium wp-image-51" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=49</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como instalar e integrar festival con Asterisk</title>
		<link>http://www.gonzalomarcote.com/?p=28</link>
		<comments>http://www.gonzalomarcote.com/?p=28#comments</comments>
		<pubDate>Sat, 15 May 2010 17:39:28 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=28</guid>
		<description><![CDATA[Festival es un TTS (Text to speech) de la universidad de Edimburgo OpenSource. Las voces en Inglés tiene una calidad aceptable, pero en Español son pésimas así que explicaré como instalar unas un poco mejores. En debian/ubuntu instalamos Festival por apt: aptitude install festival festvox-ellpc11k Se instalarán los siguiente paquetes NUEVOS: esound-clients{a} esound-common{a} festival festlex-cmu{a} [...]]]></description>
			<content:encoded><![CDATA[<p>Festival es un TTS (Text to speech) de la universidad de Edimburgo OpenSource. Las voces en Inglés tiene una calidad aceptable, pero en Español son pésimas así que explicaré como instalar unas un poco mejores.</p>
<p>En debian/ubuntu instalamos Festival por apt:</p>
<p><span id="more-28"></span> <code>aptitude install festival festvox-ellpc11k<br />
Se instalarán los siguiente paquetes NUEVOS:<br />
esound-clients{a} esound-common{a} festival festlex-cmu{a} festlex-poslex{a} festvox-ellpc11k festvox-kallpc16k{a} libaudiofile0{a} libesd0{a} libestools1.2{a}<br />
0 paquetes actualizados, 10 nuevos instalados, 0 para eliminar y 0 sin actualizar.</code></p>
<p>festvox-ellpc11k es la voz española predefinida. No tiene muy buena calidad. No obstante, dos empresas de Sevilla (Indisys y MP-Sistemas) han desarrollado dos voces en español neutro, masculina y femenina (Pedro y Silvia) según una petición de la Junta de Andalucía para dotar a su distribución GuadaLinex de un sintetizador de voz. Están disponibles con licencia libre para cualquiera que quiera utilizarlas:</p>
<p><code>http://forja.guadalinex.org/repositorio/frs/?group_id=21&amp;release_id=110</code></p>
<p>Primero configuramos estival con la voz predefinida, para ello editamos /etc/festival.scm y ponemos (si no existe lo creamos):</p>
<p><code><br />
;; Enable access to localhost (needed by debian users)<br />
(set! server_access_list ‘(”localhost\\.localdomain” “localhost”))</p>
<p>;; set spanish voice (comment the following 2 lines to use british_american)<br />
;; (language_spanish)<br />
(set! voice_default ‘voice_el_diphone)</p>
<p>;;; Command for Asterisk begin<br />
(define (tts_textasterisk string mode)<br />
“(tts_textasterisk STRING MODE)<br />
Apply tts to STRING. This function is specifically designed for<br />
use in server mode so a single function call may synthesize the string.<br />
This function name may be added to the server safe functions.”<br />
(utt.send.wave.client (utt.wave.resample (utt.wave.rescale (utt.synth<br />
(eval (list ‘Utterance ‘Text string))) 5) 8000)))<br />
;;; Command for Asterisk end<br />
</code></p>
<p>Y en /etc/asterisk/festival.conf</p>
<p><code><br />
;<br />
; Festival Configuration<br />
;<br />
[general]<br />
;<br />
; Host which runs the festival server (default : localhost);<br />
;<br />
host=localhost<br />
;<br />
; Port on host where the festival server runs (default : 1314)<br />
;<br />
port=1314<br />
;<br />
; Use cache (yes, no - defaults to no)<br />
;<br />
;usecache=yes<br />
;<br />
; If usecache=yes, a directory to store waveform cache files.<br />
; The cache is never cleared (yet), so you must take care of cleaning it<br />
; yourself (just delete any or all files from the cache).<br />
; THIS DIRECTORY *MUST* EXIST and must be writable from the asterisk process.<br />
; Defaults to /tmp/<br />
;<br />
;cachedir=/var/lib/asterisk/festivalcache/<br />
;<br />
; Festival command to send to the server.<br />
; Defaults to: (tts_textasterisk “%s” ‘file)(quit)\n<br />
; %s is replaced by the desired text to say. The command MUST end<br />
; with a (quit) directive, or the cache handling mechanism will hang.<br />
; Do not forget the \n at the end.<br />
;<br />
festivalcommand=(tts_textasterisk “%s” ‘file)(quit)\n<br />
;<br />
;</code></p>
<p>Y por último corremos:</p>
<p><code><br />
usr/bin/festival –server &gt; /dev/null 2&gt;&amp;1 &amp;<br />
</code></p>
<p>Y iniciamos o reiniciamos asterisk.</p>
<p>Para porbarla, usamos la application Festival. Ponemos por ejemplo:</p>
<p><code>exten =&gt; 100,1,Answer()<br />
exten =&gt; 100,2,Festival(Esto es una prueba)<br />
exten =&gt; 100,3,Hangup()</code></p>
<p>y marcamos la exten 100</p>
<p>La voz por defecto suena muy triste y robótica.</p>
<p>Para crear una locución para poder usar la application Background podemos crearlas con la utilidad de festival text2wave:</p>
<p><code>echo "Para hablar con un operador, pulse uno; para hablar con ventas, pulse 2; sino, espere porfavor" | iconv -f utf-8 -t iso-8859-1 | /usr/bin/text2wave -scale 1.5 -F 8000 -o ./bienvenida.wav</code></p>
<p><strong>Voces de la junta de extremadura:</strong></p>
<p>Bien, como veis, para ponerla en español (el_diphone) hay que poner el parámetro ‘voice_el_diphone&#8217; que es la que instaló el paquete festvox-ellpc11k. Es la voz por defecto y es un poco cutre.</p>
<p>Así que nos descargamos los .deb de las voces anteriormente dichas, en:<br />
<code>http://forja.guadalinex.org/repositorio/frs/?group_id=21&amp;release_id=110</code></p>
<p>En concreto yo he instalado las últimas:<br />
<code>Última versión Voz femenina:<br />
festvox-sflpc16k_1.0-1_all.deb</p>
<p>Ultima versión voz masculina:<br />
festvox-palpc16k_1.0-1_all.deb</code></p>
<p>Y las instalamos:<br />
<code>dpkg -i festvox-palpc16k_1.0-1_all.deb</p>
<p>dpkg -i festvox-sflpc16k_1.0-1_all.deb</code></p>
<p>Ahora editamos /etc/festival.scm y las probamos. La voz masculina se llama:<br />
<code>JuntaDeAndalucia_es_pa_diphone</code><br />
y la femenina:<br />
<code>JuntaDeAndalucia_es_sf_diphone</code></p>
<p>por lo que pondremos:<br />
<code>(set! voice_default ‘voice_JuntaDeAndalucia_es_pa_diphone)</code></p>
<p>Y para la voz femenina:<br />
<code>(set! voice_default ‘voice_JuntaDeAndalucia_es_sf_diphone)</code><br />
(una u otra comentando las otras con un ;;;)</p>
<p>Ahora suena bastante mejor, ¿no?</p>
<p>No son perfectas, pero es lo mejor que hay de código Abierto y gratis.</p>
<p>NOTA IMPORTANTE:</p>
<p>Festival es inseguro. Tiene algunos fallos de seguridad y aunque cambiemos el puerto puede que algún atacante lo utilice para hecrse con el sistema&#8230;.No creo que sea fácil ni que mucha gente sepa del conocimiento para hacer esto (o incluso sepa de la existencia del mismo festival) pero cabe la posibilidad, así que quedas avisado.</p>
<p>Tenerlo corriendo como demonio no es buena idea a no ser que tu máquina no sea accesible desde fuera.</p>
<p>Si es una máquina en producción y accesible desde internet es mejor crear las locuiones a mano con la aplicación &#8216;text2wave&#8217;.</p>
<p>Si tu máquina es inaccesible y quieres tener Festival corriendo como demonio y que se arranque con tu sistema y así odamos usarlo desde el dialplan con la application &#8216;Festival&#8217;, has de poner este script en /etc/init.d/festival. Comprueba antes si debian te lo ha instalado ya por apt. A mi no me lo incluyó así que lo tuve que poner a mano:<br />
<code><br />
#!/bin/sh<br />
#/etc/init.d/festival<br />
#<br />
# Init script for starting Festival as a system-wide server process.<br />
#<br />
# Written by David Huggins-Daines <dhd@cepstral.com><br />
# LSBINITInfo by Kartik Mistry <kartik.mistry@gmail.com><br />
# LSB logging functions by David Härdeman <david@hardeman.nu></p>
<p>### BEGIN INIT INFO<br />
# Provides:          festival<br />
# Required-Start:    $syslog<br />
# Required-Stop:     $syslog<br />
# Should-Start:      $local_fs<br />
# Should-Stop:       $local_fs<br />
# Default-Start:     2 3 4 5<br />
# Default-Stop:      0 1 6<br />
# Short-Description: Starts Festival engine at boot time<br />
# Description:       Init script for starting Festival TTS as a<br />
#                    system-wide server process<br />
### END INIT INFO</p>
<p>[ -r /etc/default/festival ] &#038;&#038; . /etc/default/festival<br />
    if [ "$RUN_FESTIVAL" != yes ]; then<br />
        exit 0<br />
    fi</p>
<p># NOTE: Not just anybody can connect to your server; the list of allowed<br />
# hostnames is a regexp. Check /usr/share/festival/festival.scm for more<br />
# helpful comments; add your settings to /etc/festival.scm.</p>
<p>set -e</p>
<p>DAEMON=/usr/bin/festival<br />
REALPROC=/usr/bin/festival<br />
NAME=festival</p>
<p>. /lib/lsb/init-functions</p>
<p>test -x $DAEMON || exit 0</p>
<p>case "$1" in<br />
  start)<br />
    log_daemon_msg "Starting Festival server" "$NAME"<br />
    start-stop-daemon --start --chuid festival --background \<br />
                      --exec $DAEMON -- --server<br />
    log_end_msg 0<br />
    ;;<br />
  stop)<br />
    log_daemon_msg "Stopping Festival server" "$NAME"<br />
    start-stop-daemon --stop --oknodo --exec $REALPROC<br />
    log_end_msg 0<br />
    ;;<br />
  restart|reload|force-reload)<br />
    log_daemon_msg "Restarting Festival server" "$NAME"<br />
    start-stop-daemon --stop --oknodo --exec $REALPROC<br />
    start-stop-daemon --start --chuid festival --background \<br />
                      --exec $DAEMON -- --server<br />
    log_end_msg 0<br />
    ;;<br />
  *)<br />
    echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&#038;2<br />
    exit 2<br />
    ;;<br />
esac</p>
<p>exit 0<br />
</code></p>
<p>Y hacemos como root:<code><br />
# update-rc.d festival defaults<br />
</code></p>
<p>Y en /etc/default/festival ponemos:<code><br />
# Set RUN_FESTIVAL=yes to start festival at boot time.<br />
RUN_FESTIVAL=yes<br />
</code><br />
Cambiando simplemente este archivo poniéndolo a no, ya no se iniciará como demonio.</p>
<p>PD: Si alguien conoce unas voces en castellano de mejor calidad u otras variantes (Acento de Argentina, Méjico, etc) estaría bien que lo comentase.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=28</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalación de Asterisk 1.6 en Ubuntu server</title>
		<link>http://www.gonzalomarcote.com/?p=21</link>
		<comments>http://www.gonzalomarcote.com/?p=21#comments</comments>
		<pubDate>Fri, 14 May 2010 10:49:05 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=21</guid>
		<description><![CDATA[En este post voy a explicar como instalar Asterisk 1.6 de una forma bastante completa en Ubuntu Server. Con un ubuntu server (10.04 por ej) recién instalado, primero instalamos las dependencias necesarias: ﻿aptitude install gcc-4.4 (compilador para compilar libpri, dahdi y asterisk) aptitude install dpatch build-essential (instala make, c++, etc necesarios para compilar) aptitude install [...]]]></description>
			<content:encoded><![CDATA[<p>En este post voy a explicar como instalar Asterisk 1.6 de una forma bastante completa en Ubuntu Server.</p>
<p>Con un ubuntu server (10.04 por ej) recién instalado, primero instalamos las dependencias necesarias:</p>
<p><span id="more-21"></span></p>
<p>﻿aptitude install gcc-4.4	(compilador para compilar libpri, dahdi y asterisk)</p>
<p>aptitude install dpatch build-essential			(instala make, c++, etc necesarios para compilar)</p>
<p>aptitude install fakeroot patchutils</p>
<p>aptitude install bison		(parser generator program)</p>
<p>aptitude install libnewt0.52 libnewt-dev	(para la utilidad dahdi_tool)</p>
<p>aptitude install openssl	(librería criptográfica para IAX2 encription, RSA support)</p>
<p>y sus paquetes de dev:</p>
<p>aptitude install libssl0.9.8 libssl-dev zlib1g-dev  -&gt; (zlib1-dev, dependencia de DUNDi)</p>
<p>aptitude install libncurses5 libncurses5-dev</p>
<p>Para XML</p>
<p>aptitude install libxml2-dev</p>
<p>aptitude install gcc-4.4	(compilador para compilar libpri,zaptel y asterisk)</p>
<p>aptitude install module-assistant dpatch build-essential			(instala make, c++, etc necesarios para compilar)</p>
<p>aptitude install fakeroot patchutils</p>
<p>aptitude install bison		(parser generator program)</p>
<p>aptitude install libnewt0.52 libnewt-dev	(para el programa zttool)instalalibnewt-dev libslang2-dev</p>
<p>aptitude install openssl	(librería criptográfica para IAX encription, RSA support)y sus paquetes de devaptitude install libssl0.9.8 libssl-dev zlib1g-dev  -&gt; (zlib1-dev, dependencia de DUNDi)</p>
<p>aptitude install libncurses5 libncurses5-dev</p>
<p><strong>Optativos:</strong></p>
<p>aptitude install libedit2 libedit-dev libeditline0 libeditline-dev</p>
<p>Para crear documentación:</p>
<p>aptitude install doxygen</p>
<p>aptitude install flex</p>
<p>Utilidades para convertir archivos de sonido:</p>
<p>aptitude install sox</p>
<p>Para dar soporte a bases de datos ODBC:</p>
<p>aptitude install unixodbc unixodbc-dev libtool</p>
<p>2-Paquetes requeridos para compilar diferentes funcionalidades:</p>
<p>Para gtalk:</p>
<p>aptitude install libiksemel3 libiksemel-dev libiksemel-utils</p>
<p>Para el codec speex:</p>
<p>aptitude install libspeexdsp-dev</p>
<p>Para curl:</p>
<p>aptitude install curl libcurl3 libcurl4-openssl-dev</p>
<p>Para netsnmp:</p>
<p>aptitude install libsnmp15 libsnmp-base libsnmp-dev</p>
<p>Para channel alsa, oss y vorbis</p>
<p>aptitude install libvorbis-dev libogg-dev libasound2 libasound2-dev</p>
<p>Para app_fax:</p>
<p>aptitude install libspandsp1 libspandsp-dev</p>
<p>3-Descargamos las versiones estables de Asterisk 1.6 y dahdi en /usr/src/:</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.3.0+2.3.0.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.0.26.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.6.0.4.tar.gz</p>
<p>También nos lo podemos descargar desde los dirs donde siempre hay las últimas versiones:</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.6.1-current.tar.gz</p>
<p>wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.6.1-current.tar.gz</p>
<p>Vamos a /usr/src y los descomprimimos:</p>
<p>tar -xvfz dahdi-*.tar.gz</p>
<p>tar -xvfz libpri-*.tar.gz</p>
<p>tar -xvfz asterisk-1.6.*.tar.gz</p>
<p>tar -xvfz asterisk-addons-1.6.*.tar.gz</p>
<p>3.2- Si ya teníamos previamente otra versión anterior de Asterisk, lo paramos y quitamos los módulos dahdi, dahdi_dummy y wctdm y todos los demas que tengamos.</p>
<p>4- Instalamos dahdi. Dahdi-linux-complete es un meta-paquete que incluye dahdi-linux que es el paquete que incluye los módulos y dahdi-tools que incluye las utilidades y scripts de inicio.</p>
<p>-Instalamos con:</p>
<p>make all</p>
<p>make install</p>
<p>make config</p>
<p>Ahora vamos a editar el archivo /etc/dahdi/modules y dejamos descomentados solo el hardware que tengamos (comentando los demás).</p>
<p>Si no tenemos ningún Hardware de Digium, comentamos todos.</p>
<p>Los módulos en vez de /lib/modules/2.6.XX-X-XXX/misc se encuentran en un nuevo directorio:</p>
<p>/lib/modules/2.6.XX-X-XXX/dahdi</p>
<p>Ahora ya podemos cargar los módulos con modprobe p con modconf.</p>
<p>Los módulos zaptel y ztdummy que se llaman diferente:</p>
<p>dahdi (que sustituye al zaptel)</p>
<p>dahdi_dynamic (que sustituye al ztdynamic, al ztd_eth y al ztd_ethmf)</p>
<p>dahdi_transcode (que sustituye al zttranscode)</p>
<p>dahdi_dummy (que sustituye al ztdummy)</p>
<p>y lo más novedoso:</p>
<p>dahdi_echocan_XXX (completamente nuevos y son los canceladores de eco software que ahora pueden ser cargados y descargados sin necesidad de recompilar el zaptel)</p>
<p>Para iniciar el DAHDI, tan solo tenemos que reiniciar el sistema, o bien iniciar el servicio:</p>
<p># /etc/init.d/dahdi start</p>
<p>&#8230;lo cual también cargaría los módulos necesarios.</p>
<p>5- Instalamos libpri</p>
<p>-Instalamos con:</p>
<p>make clean</p>
<p>make &amp;&amp; make install</p>
<p>6-Instalamos Asterisk con:</p>
<p>make clean</p>
<p>./configure</p>
<p>Si queremos revisar los módulos a instalar:</p>
<p>make menuselect (y podemos seleccionar gtalk, app_fax y todas las addons que queramos).</p>
<p>Si queremos instalar el codec ilbs, debemos de seleccionarlo e instalarlo antes de compilar (ver mas abajo).</p>
<p>make &amp;&amp; make install &amp;&amp; make samples</p>
<p>make config</p>
<p>6a- Codec ilbc</p>
<p>* Si se desea compilar ILBC se ha de ejecutar make menuselect y seleccionar dentro del apartado de codecs la opción ILBC.</p>
<p>* Antes de compilar entrar a contrib/scripts/ y ejecutar get_ilbc_source.sh.</p>
<p>* Una vez acabe, copiar: cp codecs/ilbc/*.* ../../codecs/ilbc/ para dejar el codigo en su sitio.</p>
<p>Ahora compilamos asterisk con normalidad.</p>
<p>Con esto dispondremos del códec ILBC en nuestro Asterisk sin mayor problema.</p>
<p>7- Instalamos addons</p>
<p>Dependencias:</p>
<p>Para chan_mobile de addons</p>
<p>aptitude install libbluetooth-dev</p>
<p>Para conexión con mysql instalamos:</p>
<p>aptitude install libmysqlclient-dev</p>
<p>y mysql-server si mysql va a estar en el mismo server.</p>
<p>Instalamos las addons con:</p>
<p>make clean</p>
<p>./configure</p>
<p>make menuselect</p>
<p>make &amp;&amp; make install &amp;&amp; make samples</p>
<p>8- Configuramos /etc/dahdi/system.conf y /etc/asterisk/chan_dahdi.conf si tenemos una tarjeta.</p>
<p>También podemos probar a ver si nos configura correctamente los archivos haciendo un:</p>
<p># dahdi_scan</p>
<p>Para ver si detecta correctamente nuestra tarjeta y si es así luego ejecutamos un:</p>
<p>dahdi_genconf</p>
<p>Lo cual intentará generarnos los archivos de configuración.</p>
<p>9- Reiniciamos</p>
<p>10- Y listo</p>
<p>Por supuesto aún quedan muchos temas por configurar, como las tarjetas que tengamos, el dialplan, el voicemail&#8230; ya que asterisk es un software muy complejo.</p>
<p>Se irán tratando esos temas en otros posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mi primer post</title>
		<link>http://www.gonzalomarcote.com/?p=5</link>
		<comments>http://www.gonzalomarcote.com/?p=5#comments</comments>
		<pubDate>Thu, 13 May 2010 20:22:38 +0000</pubDate>
		<dc:creator>Gonzalo</dc:creator>
				<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://www.gonzalomarcote.com/?p=5</guid>
		<description><![CDATA[He aquí el primer post de mi Blog!. Como veis de lo mas minimalista. Este Blog no tiene otro cometido que ir recopilando y publicando todas mis recetas y howto&#8217;s para poder consultarlas en un futuro y por si les sirve de utilidad a alguien mas. Los temas serán básicamente sobre S.O. GNU/Linux (Ubuntu y [...]]]></description>
			<content:encoded><![CDATA[<p>He aquí el primer post de mi Blog!. Como veis de lo mas minimalista.</p>
<p>Este Blog no tiene otro cometido que ir recopilando y publicando todas mis recetas y howto&#8217;s para poder consultarlas en un futuro y por si les sirve de utilidad a alguien mas.</p>
<p>Los temas serán básicamente sobre S.O. GNU/Linux (Ubuntu y Debian), VozIp (asterisk), programación y virtualización.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gonzalomarcote.com/?feed=rss2&amp;p=5</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
