Probando uElastix (1era Parte)

Por: Paul Estrella

uElastix

Un procedimiento de instalación de la ISO generada para plataformas basadas en ARM.

El año anterior, después de varios meses promocionándose, salió Raspberry Pi al mercado. El punto interesante de este lanzamiento a más de ser una plataforma basada en ARM fue su precio inicial, USD$35 en USA. Teóricamente una persona podría tener su ordenador iniciando con ese valor, habría que añadir una tarjeta SD que actúe como disco duro, una fuente de poder, un teclado y un monitor y listo.

En mi caso y como parte del equipo de desarrollo de producto de Elastix mi interés era probar la distro en un board de este tipo.

Elastix lanzó el año anterior, en el marco de VoIP2Day + ElastixWorld, una ISO generada para Raspberry Pi denominada uElastix o micro Elastix, que posteriormente se probó en el Board pico-SAM y en un Board de desarrollo MCUzone.

Después de varios meses y de juntar los fondos para este proyecto personal, compré un Board Raspberry Pi Modelo B 512MB 2.0 y un case por USD$49. El transporte hacia Ecuador fue de USD$12.

Raspberry Pi + Case

Raspberry Pi y Case acrílico

Una vez que tuve el board en mis manos empezaron las interrogantes, qué SD usar, qué fuente de poder, cómo configuro adecuadamente el SD. La tarjeta SD debe ser clase 10 y es lo que me tomó más tiempo encontrar (hoy por hoy, seguro en el futuro será más común encontrarlo), la fuente de poder puede ser un cargador de Samsung Galaxy o de Blackberry curve fácil de reciclar, sino es fácil de encontrar a un valor promedio de USD$20. La tarjeta SD que conseguí fue de 8 GB por un valor de USD$14.

Raspberry Pi + SD

Raspberry Pi y un SD de 8 GB de clase 10

Eduardo Abad, jefe de QA de Elastix comento con respecto al SD: «es una recomendación común el uso de clase 10 ya que es la que provee mayores velocidades de lectura y escritura en tarjetas SD al momento. Estos accesos (lectura y escritura del SD) son uno de los cuellos de botella para el desempeño, más inclusive que el CPU o los accesos a la RAM.»

Ahora venía la parte divertida, entender como meter uElastix en el SD y probarlo en el board. Después de varios intentos, algunos infructuosos desarrollamos un procedimiento que pudiera ser reproducido con facilidad. Cabe decir que al momento de la prueba, la versión disponible de uElastix no era soportada por el Modelo B lo cual obligó al equipo de desarrollo de Elastix a trabajar en una nueva versión.

Una vez con la nueva imagen hicimos una primera prueba y todo funcionó exitosamente.

Durante las pruebas siguientes con la nueva imagen, nos quedaban algunas dudas sobre la funcionalidad y performance que debía alcanzar el board y coincidimos en una reunión de desarrollo en eliminar Openfire y Vtiger y hacer una nueva imagen.

¿Las razones?

…Bueno, dado que es una implementación sobre una plataforma con ciertas limitaciones lo más apropiado es la optimización de recursos y espacio. Si alguien quiere usar openfire o vtiger con uElastix tranquilamente pueden instalarlo en otro servidor y habilitar los plugins disponibles para que ambas soluciones utilicen la telefonía que provee el RaspberryPi-uElastix. Este es claramente un escenario empresarial y en ese caso la disponibilidad para asignación de recursos se supone mayor, sino estamos haciendo un ahorro absurdo.

Una vez presentado el objetivo se generó una nueva imagen la cual se lanzó en conjunto con este artículo y está disponible a través de www.uelastix.com. La versión de esta imagen es elastix-arm-2013-07-04.

Acerca del procedimiento de instalación.

La instalación inicia con la creación de dos particiones en la tarjeta SD. La primera debe ser de tipo FAT con un tamaño mínimo de 16MB y la segunda debe ser tipo ext3 con un tamaño mínimo de 3GB. Se puede utilizar cualquier herramienta de particionamiento, sin embargo la más sencilla, en mi opinión, es «fdisk» que puede ser ejecutada en la mayor parte de distribuciones Linux.

Antes de iniciar el proceso, debemos descargar la imagen disponible en www.uelastix.com y descomprimirla. Al hacerlo tendremos una carpeta que contiene los siguientes archivos:

  • BOOT.tar.gz
  • rootfs.tar.gz

Si la descarga se realiza en un equipo diferente al que utilizaremos para la partición de la tarjeta SD, debemos enviar ambos archivos al equipo/PC/servidor a utilizar, a un directorio que podamos acceder con facilidad.

En mi caso para este proceso yo utilicé un servidor Elastix de pruebas que tengo con la versión 2.4, esa versión de Elastix usa Centos 5.9 por si necesitan el dato exacto. Usuarios de fedora no deberían tener ningún problema al usar el mismo procedimiento. Como nota adicional y por facilidad utilicé el directorio root.

Particionamiento

Ingresamos a la consola del equipo donde realizaremos la partición, o equipo Linux disponible, como usuario root. (En itálica los resultados de consola)

Ejecutamos el comando fdisk -l para ver los discos disponibles

[root@training ~]# fdisk -l

Disk /dev/hdd: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot          Start         End         Blocks          Id  System
/dev/hdd1   *           1            13          104391        83  Linux
/dev/hdd2              14           19457     156183930   8e  Linux LVM

Disk /dev/sdg: 7948 MB, 7948206080 bytes
81 heads, 10 sectors/track, 19165 cylinders
Units = cylinders of 810 * 512 = 414720 bytes

Device Boot      Start         End      Blocks       Id  System
/dev/sdg1           11          19166   7757824    b   W95 FAT32

En este ejemplo el disco que queremos particionar (nuestro SD) está en la ruta /dev/sdg.

Ejecutamos fdisk /dev/sdg

[root@training ~]# fdisk /dev/sdg

Command (m for help):

Colocamos «p» para enlistar las particiones.

Command (m for help): p

Disk /dev/sdg: 7948 MB, 7948206080 bytes
81 heads, 10 sectors/track, 19165 cylinders
Units = cylinders of 810 * 512 = 414720 bytes

Device Boot      Start         End       Blocks      Id  System
/dev/sdg1           11       19166     7757824    b  W95 FAT32

Command (m for help):

Colocamos «d» para borrar la partición. En este caso tenemos una sola partición, si tuviéramos más debemos indicar la partición a borrar.

Command (m for help): d
Selected partition 1

Colocamos «n» para crear una nueva partición

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)

Seleccionamos «p» y luego 1

p
Partition number (1-4): 1
First cylinder (1-966, default 1):

Presionamos Enter. Luego colocamos +16M y enter.

Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1021, default 1021): +16M

Command (m for help):

Nuevamente colocamos «n» para crear la segunda partición.

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)

Seleccionamos «p» y luego 2.

p
Partition number (1-4): 2
First cylinder (4-1021, default 4):

Presionamos enter, y luego enter nuevamente para que la partición tome el espacio restante.

Using default value 4
Last cylinder or +size or +sizeM or +sizeK (4-1021, default 1021):
Using default value 1021

Command (m for help):

Ahora definimos el tipo de la partición 1 con el comando «t» y luego «e», que corresponde al tipo FAT (la opción l nos da un listado completo de los tipos disponibles)

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): e
Changed system type of partition 1 to e (W95 FAT16 (LBA))

Grabamos los cambios con «w»

Ejecutamos fdisk -l para ver nuevamente los discos disponibles, deberíamos tener algo similar a lo siguiente:

[root@training ~]# fdisk -l

Disk /dev/sdg: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders
Units = cylinders of 15190 * 512 = 7777280 bytes

Device Boot      Start       End       Blocks       Id     System
/dev/sdg1           1           3         22754       e      W95 FAT16 (LBA)
/dev/sdg2          4          1021     7731710   83     Linux

Instalación de uElastix

1.- A continuación, y una vez que hemos particionado la tarjeta SD, creamos los respectivos archivos de sistema en las particiones.

Ejecutamos: mkfs.vfat -n BOOT /dev/sdg1

Luego ejecutamos: mkfs.ext3 -L rootfs /dev/sdg2

Creamos los directorios media/BOOT y media/rootfs, ejecutando:

mkdir /media/BOOT

luego, mkdir /media/rootfs

2.- Una vez que hemos completado el proceso anterior, montamos la primera partición.

Ejecutamos: mount /dev/sdg1 /media/BOOT

Descomprimimos el archivo BOOT.tar.gz en la 1era partición:

tar -C /media/BOOT/ -xzf BOOT.tar.gz

Desmontamos la partición: umount /dev/sdg1

3.- Montamos la segunda partición

Ejecutamos: mount /dev/sdg2 /media/rootfs

Descomprimimos el archivo rootfs.tar.gz en la 2da partición:

tar -C /media/rootfs/ -xzf rootfs.tar.gz

Este proceso puede tardar varios minutos.

Desmontamos la partición: umount /dev/sde1

4.- Ahora el disco está listo para iniciar, lo colocamos en el Raspberry Pi, conectamos el board a nuestra red y la fuente de poder.

Raspberry Pi Boot

Inicio del Boot

Raspberry Pi Boot 2

En pleno Boot, si todo fue correcto veremos la respuesta de varios procesos

Nota: La instalación tiene la siguiente IP 192.168.1.251/24.

Si hicimos las cosas bien, en un par de minutos podemos ingresar al GUI de uElastix, a la IP 192.168.1.251, y empezar a trabajar. El usuario administrador es «admin» y la contraseña es «palosanto». El password del usuario root es «palosanto».

uElastix GUI

GUi de uElastix

Es importante configurar los datos de red, el default gateway y la primary DNS, y guardar los cambios para que el uelastix (ya no es un Raspberry Pi, ha subido sus estándares) tenga acceso a internet. Esto se puede editar en System -> Network -> Network Parameters.

Configuración de Red

Configuración de red

Si alguno de ustedes hizo estas modificaciones y aun no tiene internet en el board, pueden ir a consola y ejecutar «service httpd restart» y resuelto el problema. Si aun así no tienen internet en el equipo pueden reiniciarlo y listo. Este problema está reportado para ser revisado y resuelto, si alguno de ustedes reproduce el problema envíennos un correo para subir la prioridad en desarrollo.

De ahí en adelante uElastix funciona como un Elastix normal salvo por la ausencia de Openfire, lo cual no permitirá ejecutar el servicio en el servidor, esto no implica que no podamos tener mensajería instantánea, simplemente prescindimos de este servicio que requiere algunos recursos valiosos de nuestra plataforma.

Este artículo es una primera entrega destinada a probar uElastix en un board basado en ARM, en entregas posteriores revisaremos una configuración típica y la instalación de addons.

Si han seguido mi cuenta de twitter estas últimas semanas, sabrán que lanzamos un board basado en ARM llamado Asiri. Les adelanto que el mismo procedimiento de instalación de uElastix sirve para ese board y quienes reciban uno en ElastixWorld este año, pueden probar uElastix ahí.

Por ahora los dejo si tienen comentarios envíenlos, este procedimiento está sujeto a mejoras o correcciones.

PD: El total invertido en este proyecto fue USD$97, de esto hablaremos en otra entrega y haremos una comparación con el equipo microUCS de Elastix.

Nota: Este procedimiento está actualizado a la versión de uelastix elastix-arm-2013-10-25.tar

Comparte este artículo con tus amigos