Instalación de Asterisk y FreePBX (I) – Elección del hardware

asteriskA la hora de plantearnos la instalación de una centralita VoIP con Asterisk y FreePBX, una de las primeras cosas que tenemos que decidir es, como en muchos otros casos, el hardware que vamos a necesitar. La respuesta no es única, sino bastante dependiente de nuestras necesidades, así que vamos a tratar de ver y analizar los distintos elementos que pueden hacernos falta y a dar unas breves notas para hacer la elección correcta.

UNA MAQUINA PARA HACER LA INSTALACIÓN
El primer y único elemento indispensable es una máquina en la que instalar la centralita. Aunque tampoco tiene que ser muy grande o, siquiera, “real”. Asterisk es tan poco exigente que, incluso, existe una implementación denominada micro Elastix para la Raspberry Pi. Si no vamos a usar líneas telefónicas “convencionales” y sólo queremos utilizar proveedores de telefonía VoIP (aquí tienes una lista de las que operan en España) podemos recurrir a una máquina virtual o a un servidor VPS en un Hosting de nuestra elección. En la mayoría de las ocasiones, no obstante, no recurriremos a soluciones tan económicas. Por un lado, las comunicaciones telefónicas suelen ser un punto crítico en la mayoría de las instalaciones que querremos hacer, así que necesitaremos un hardware robusto y con redundancia en los puntos de fallo más críticos (discos en RAID por hardware, fuentes de alimentación redundantes, etc.). Por otro lado, si vamos a usar líneas de telefonía convencionales, una de las opciones más habituales es conectarlas a nuestra centralita mediante tarjetas especiales y estas suelen ser PCI o PCIe (aunque veremos que existen otras alternativas). No olvides, además, que necesitas que el hardware que elijas debe de funcionar correctamente con Linux. Todas las distribuciones que conozco que traen Asterisk preinstalado y listo para usar van sobre CentOS, así que si vas a coger una de estas opciones y aún tienes que comprar la máquina lo mejor es que te certifiquen que irá bien con CentOS o RedHat que, para el caso, son lo mismo. Y no, no se trata de una cuestión trivial. En un servidor con componentes muy específicos (como una tarjeta de RAID), por desgracia aún podemos tener sorpresas muy desagradables en este aspecto.

TARJETAS Y GATEWAYS
Digium TDM800P Si vamos a usar líneas de teléfono convencionales (analógicas o digitales) o queremos usar teléfonos analógicos con nuestra centralita, vamos a necesitar tarjetas especiales o gateways. Veamos ambas opciones.

Las tarjetas suelen ser, o bien PCI, o PCI express, así que si vamos a usarlas tenemos que tenerlo en cuenta cuando compremos el equipo. PCI, además, sólo admite dos tarjetas diferentes en el mismo equipo, así que si esta es nuestra elección mucho cuidado con las ampliaciones futuras. Además, si finalmente vamos a usar RAID por hardware posiblemente ya tendremos ocupada una de ellas.

Gateway GrandStream GXW408 Pero, empecemos por el principio ¿Que diferencia hay entre usar tarjetas o gateways? Desde el punto de vista operativo ninguna. Cualquiera de ambas opciones nos ofrecerá los mismos resultados. Las tarjetas se conectan a los buses internos del equipo y les conectamos directamente las líneas y/o teléfonos. Los gateways son dispositivos externos a los que conectamos las líneas y teléfonos y que, además, tienen una interfaz ethernet que irá conectada a nuestra red y que le permitirá comunicarse con la centralita a través del protocolo SIP. Las tarjetas no ocupan espacio, ni enchufes adicionales y sobrecargan menos la red de tráfico IP pero están más limitadas en cuanto al número y la variedad que podemos conectar a nuestra centralita. Además, no son un alternativa cuando vamos a hacer la instalación sobre una máquina virtual, una raspberry o algún otro equipo de bajo presupuesto.

En cualquiera de ambos casos, si vamos a conectar líneas digitales RDSI necesitaremos una tarjeta o gateway con conexión BRI/RDSI y si vamos a conectarle líneas analógicas convencionales necesitaremos que tenga puertos FXO. Si lo que queremos es conectarle teléfonos analógicos, deberá de contar con puertos FXS. Por cierto, ¿te lías con la diferencia entre FXO y FXS? Normal. Le pasa hasta a algún que otro teleco 😉 FXS es, hablando coloquialmente, el enchufe por donde viene nuestra línea de teléfono mientras que FXO sería el conector del aparato telefónico en si. Un FXS siempre va conectado a un FXO y viceversa. Si queremos conectar líneas analógicas a nuestra centralita necesitamos que esta cuente con puertos FXO (ya que las líneas son FXS). Si lo que queremos es pincharle teléfonos (FXO) necesitamos que cuente con puertos FXS.

Dentro de la amplia gama de tarjetas y gateways existentes hay una gran variedad de modelos que, incluso, admiten conexiones híbridas: líneas analógicas y digitales, puertos FXS y FXO combinados, etc. Para elegir, puedes echarle un vistazo, por ejemplo, al catálogo de Avanzada7, una de las mejores empresas que se dedican a estos menesteres en nuestro país.

Sólo un par de puntos adicionales: si finalmente vas a comprar tarjetas échale un vistazo a las de Digium antes que a ninguna. Tienen una buena relación calidad precio, todas las distribuciones de Asterisk vienen ya con los drivers necesarios (lo cual te ahorrará muchos problemas) y ayudarás a sostener el modelo de negocio de la empresa que, amablemente, nos regala un software tan fantástico (Digium es la empresa que desarrolla Asterisk). Y dos: las líneas digitales siempre dan más problemas que las analógicas. Más si te empeñas en usar “sucedaneos” como los que comercializa Jazztel. Pero esto es una historia que merece ser contada en otra ocasión…

LÍNEAS GSM
Topex SIP Mobilink Si queremos usar líneas móviles tenemos dos alternativas: usar un gateway analógico con salida FXS (como el EasyGate 2N del que ya hemos hablado aquí en alguna ocasión) y conectarlo a nuestra centralita como si se tratase de una línea telefónica analógica convencional, o usar un gateway como el Mobilink Topex SIP que nos permite conectarlo directamente a nuestra red local y comunicar mediante SIP con nuestra centralita. Cualquiera de ambos se vende en dos configuraciones diferentes con espacio para una o dos tarjetas SIM.

TELÉFONOS DIGITALES Y VÍDEO TELÉFONOS
No hacen falta teléfonos para usar una centralita Asterisk. Existen una gran variedad de softphones (muchos de ellos libres y gratuitos) que puedes utilizar desde tu PC con cualquier sistema operativo y sin mas requisitos que disponer de altavoces y micrófono. No obstante, si por comodidad o necesidad necesitas un teléfono mas convencional, dispones de una gran cantidad de modelos que se pueden conectar directamente a tu red local y que usan SIP para conectar con Asterisk (alguno por poco más de 30 euros), videoteléfonos, y puedes conectar cualquier teléfono analógico a través de un gateway o tarjeta que disponga de puertos FXS.

Apache Tunning (y II). Ajustando el parámetro MaxClients

apache Como ya habíamos hablado por aquí, uno de los parámetros críticos en un servidor Apache es MaxClients, el número máximo de conexiones que es capaz de manejar simultaneamente. Es crítico porque cada tarea de Apache consume una determinada cantidad de memoria y si la suma de la memoria que consumen todos de forma simultanea es mayor que la memoria RAM que la máquina tiene libre comenzará a hacer swapping a disco y, si esta situación se mantiene, corremos un riesgo importante de que se nos quede virtualmente congelada. Una instalación de Apache por defecto toma un valor de 150 para este parámetro y esto es una verdadera burrada para casi cualquier servidor web con menos de 1 Gbytes (o incluso con bastante mas) que use contenidos dinámicos medianamente pesados.

Hace bien poco, buscando por ahí algún enlace para profundizar un poco más en estos temas, me encontré con este artículo de una empresa de hosting donde te proponen un script para ajustar el valor más adecuado a tus necesidades. Había dos cosas que no me gustaban en él script propuesto. Por un lado, tomaban el valor más conservador, es decir, el resultante de dividir la memoria libre entre lo que ocupa el proceso de Apache mayor. En segundo lugar, hacen el cálculo de la memoria libre sin tener en cuenta la que está ocupada por cache o buffers y que podría liberarse en caso de necesidad. Yo le he hecho algunos cambios para salvar ambos puntos y dejarlo un poco más bonito e informativo y me ha salido esto:

#!/bin/bash
clear

# Primero analizamos los procesos de apache funcionando actualmente
LISTA=`ps -aylC apache2 |grep apache2 |awk '{print $8'} |sort -n`

echo "Lista ordenada de la memoria, en bytes, ocupada por los procesos de Apache corriendo en este momento:"
COUNT=0
SUMA=0
for ITEM in $LISTA
do
        COUNT=`expr $COUNT + 1`
        SUMA=`expr $SUMA + $ITEM`
        echo "$COUNT -> $ITEM"
        if [ $COUNT -eq 1 ]
        then
                MENOR=$ITEM
        fi
done

MAYOR=$ITEM
MEDIA=`expr $SUMA / $COUNT`

# Pasamos las cantidades a Kbytes
MENOR=`expr $MENOR / 1024`
MAYOR=`expr $MAYOR / 1024`
MEDIA=`expr $MEDIA / 1024`

echo "El proceso de Apache más grande ocupa" $MAYOR "Kbytes y el menor" $MENOR "Kbytes"
echo "La media de la memoria ocupada por un proceso es de $MEDIA Kbytes"

echo "Detenemos Apache..."
apache2ctl graceful-stop > /dev/null

# Limpiamos los caches y buffers del servidor
sync
echo 3 > /proc/sys/vm/drop_caches

# Calculamos la memoria libre del sistema
FREEMEM=`free -m |head -n 2 |tail -n 1 |awk '{free=($4); print free}'`
echo "La memoria libre del servidor, después de liberar cache y buffers, es de $FREEMEM Kbytes"

echo "Arrancamos Apache de nuevo..."
apache2ctl start > /dev/null

echo "MaxClients debería de estar entre" `expr $FREEMEM / $MAYOR` "y" `expr $FREEMEM / $MENOR`
echo "Usando el valor medio de la memoria ocupada, un valor recomendable de MaxClients sería de" `expr $FREEMEM / $MEDIA`

El script de aquí arriba imprime una lista de la memoria ocupada por todos procesos de Apache activos en el momento de ejecutarlo. Luego toma el mayor, el menor y la media de todos ellos y calcula la memoria libre del sistema. Para ello, antes detiene Apache (con un graceful-stop para no fastidiar a nadie que esté viendo nuestra web en ese momento) y libera los buffers y caches de memoria. Por último, arranca de nuevo Apache y nos da como salida dos valores: una horquilla entre el valor que debería de tomar MaxClient usando el menor y el mayor valor de los procesos tomados en la instantánea anterior y un valor recomendado que sale de usar el valor medio de todos ellos.

Evidentemente no se trata de algo matemático. Como es lógico, ejecutado en diferentes momentos obtendremos valores distintos ya que ni la RAM que usa nuestro servidor es inmutable ni el tamaño de los procesos de Apache es siempre el mismo ni siguen la misma distribución. Pero para darnos una primera idea del valor con el que tenemos que empezar a jugar creo que es bastante válido. Ya me contáis.

NOTA: En algunas instantáneas el valor de memoria ocupado por el proceso más pequeño de Apache puede ser cero, seguramente porque o está creándose o está destruyéndose en ese momento. En ese caso el valor de la horquilla pierde uno de sus extremos. Sería muy fácil modificar el script para que en ese caso tome el segundo valor y divida por un elemento menos, pero ocurre en tan pocas ocasiones que no creo que merezca la pena hacerlo. Al menos no hoy 😉

Chuletillas (y XXXVII) – Aumentar el tamaño de los discos VDI en VirtualBox

chuleta¿Te has quedado corto en el disco duro de esa máquina virtual que usas para evaluar las aplicaciones de Windows Server y ahora no te llega para instalar la última barbaridad de Giga y pico que ha lanzado Microsoft? Si usas VirtualBox puedes aumentar el tamaño de tus discos duros en formato VDI en segundos con un sencillo comando. Por ejemplo, si queremos que el disco duro que se guarda en el archivo w2008r2.vdi pase a tener 25 GBytes, escribimos lo siguiente:

VBoxManage modifyhd w2008r2.vdi --resize 25600

Este comando sólo sirve para aumentar el tamaño de los discos y no para reducirlos (aunque el mensaje de error que nos da hace suponer que se implementará en una versión futura). Además, la máquina debe de estar apagada y debes que tener en cuenta que estamos modificando el tamaño del disco pero no el de la partición que usa tu máquina virtual. El espacio adicional aparecerá como espacio libre a continuación de la partición o particiones que estés usando. Si vas a crear nuevas particiones para usar ese espacio no tendrás ninguna complicación. Pero si lo que quieres es aumentar el tamaño de alguna de las ya existentes y el sistema operativo que contiene la máquina no puede extenderlas en caliente (como hace el windows 2008 que tomamos como ejemplo), tendrás luego que arrancar la máquina con algún sistema externo y realizar estas operaciones (cualquier Live de Linux te proporcionará una herramienta válida para esto como, por ejemplo, gparted)

Dudas razonables

opinionLo que está ocurriendo estos días tiene trazas de constituir, posiblemente, el segundo mayor escándalo en la historia de nuestra democracia. El primero no se lo quita nadie a los GAL del PSOE. A fin de cuentas en este asunto sólo se está moviendo dinero e influencias. En el GAL hubo muertos y eso está en otro rango. A mi, particularmente, me huele muy mal todo lo que está pasando y soy el primero que exijo responsabilidad y respuestas rápidas a este gobierno. No obstante, creo que no deberíamos de perder de vista una serie de puntos:

  • La presunción de inocencia es algo fundamental en un sistema justo. Nadie debe de ser condenado sin que se demuestre que es culpable. Es preferible que diez culpables anden sueltos (sea lo que sea lo que hayan hecho) antes que un sólo inocente pague por las culpas de algo que no ha cometido. Si no estás de acuerdo con esto mejor no sigas leyendo que es imposible que nos entendamos.
  • Ya no me fío de la prensa. Hace 10 años habría jurado que si El País se mete en una historia como esta lo hace con verdadera y auténtica responsibilidad y habría puesto mi mano derecha por su veracidad. Hoy no. De El Mundo nunca me he fíado. Le gusta demasiado la carroña sea del color que sea.
  • Luis Bárcenas está en el punto de mira. Presuntamente se trata de un delincuente relacionado con una trama mafiosa que ha actuado con absoluta impunidad durante muchos años obteniendo grandes beneficios gracias a su cargo en uno de los dos grandes partidos políticos de nuestro país. Esto aún no está demostrado, pero si lo está que tenía una enorme cantidad de dinero (cuya procedencia es de dificil explicación) en un paraiso fiscal y que la retiró inmediatamente que se conoció que estaba siendo investigado. Mal comienzo…
  • Luis Bárcenas ha sido tesorero del PP durante muchos, muchos años. Debe de saberlo todo acerca de las cañerías (y la mierda que circula por ellas) de la empresa donde ha trabajado con un cargo tan importante durante tantos años. Si realmente no hay porquerías, también debe de saber como falsearlas e inventarlas. Es relativamente lógico que, al sentirse acorralado, trate de chantajear al gobierno. Esto es lo que con toda probabilidad está ocurriendo. Lo que no podemos determinar, hoy por hoy y con los datos de que disponemos, es si trata de hacer este chantaje con datos reales o con datos inventados.
  • Existe una evidente responsabilidad política que nadie ha asumido aún. Todo lo contrario: nadie del PP pararece ahora conocer a Bárcenas ni hablar mal de él y esto es muy sospechoso. Si un empleado mío comete un fraude durante tantos años y yo, su responsable, no me he dado cuenta de ello ha habido dejación de funciones. Si lo sabía y he mirado para otro lado mucho más. Si he sido partícipe apaga y vámonos.
  • La política de comunicación del gobierno está siendo nefasta. En todo, pero en este asunto más.
  • Nuestra justicia es exasperantemente lenta. A veces esto es garantía de que las cosas funcionan correctamente. Otras es síntoma de falta de medios y excesiva burocracia. No tengo forma de evaluar si es culpa de una u otra cosa ni en que medida de cada una de ellas. Es relativamente normal que sospechemos, incluso, que hay gente que prefiere que no se aclare y haya estado trabajando contra reloj para buscar otra salida. Afortunadamente ya no parece posible.
  • Luis Bárcenas debería de estar sentado en un banquillo hace semanas donde, tal vez, estaría diciendo estas mismas cosas bajo secreto de sumario y serían investigadas y publicadas cuando su veracidad o falsedad hubiera sido debidamente contrastada.
  • Es absolutamente normal que con la que está cayendo en nuestro país la gente (yo el primero) esté indignada y crispada con este asunto y haya movilizaciones, demandas de responsabilidad y chistes de todo tipo. Está en la mano del gobierno y del Partido Popular atajarlas con información creíble y sensata. Repasemos las medidas que, hasta el momento, ha tomado el gobierno para convencernos de que todo es falso:
    • Negarlo. Ni comentarios merece, ¿verdad?
    • Una auditoría interna realizada por la persona que ha sustituido a Luis Bárcenas en el cargo¿Y si le hubieran encargado a él mismo una hace 10 años?¿Y si la persona que lo sustituye es tan (presuntamente) canalla como él?
    • Declaraciones juradas de los presuntos implicados. Vale, ¿Las usamos a partir de ahora de forma general? Por ejemplo, si un presunto delincuente llega detenido a la comisaría y firma una declaración jurada de que él no ha hecho nada ilegal lo dejamos suelto y nos olvidamos
    • Publicar sus declaraciones de la Renta ¿Acaso los ladrones declaran lo robado para pagar impuestos?¿Tan estúpidos piensan que pensamos que son?

Es lo que hay, señores, y me cuesta mucho trabajo pensar que vayamos a ver nada más. Probar que ha habido una contabilidad B y que se han repartido esas cantidades en negro es muy difícil si no hay nadie que se arrugue y confiese. Y no parece muy probable (¡Vamos, Cascos, alégranos que te han tratado fatal 🙂 !). Eso si: las sospechas y dudas razonables deberían de pasarles factura en las próximas elecciones. O, al menos, eso espero, que faltan aún tres años y nuestra memoria es tremendamente selectiva…