Instalando uElastix en Asiri

Uno de los regalitos que me traje del ElastixWord fue una placa Asiri, la placa utilizada en el appliance Elastix microUCS. El hardware no es extremadamente potente, tiene un procesador a 450 MHz con juego de instrucciones ARMv5 y 256 MB de RAM, pero aguanta el tirón, así que vamos a meterle mano 🙂

La única opción disponible a día de hoy es instalar uElastix, que está basado en Fedora 17, así que vamos a ello. Las instrucciones incluidas son bastante precisas, pero tuve un problemilla que no esperaba, así que espero que este post ayude a aquellos que hayan podido tener el mismo problema.

Antes de comenzar, necesitaremos una tarjeta SD de 4GB. No me seáis cutres y uséis una de los chinos, que sea de clase 10.

Paso 1: Particionar la tarjeta SD

Es necesario crear 2 particiones, una en formato FAT con al menos 16 MB, y otra EXT3 con el resto. Yo por si acaso he creado la FAT de 128 MB, que tampoco pasa nada.

Para este paso podemos usar fdisk, asumiendo que el dispositivo ha sido detectado como /dev/sdd:

fdisk /dev/sdd

Así es como quedaría tras crear las particiones:

Disk /dev/sdd: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device      Boot    Start    End      Blocks    Id    System
/dev/sdd1   *       2048     264191   131072    e     W95 FAT16 (LBA)
/dev/sdd2           264192   7744511  3740160   83    Linux
[root@uelx ~]#

 

Paso 2: Formatear las nuevas particiones

Tenemos que formatear las particiones con su sistema de ficheros correspondiente:

mkfs.vfat -n BOOT /dev/sdd1
mkfs.ext3 -L rootfs /dev/sdd2

 

Paso 3: Copiar los ficheros de sistema

Primero vamos a descargar la versión correspondiente a Asiri de la página de uElastix.

A continuación descomprimimos el fichero, que contiene 2 ficheros comprimidos, y los descomprimimos en las particiones correspondientes:

mkdir elastix-arm
tar -C elastix-arm xvf elastix-arm-2013-10-25.tar
cd elastix-arm
mount /dev/sdd1 /mnt
tar -C /mnt -xzf BOOT.tar.gz
umount /mnt
mount /dev/sdd2 /mnt
tar -C /mnt -xzf rootfs.tar.gz
umount /mnt

En este momento ya podemos introducir la tarjeta SD en Asiri y conectar el cable ethernet y el de corriente. No guardéis muy lejos el lector de tarjetas SD, puede que nos haga falta de nuevo.

 

Paso 4: Acceso por SSH

Por defecto Asiri viene configurada en la IP 192.168.1.251. Si vuestra red no es la 192.168.1.0/24 podéis crear un alias:

ifconfig eth0:0 192.168.1.123/24 up

Aquí es posible que tengáis un problema: no funciona el acceso SSH. De hecho, al hacer un nmap no muestra ni el puerto abierto:

Host is up (0.0037s latency).
Not shown: 989 closed ports
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
443/tcp  open  https
993/tcp  open  imaps
995/tcp  open  pop3s
2000/tcp open  cisco-sccp
3306/tcp open  mysql
4445/tcp open  upnotifyp

Nmap done: 1 IP address (1 host up) scanned in 1.61 seconds

Tras analizar el syslog, el problema parece ser que SSH tarda demasiado en crear las claves en su primera ejecución, y systemd decide matarlo, así que decidí copiar las mías de manera temporal, para que al menos el demonio arranque y podamos entrar. Para ello sacamos la tarjeta SD y la volvemos a colocar en el host donde hemos estado preparándola anteriormente:

mount /dev/sdd2 /mnt
cp /etc/ssh/ssh_host* /mnt/etc/ssh/
umount /mnt

Volvemos a poner la tarjeta SD en Asiri, y ya debería funcionar. A partir de este momento podemos acceder a la interfaz web de configuración para cambiar la configuración de red, instalar módulos adicionales, etc:

uelastix

Si aún así no funciona lo mejor es correr en círculos un rato y posteriormente sentarse en un rincón a llorar 😛

En el siguiente post veremos cómo añadir soporte GPIO a nuestra placa Asiri, ¡estad atentos!

ElastixWorld: OpenSIPS Workshop

Además de nuestras respectivas presentaciones, Adrian y yo tuvimos la ocasión de impartir un workshop sobre OpenSIPS.

OpenSIPS no es precisamente fácil de aprender, ya que ofrece control a muy bajo nivel, por lo que nos esperábamos una asistencia bastante reducida. Cual fue nuestra sorpresa cuando vimos que no paraba de venir gente y que muchos incluso estaban de pie escuchando, ¡gracias a todos los asistentes!

opensips_workshop

Para los que no pudieron estar, aquí está la presentación que utilizamos, en la que comentamos algunas buenas prácticas para la administración de OpenSIPS, seguridad, etc.


De nuevo, gracias a todos los asistentes y a la organización, ¡el año que viene habrá más!

ACTUALIZACIÓN: Gracias a Eternal por grabar el vídeo, aqúi lo tenéis en YouTube:

ElastixWorld: Proyecto Open Pi Phone

Acaba de terminal la edición de 2013 de ElastixWorld y no podría estar más contento (ni más cansado), el evento ha sido increíble y la respuesta a las presentaciones que he tenido la oportunidad de compartir ha sido abrumadora.

Ayer prenseté el proyecto en el que he estado trabajando junto a mi compañero de trabajo Tijmen: Proyecto OP^2: Open Pi Phone.

El proyecto Open Pi Phone ha consistido en el desarrollo de un firmware basado en Debian para dispositivos embebidos con el que poder hacer un terminal SIP hardware. El primer prototipo lo hemos llamado Falcon y está basado en una placa Raspberry Pi, con un diseño un tanto peculiar 😉

El código esta disponible en GitHub.

Aqui tenéis las transparencias:


El prototipo Falcon en acción:

Y por ultimo, el video de presentación:

Espero volver a acudir el año que viene, si no habéis estado en ElastixWorld anteriormente id buscando una excusa para ir en 2014 🙂

De SIP a XMPP… pasando por la IETF

Como muchos sabréis he estado trabajando en un gateway de SIP a XMPP (y vice versa) desde hace un par de años. El gateway forma parte de SylkServer y he tenido la oportunidad de presentarlo en diversas ocasiones, a medida que el proyecto ha ido madurando.

Para poder implementar este gateway, nos basamos en los drafts escritos por Peter Saint-Andre y publicados en 2008, aunque no hubieran sido actualizados. Al no haber sido actualizados, había muchos casos no contemplados o especificados, por lo que tuvimos que ser creativos, y rellenar los huecos.

Una vez tuvimos el gateway funcionando para chat y presencia, acudimos al XMPP Summit y tuvimos la oportunidad de reunirnos con Peter, transmitirle nuestro feedback y las ganas de “resucitar” esos drafts. Ya que algunos de ellos necesitaban bastante trabajo, Peter me ofreció ser coautor de los drafts: el de chat en grupo y el de media. Por supuesto, acepté 🙂

Rápidamente se formó el grupo de trabajo STOX, con el objetivo de llevar esos documentos desde el estado de draft a RFC. He tenido la oportunidad de estar presente durante toda esta semana en la IETF 87 en Berlin, donde nos hemos podido reunir y discutir los problemas pendientes y los pasos necesarios para seguir adelante.

ietf-small

Es la primera vez que vengo a la IETF, y estoy encantado de haber podido venir 🙂 Una semana entera hablando de protocolos, problemas, soluciones, … donde además, si hay código funcional se tiene muy en cuenta, algo que yo desconocía.

ietf-badge

Todavía hay bastante trabajo que hacer, pero espero que en unos meses todos esos documentos sean RFCs.

¡Hola Jingle, soy SIP!

Hace apenas un par de semanas que lanzamos la nueva versión de SylkServer, la versión 2.4.0 que incluye soporte de Jingle.

Habiendo trabajado siempre con SIP ha sido muy refrescante haber podido trabajar en hacer un gateway SIP – XMPP que incluya chat, presencia y RTP. Y yo que siempre había pensado que Jingle era casi como SIP pero en XML… 😉 Como nota curiosa SylkServer utiliza el mismo motor RTP y ICE para SIP y para Jingle, a bajo nivel si que utilizan los mismos protocolos y hemos podido reutilizar grandes partes de código.

Ha sido un largo camino, que hubiera sido mucho más largo de no ser por la colaboración con el equipo de Jitsi, sobre todo en lo que a pruebas de interoperabilidad se refiere. Realmente fue algo mágico poder llamar desde Blink a Jitsi y que hubiera audio bidireccional 🙂

Éste viernes 5 de abril vamos a presentar esta nueva versión en el VoIP Users Conference, una conferencia virtual que tiene lugar todos los viernes por la tarde y que será retransmitida por Google Hangouts, pasáos por http://vuc.me, ¡yo allí estaré!

 

sylk-server-diagram

FOSDEM: Challenges in XMPP and SIP interoperability

La pasada semana estuve en el XMPP Summit y el FOSDEM, como he comentado antes, y tuve la oportunidad de relacionarme con la gente de XMPP y aprender cómo y porqué algunas decisiones fueron tomadas en el protocolo. Fueron unos días muy productivos, ya que al parecer hay suficiente interés como para resucitar los drafts relativos a la interoperabilidad de SIP y XMPP que no han sido actualizados desde el 2008.

Durante el FOSDEM dí una presentación en la Jabber Devroom acerca de la interoperabilidad entre XMPP y SIP, enfocada desde el lado de XMPP y con mucho detalle en los problemas encontrados y las soluciones adoptadas: “Challenges in XMPP and SIP interoperability”. Aquí las transparencias:


Me llevé un muy buen sabor de boca y espero poder colaborar más de cerca para que los actuales drafts lleguen a RFC y los gateways SIP – XMPP tengan un comportamiento uniforme 🙂

4KConference: De SIP a XMPP y vice versa

Con algo de retraso pero aquí van las transparencias de la presentación que dí el pasado diciembre en Colombia con motivo de la 4KConference: “De SIP a XMPP y vice versa”


Aunque ya se lo comenté en persona, me gustaría reiterar aquí lo encantado que estuve con la organización del evento, que dicho sea de paso, tuve el honor de cerrar. ¡Todo salió a la perfección! Es para mi un orgullo formar parte de ésta gran comunidad de usuarios y entusiastas de VoIP, SIP y lo que se nos ponga por delante. Espero poder estar de nuevo en la 4K, donde sea que toque éste año 🙂

 

XMPP Summit y FOSDEM, ¡allá vamos!

Empieza la temporada 2013. El primer evento del año suele ser el FOSDEM, que además de encantarme como evento en sí, está cerca de casa 🙂 Además del FOSDEM, este año voy a asistir al XMPP Summit, que tiene lugar los dos días antes del FOSDEM, y es también en Bruselas.

El XMPP Summit es un encuentro de desarrolladores que de una manera u otra utilizan XMPP, para intercambiar ideas acerca del protocolo, los diversos XEPs y demás. Ya que me he pasado la mayor parte del 2012 trabajando en el gateway XMPP – SIP con SylkServer era una oportunidad que no me podía perder. ¿Lo mejor de todo? No hay intereses comerciales y la asistencia es totalmente gratuita.

 

Y después, ¡al FOSDEM! Éste año vuelve a haber Telephony Devroom así que por allí andadre contando historias 🙂 Me calenté un poco a mandar propuestas en el call for papers, y al final doy 4 charlas entre los dos días. Challenge accepted.

 

Plivo lanza un SDK utilizando WebRTC y SIP… ¡con JsSIP!

Hace un tiempo que comenté en qué consiste Plivo y cómo utilizarlo. Básicamente, es un framework de comunicaciones basado en FreeSWITCH, que además de estar disponible bajo una licencia libre proporciona un servicio in the cloud.

Parece que Plivo ha suscitado bastante interés, hasta el punto de recibir 1.75 millones de dolares de capital riesgo.

La semana pasada Plivo lanzó su nuevo SDK utilizando SIP y WebRTC, y como persona curiosa que soy tuve que echar un vistazo a su código minificado, que gracias a Chrome se puede deofuscar un poco:

Fue toda una sorpresa descubrir que para la señalización el SDK de Plivo¡ utiliza JsSIP! Su SDK añade soporte de flash para los casos en los que WebRTC no esté disponible, pero la señalización es 100% JsSIP.

Desde aquí mi más sincera enhorabuena a José Luis e Iñaki por todo el buen trabajo y a Plivo por el lanzamiento.