Archivo por meses: diciembre 2014

Arrancando la Raspberry Pi desde un disco duro externo

Estas navidades me he autorregalado una Raspberry Pi, porque no se puede ser un friki de verdad sin una. Mi primera intención es utilizarla para reemplazar al cacharro con Android del que hablé en entradas anteriores. Las ventajas son dobles: para empezar, consigo un sistema 100% integrado, y no el híbrido frankensteniano que tenía antes; y, por otro, me queda el cacharro Android para experimentar más y perfeccionar la técnica de arranque dual.

Para no complicarme la vida escogí la distribución raspbmc. Esta distro tiene algo de truco a la hora de instalarla. Además, como es normal en la Raspberry, es necesario arrancar siempre desde la tarjeta SD, cosa que a mi no me convence porque no quiero que acabe quemada por excesivas escrituras (a fin de cuentas me gusta cacharrear). Para evitarlo, decidí mover el sistema operativo a un disco duro USB de un terabyte, y así tener también sitio donde almacenar más cosas. El procedimiento a seguir es el siguiente: primero descargamos la imagen y la volcamos a la tarjeta con el comando:

sudo dd if=raspbmc-2014-11-24.img of=/dev/sde bs=2048

Asumiendo, claro está, que nuestra tarjeta SD está en /dev/sde.

Una vez creada la tarjeta, la insertamos en nuestra Raspberry y la encendemos SIN CONECTAR A LA RED LOCAL. Lo primero que hará será redimensionar la partición para que ocupe toda la tarjeta, y luego lanzará el XBMC. Y aquí está el primer problema: si en ese momento está conectada a Internet, se bajará una actualización de éste y, por algún motivo que desconozco, fallará y la imagen quedará inutilizable, teniendo que volcar de nuevo el fichero en la tarjeta. Es necesario dejar que arranque primero y se configure, y sólo entonces conectarlo a Internet y dejar que se actualice.

Otro problema que descubrí es que, por defecto, se configura en 1080p, y mi tele no soporta ese modo. Para resolverlo tuve que conectar la placa al monitor del ordenador y allí configurar la salida a 720p.

Una vez que tenemos la tarjeta lista, vamos a volcar todo al disco duro. Si montamos la tarjeta en nuestro PC veremos que tiene dos particiones: una de 73 MB en formato FAT32, y otra en formato EXT4. La primera partición contiene el kernel y demás ficheros de arranque básico, por lo que esa, de momento, no la tocaremos, pues es necesaria para iniciar el arranque; la segunda es la que contiene el sistema Linux, y será la que vamos a mover al disco USB.

Comenzamos por crear tres particiones en nuestro disco duro: una de 20GB en formato EXT4 para el sistema, otra de 4GB de swap, y una tercera con el resto para datos. A continuación, copiamos todos los ficheros de la partición EXT4 de la tarjeta a la partición de sistema del disco duro, utilizando la opción -a de cp para que, al copiar los ficheros, conserven su tipo, propietario, permisos y demás características (de no hacerlo así, los ficheros de dispositivos se copiarían como un fichero normal con el contenido del dispositivo, en lugar de como ficheros especiales; de igual forma los enlaces simbólicos no se copiarían como tales, y más problemas y diferencias). Además, es fundamental hacerlo como root, pues si no, no podría cambiar el tipo de usuario:

sudo cp -a /media/disco_origen /media/disco_destino

Otra opción es comprimirlo en un fichero tar.gz para poder restaurar cómodamente la partición en cualquier momento, pero eso ya es a gusto del consumidor.

Una vez hecho esto vamos a modificar el arranque en la tarjeta SD para que vaya al sistema situado en el disco duro. Para ello abrimos el fichero cmdline.txt, que contiene la línea de arranque para el núcleo. En ella buscamos el parámetro root=/dev/mmcblk0p2 y lo reemplazamos por root=/dev/sda1 (o la partición del disco en el que vamos a copiar el sistema), y añadimos el parámetro rootdelay=5 para asegurarnos de que reconoce el disco antes de intentar arrancar de él.

Por último, podemos editar el fichero /etc/fstab y añadir las siguientes líneas para que monte automáticamente la partición de swap y de datos donde queramos:

/dev/sda2   none   swap   sw        0   0
/dev/sda3   /datos ext4   defaults  0   1

Y con esto tendremos listo nuestro sistema Raspbmc en disco USB. En una próxima entrada comentaré como monté una sesión chroot, porque la raspbmc está basada en Debian Wheezy y cualquier intento de actualizarla a Jessie acaba con el sistema dañado (incluso probé a utilizar pinning, pero es muy fácil que para instalar algún paquete interesante haya que actualizar la libc6, lo que hace que casque todo).

Experimentando con Autovala

Hace un par de meses lancé una nueva versión de Autovala, la 0.99.9, y otra hace menos, la 0.99.10.

La primera, como novedad, permite escoger si se desea utilizar una versión fija del compilador de vala, o si se prefiere que sea Autovala quien escoja la que se debe utilizar. Antes, la versión del compilador se actualizaba siempre en el fichero .avprj a la versión por defecto instalada en el sistema; ahora esto sólo ocurre si el comando vala_version en dicho fichero tiene un asterisco al principio. Si no, se mantendrá dicho valor siempre, y será el valor mínimo necesario para compilar el proyecto.

Respecto a la versión 0.99.10, incluye una petición de un usuario: soporte de pruebas unitarias, lo que permite simplificar la depuración de los proyectos.

Como de costumbre, el propio proyecto incluye abundante documentación en la carpeta doc, en formato HTML.

A mayores estoy preparando para la versión 0.99.11 la generación automática de ficheros de metadatos para paquetes. En este momento genera casi todo lo necesario para crear paquetes .deb y .rpm, pero en el futuro espero poder añadir soporte para más arquitecturas de paquetes, como emerge. Esta versión en desarrollo está disponible en una rama aparte, y me gustaría que la gente la probase antes de mezclarla con main.