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 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 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.
Inicio del Boot
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».
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
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