domingo, 6 de mayo de 2012

Openelec Media Center en Raspberri Pi

Desde que encargué el Raspberri Pi tenía previsto probarlo para dos funciones; o bien como media center basado en XMBC o bien como ordenador normal para probar alguna distribución de Linux y poder ponerle, en su caso, un emulador con el que jugar en la televisión del salón a emuladores tipo MAME.
Tamaño real, igual que un DNI
Repasando los foros me encontré con el proyecto Openelec que anunció recientemente que daría soporte para la Raspberri (que recordemos tiene un procesador ARM por lo que no nos sirve cualquier distribución de Linux compilada para i386).

OpenElec es una distribución que tiene lo mínimo imprescindible para que funcione un Linux y XMBC, sin otro escritorio gráfico ni nada más.
Es perfecto para ponerlo en casa sin que el resto de usuarios tenga que saber nada sobre Linux y muestra el interfaz propio del media center desde el arranque, pudiendo acceder a todo el contenido sin necesidad de teclado.

1. Preparando el sistema OpenElec 
Ahora bien, esta decisión obligaba a compilar el código fuente de la distribución. Pero como veremos es un proceso absolutamente sencillo y sin problemas que un par de "apt-get" puedan solucionar.

Los pasos a seguir son, basicamente, los que figuran en la página del proyecto OpenElec y no revisten especial dificultad, salvo por el hecho de que en una instalación limpia de Ubuntu pueden faltar varios de los paquetes que son necesarios.

En mi caso, acababa de actualizar a Ubuntu 12.04, faltaban varias cosas así que fue tan sencillo como instalarlas desde la consola con los siguientes comandos.

Pero lo primero es descargarse los fuentes, desde la consola escribimos (o copia y pega):
git clone git://github.com/OpenELEC/OpenELEC.tv.git
Si te falta Git, ya sabes "sudo apt-get install git".

Después vamos al directorio donde se han descargado los archivos, normalmente en nuestro home dentro de una carpeta llamada Openelec.tv
 cd OpenELEC.tv
Y una vez ahí  ya sólo hay que darle a compilar indicando las opciones del procesador. En ocasiones se pueden necesitar opciones especiales que pueden ser marcadas dentro de carpeta del proyecto (/project/RPi) para cargar drivers específicos, etc.
Pero en principio no es necesario tocar nada ya que reconoce el hardware a utilizar sin problemas.

Antes de lanzar make y que empiece a compilarse todo es recomendable asegurarse de tener todos los paquetes necesarios y evitar errores por fallos de dependencias y perder tiempo reiniciando el proceso, haciendo:
sudo apt-get install g++ nasm flex bison gawk autopoint gperf autoconf automake m4 cvs libtool byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev
Estos paquetes son los que se indican en el Wiki del proyecto, pero a mi me salió además un error al principio del proceso :
error: XML::Parser perl module is required
se soluciona con el paquete (y las correspondientes dependencias que se instalan solas):
sudo apt-get install libxml-parser-perl
Así que una vez que tenemos todo esto preparado ya podemos lanzar make y comenzar a compilar OpenElec para nuestra Raspberri Pi, para ello tecleamos:
PROJECT=RPi ARCH=arm make
El tiempo que tarda es de entre 1 y 2 horas, aunque depende del equipo y de la carga que tenga.

2. Preparando el sistema de archivos y la tarjeta SD

Una vez terminado se pasa a una tarjeta SD debidamente preparada. Las instrucciones están en este enlace y son muy sencillas.

Basicamente es particionar la tarjeta SD con dos particiones, una de 128 Mb, "bootable" y en FAT32, a la que denominaremos System; y la segunda con el resto del espacio restante, formateada como ext4 y a la que llamaremos Storage.

Esto puede hacerse o bien usando una Gparted (más sencillo y recomendable) o en línea de comandos con las instrucciones siguientes, pero hay que tener mucho cuidado con la letra del dispositivo (la X tras /dev/sd"X") si nos equivocamos en la letra, normalmente será una b o una c, estaremos formateando otra unidad y perdiendo sus datos:

sudo parted -s /dev/sdx mklabel msdos
Con eso borran las particiones que pudiera haber y se crea un nuevo esquema de particiones. A continuación se crea la primera partición de 128 MB y se hace "bootable" para que el sistema arranque:
sudo parted -s /dev/sdx unit cyl mkpart primary fat32 -- 0 16
sudo parted -s /dev/sdx set 1 boot on
Y se hace la siguiente partición con el espacio restante:
sudo parted -s /dev/sdx unit cyl mkpart primary ext2 -- 16 -2
Se formatean y se les asigna el nombre
sudo mkfs.vfat -n System /dev/sdx1
sudo mkfs.ext4 -L Storage /dev/sdx2
Y para asegurar que se montan las unidades:
sudo partprobe
Ahora ya solo queda copiar y pegar los archivos de arranque y los resultantes de la compilación a la tarjeta SD. 
3. Copiando el sistema y primer arranque
Los archivos de arranque se encontrarán en un directorio dentro de la carpeta donde se descargaron los fuentes, en mi caso:
/home/david/OpenELEC.tv/build.OpenELEC-RPi.arm-devel/
Dentro de ese directorio hay otro llamado bcm2835-driver-c8359c0/boot/ del que hay que copiar los archivos "arm128_start.elf", "loader.bin" y "bootcode.bin" a la partición System de la tarjeta SD.
Y renombramos "arm128_start.elf" como "start.elf"
Ya sólo queda copiar los archivos ejecutables, que estarán en la carpeta /home/david/OpenELEC.tv/target/

En esa carperta habrá dos archivos con el nombre OpenELEC-RPi.arm-devel-2012xxxxxxxx-rxxxxx y las extensiones .system y .kernel (las x indicarán la fecha y hora de compilación y la versión o release).


Esos archivos se copian a la tarjeta SD, en la partición System y se renombran como SYSTEM y kernel.img respectivamente.

Dentro de la SD creamos un fichero "cmdline.txt" con la siguiente instrucción en linea de comandos o con un editor de texto, en cuyo caso sólo hay que pegar lo que está entre comillas a continuación:
sudo echo "dwc_otg.lpm_enable=0 root=/dev/ram0 rdinit=/init boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ssh quiet" > /media/System/cmdline.txt
Y con eso ya se puede insertar la tarjeta SD en la Raspberri y a funcionar nuestro media center.

El primer arranque puede llevar un minuto aproximadamente, pero los sucesivos llevan cuestión de segundos (unos 20 o así) aunque dependerá también de las opciones que se activen en el XMBC.

4. Bonus track
XBMC permite conectar dispositivos en red y compartir archivos y carpetas vía samba, pero si quieres conectarle un disco duro portátil tendrás que darle alimentación externa ya que el Raspberri Pi no alcanza por sí solo para alimentar el disco duro y no lo reconocerá.
Lo que hice fue comprar un hub usb con alimentación (por 9 euros hay en tiendas de informática) y ahora va perfectamente.

Hay que tener en cuenta que XMBC puede usarse como gestor de descargas ya que tiene add-ons para bittorrent (Transmisión y Utorrent) e incluso Jdownloader, pudiendo estar muchas horas encendido con un mínimo consumo eléctrico y cero ruidos ya que no necesita refrigeración de ningún tipo.

Además se puede controlar desde el teléfono con Android, etc.
Espero que esto sea de utilidad para sacar partido a un dispositivo de menos de 30 euros, silencioso y pequeño que puede estar tranquilamente en el salón.