Linux

El sistema del pingüino.

DD-WRT e IPv6

Recientemente he adquirido un router WRT610N para sustituir a mi antiguo WRT54GL. Las razones principales del cambio han sido que el segundo (pese ser uno de los routers mas versátiles del mercado) se queda un poco corto en cuanto a velocidad de red y memoria, siendo el primero una bestia parda con su doble circuiteria WiFi, lo que permite tener dos redes inalámbricas reales que pueden funcionar a diferentes velocidades (lo cual es muy útil, ya que los equipos hoy por hoy suelen funcionar en estándar N, pero los móviles siguen estancados en G), su red alámbrica gigabit y el puerto USB, que permite conectar un dispositivo de almacenamiento para ampliar las posibilidades del producto.

Otra de las razones por las cuales decidí actualizar mi hardware de red fue que quería probar a trabajar de una vez por todas con IPv6.

Hoy por hoy mi proveedor de acceso no ofrece ninguna posibilidad de utilizar IPv6 (como la gran mayoría), pero eso no quita de que nosotros no podamos usar los servicios de túnel que pueden facilitarnos empresas de terceros, como por ejemplo Hurricane Electric.

En mi caso concreto lo primero que hice fue solicitar un túnel con ellos, hay que tener en cuenta que cuando solicitamos dicho túnel ellos comprueban nuestra IP pública a través de un Ping para ver si es alcanzable, por lo que debemos tener habilitada la respuesta ICMP.

Una vez que nos dan el túnel (podemos solicitar hasta 5, pero con uno es suficiente, en el /64 que nos dan tenemos 18.446.744.073.709.551.616 direcciones posibles) nos facilitarán la información necesaria para configurarlo. Lo que realmente nos interesa es la dirección IPv4 del servidor, la dirección IPv6 del cliente y el prefijo enrutado IPv6.

A partir de aquí toca configurar el Router. Yo ya lo tenía preparado con el firmware de dd-wrt. Para no agotarle la memoria interna le conecte un llavero USB de 1GB que tenía por casa y lo utilice como /jffs, de tal forma que todos los scripts y configuraciones extensas los meto en esta ubicación.

Para levantar la red IPv6 utilizo este script al que he llamado hetunnelbroker.sh:

#! /bin/sh -x

# Load Module
insmod ipv6
insmod sit
sleep 5

# Get WAN IP
WANIP="$(ip -4 addr show dev vlan2 | awk '/inet / {print $2}' | cut -d/ -f1)"

# Configure HE Tunnelbroker
SERVER_IPV4_ADDR="209.51.181.2"
CLIENT_IPV6_ADDR="2001:470:bebe:cafe::2/64"
ROUTED_IPV6_ADDR="2001:470:bebe:cafe::/64"

# Write small log
echo "External IP: $WANIP" > /jffs/ipv6/startup.log

# Configure Tunnel if WAN is UP
if [ -n "$WANIP" ]
then

        echo "Configuring tunnel" >> /jffs/ipv6/startup.log

        # Set Public IP in HE Servers (if the user gives the passwd via stdin)
        [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ] && \
         echo "Updating tunnel" >> /jffs/ipv6/startup.log && \
         iptables -I INPUT 1 -p ICMP --icmp-type echo-request -s 66.220.2.74 -j ACCEPT && \
         MD5PASS=`echo -n $2 | md5sum | sed -e 's/  -//g'` && \
         wget 'http://ipv4.tunnelbroker.net/ipv4_end.php?ip='$WANIP'&pass='$MD5PASS'&apikey='$1'&tid='$3 -O - >> \
           /jffs/ipv6/startup.log && \
         iptables -D INPUT 1

        # Add HE tunnel
        ip tunnel add he-ipv6 mode sit remote $SERVER_IPV4_ADDR local $WANIP ttl 255
        ip link set he-ipv6 up
        ip addr add $CLIENT_IPV6_ADDR dev he-ipv6
        ip route add ::/0 dev he-ipv6 metric 1
        ip -6 addr add $ROUTED_IPV6_ADDR dev br0

        # Provide IPv6 Forwarding
        echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

        # Start radvd to provide IPv6 pull to network
        echo -e "\nStarting radvd" >> /jffs/ipv6/startup.log
        radvd -C /jffs/ipv6/radvd.conf
fi

Comentando el funcionamiento del script, lo primero que hace es cargar los módulos necesarios para dar soporte a IPv6. Después almacena en la variable WAN_IP nuestra dirección IPv4 recogiéndola de la interfaz de red que está conectada a internet. Hay que tener en cuenta que en mi caso concreto esta interfaz es vlan2, pero dependiendo del modelo de router que tengamos esto puede variar.

A partir de este punto comienza la configuración que sera personal nuestra en cada caso. En SERVER_IPV4_ADDR pondremos la dirección IPv4 del servidor que nos facilita Hurricane Electric, en CLIENT_IPV6_ADDR la dirección IPv6 del cliente y en ROUTED_IPV6_ADDR el prefijo enrutado IPv6.

Lo siguiente ya son la ejecución de los comandos necesarios para levantar IPv6, si nos fijamos el script escribe un pequeño log en /jffs/ipv6/startup.log. También podemos observar que es capaz de recoger 3 variables de la línea de entrada. Estas variables son la API Key (que aparece como User ID en nuestra página de entrada del Tunnel Broker de Hurricane Electric), nuestra contraseña de acceso y la ID del túnel. Si al llamar al script le pasamos estos valores, será capaz de actualizar nuestra IP pública en Hurricane Electric, de tal forma que si ha cambiado, el túnel seguira activo.

Por último el script levanta radvd (un servicio que advierte a la red de la configuración de prefijo IPv6 que debe de usar) leyendo su configuración de /jffs/ipv6/radvd.conf:

interface br0 {
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        AdvLinkMTU 1480;
        AdvSendAdvert on;
        prefix 2001:470:bebe:cafe::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvValidLifetime 86400;
                AdvPreferredLifetime 86400;
        };
};

Aquí lo único que es necesario configurar es el prefix para que coincida con nuestro prefijo enrutado IPv6.

Para que todo esto funcione simplemente tenemos que llamar al script hetunnelbroker.sh desde la lista de comandos de arranque del router. Como comente anteriormente si lo llamamos sin argumentos simplemente levantará el túnel, sin embargo si le pasamos argumentos actualizara nuestra IP. Debemos utilizar una forma u otra dependiendo de si nuestra IP es fija o dinámica.

Una vez levantado el router, ya deberíamos de tener disponible IPv6. Para verificarlo, podemos intentar alcanzar esta misma página por IPv6 en ipv6.entropia.moire.org.

IPv6 y Windows 7.

Si bien, una vez que tenemos todo configurado, funciona correctamente en Windows 7, en la maquina que tengo yo como consola de videojuegos no me gusta el comportamiento por defecto que tiene este Sistema Operativo.

Micro$soft, fiel a sus principios, se pasa por el (póngase lo que se quiera) los estándares definidos para la configuración de IPv6 y en vez de utilizar una IP basada en la MAC de la ethernet, utiliza una basada en un número aleatorio generado. Aunque esto puede resultar interesante para mantener la privacidad, es un infierno si se utilizan DNS locales.

Si queremos deshabilitar esta característica, podemos hacerlo ejecutando los siguientes comandos en una consola cmd:

netsh interface ipv6 set privacy state=disabled store=active
netsh interface ipv6 set privacy state=disabled store=persistent
netsh interface ipv6 set global randomizeidentifiers=disabled store=active
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent

Una vez hecho esto reiniciamos la maquina y veremos que la interfaz se configurara correctamente usando EUI-64.

Para terminar, si queréis saber un poco mas sobre estos estándares de direccionamiento podéis leer este articulo que, curiosamente, me he encontrado en el TechNet de Micro$oft.

DreamPlug

Instalando una Debian en el DreamPlug

En mi anterior articulo comentaba cómo podíamos sustituir la Ubuntu 9.04 que viene por defecto en el DreamPlug utilizando una Debian prefabricada por la gente de Golbalscale. El problema es que esta imagen no es todo lo limpia que debería ser. Tiene demasiado software innecesario e incluso alguno que no funciona correctamente. Por lo que he decidido realizar una instalación del sistema partiendo de cero.

Parto del supuesto de que ya se dispone del USB de arranque con Debian y de que ya hemos iniciado el DreamPlug con el mismo utilizando el JTAG. Si no fuese así, aquí explico como hacerlo (pasos uno y dos). También es necesario que el DreamPlug disponga de conexión a internet en su interface eth0.

Una vez autenticados en el sistema configuramos la red, en mi caso dispongo de un servidor dhcp:

# dhclient eth0

Si no disponemos de servidor dhcp podemos configurar la interfaz a mano:

# ifconfig eth0 192.168.0.100 # Se configura una IP válida dentro del rango
# route add default gw 192.168.0.1 # Se agrega la puerta de enlace
# echo "nameserver 8.8.8.8" > /etc/resolv.conf # Utilizamos el servidor DNS de Google

Configurada la conexión limpiamos el disco interno del DreamPlug y lo montamos:

# mkfs.ext4 /dev/sda2 # Formateamos con ext4
# e2label /dev/sda2 root # Etiquetamos la partición como root (opcional)
# mount -t ext4 /dev/sda2 /mnt

Ya tenemos el sistema listo para comenzar la instalación, para ello utilizaremos la herramienta debootstrap. Cómo la idea es instalar Debian Testing, instalaremos primero el paquete de squeeze para luego sustituirlo por el de wheezy, finalmente agregamos la opcion –no-check-gpg a debootstrap para que no se detenga cuando compruebe la llave con la que están firmados los paquetes:

# apt-get install debootstrap # Instalamos debootstrap de squeeze para resolver las dependencias
# wget http://ftp.us.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.30_all.deb
# dpkg -i debootstrap_1.0.30_all.deb # Instalamos el de wheezy
# debootstrap --no-check-gpg --verbose --arch armel wheezy /mnt http://ftp.debian.org/debian/

Esperamos ahora un rato que es lo que tardara el debootstrap en descargar en instalar todos los paquetes del sistema base, una vez finalizado hacemos un chroot para entrar en el nuevo sistema y realizar un par de configuraciones:

# chroot /mnt
# passwd # Establecemos la contraseña para el usuario root
# vi /etc/inittab # Editamos el inittab para establecer que el terminal funcione con el JTAG

Ya que no es necesario que se carguen los terminales normales porque el GuruPlug no tiene pantalla, comentamos las líneas:
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Después de la línea:
# Example how to put a getty on a serial line (for a terminal)
Insertamos la siguiente para establecer un terminal COM para que funcione con el JTAG:
T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100

Una vez hechos estos cambios podemos salir del chroot.

Antes de reiniciar y arrancar con nuestro nuevo sistema limpio debemos copiar los módulos del kernel y el firmware del USB al disco interno:

# cp -r /lib/modules/2.6.33.6 /mnt/lib/modules
# cp -r /lib/firmware/* /mnt/lib/firmware
# cp /root/firmware/* /mnt/lib/firmware
# cp /root/*.ko /mnt/lib/modules/2.6.33.6/kernel/drivers/net/wireless

Como podemos ver hay ciertos ficheros de firmware y módulos del kernel de la tarjeta inalámbrica en la carpeta root. Esta es una pequeña guarreria que tienen todos los DreamPlugs, pero podemos colocarlos de forma ordenada en /lib.

En este momento ya podemos reiniciar la máquina y arrancar con nuestro nuevo sistema. Una vez iniciado nos quedan unos pasos por hacer para dejar el sistema listo:

# depmod # Para que los módulos copiados a mano de root se puedan cargar con modprobe
# apt-reconfigure tzdata # Para seleccionar el timezone correcto

# vi /etc/fstab # Agregamos lo siguiente
# Basic System Mounts
udev                    /dev                    tmpfs   rw,mode=0755            0 0
tmpfs                   /dev/shm                tmpfs   rw,nosuid,nodev         0 0
devpts                  /dev/pts                devpts  rw,noexec,nosuid,gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   rw,noexec,nosuid,nodev        0 0
proc                    /proc                   proc    rw,noexec,nosuid,nodev        0 0

# vi /etc/default/locale # Configuramos los locales por defecto en ingles
LANG=en_US.UTF-8

# apt-get install locales # Los instalamos
# dpkg-reconfigure locales # Y los configuramos, debemos seleccionar en_US.UTF8

# vi /etc/apt/sources.list # Configuramos los repositorios de APT
deb http://ftp.debian.org/debian wheezy main contrib non-free
deb http://security.debian.org wheezy/updates main contrib non-free

Ahora ya disponemos de un sistema base listo para trabajar.

Para finalizar decir que hay que tener en cuenta que esta es la instalación mas limpia posible por lo que tendremos que instalar todo aquello que necesitemos para nuestro DreamPlug.

Actualización:

A los pocos días de instalar wheezy, udev comenzó a darme los siguientes errores (siendo X un número, ya que lo arrojaba en todos los dispositivos del mismo tipo):

udevd[621]: inotify_add_watch(6, /dev/loopX, 10) failed: No such file or directory
udevd[621]: inotify_add_watch(6, /dev/ramX, 10) failed: No such file or directory
udevd[621]: inotify_add_watch(6, /dev/sdaX, 10) failed: No such file or directory
udevd[621]: inotify_add_watch(6, /dev/sdbX, 10) failed: No such file or directory

Inicialmente pensé que el problema podría venir de que, por alguna extraña razón, el debootstrap no hubiese creado el /dev estático y que udev estaba intentando acceder al mismo antes de crear los dispositivos dinámicamente, pero después de revisarlo (mount bind es tu amigo), vi que ese no era el problema y que todo estaba correcto.

Cómo la maquina arrancaba y funcionaba terminé por dejarlo de lado y presuponer que se trataba de algún fallo de la Debian testing que estaba haciendo de las suyas.

Pero la cosa cambió hace un par de días. Después de aplicar una actualización de estas que meten miedo y cambian medio sistema base, le pegué un reinicio al Dream. Para mi sorpresa, pese a que todo se había actualizado correctamente, la máquina no arrancó.

Revisando el registro de inicio pude ver que el fallo estaba en udev. En este caso el número de errores que sacaba por consola tendía hacia infinito y la máquina se quedaba ahí colgada.

Desde el primer momento sospeché que el fallo podía venir del kernel, que simplemente la versión que viene con el Dream es muy antigua para trabajar con la versión de udev que viene en weezy, así que lo sustituí por uno mas moderno. Para no romperme la cabeza compilando una nueva versión, utilice la última que podemos descargar de http://l.moire.org/plug-kernel, un sitio muy chulo donde están disponibles todas las versiones que han salido hasta la fecha, ya cocinadas con las opciones que vienen por defecto en el Dream y alguna más, como por ejemplo el soporte base a sistemas como XFS o UBIFS.

Una vez sustituido el kernel por uno mas moderno la máquina comenzó a trabajar perfectamente y todos los errores de udev desaparecieron.

El procedimiento de actualización es simple. Montamos la primera partición FAT en un directorio temporal, bajamos la versión que queramos usar (normalmente la última) a ese punto de montaje (hay sitio de sobra), renombramos el uImage a uImage.bak (para tener respaldo del original) y el fichero bajado a uImage, bajamos los módulos y los dejamos en /lib/modules (también tenemos disponible el firmware por si lo queremos usar), reiniciamos y listo, sistema arrancado con el nuevo kernel.

DreamPlug

Primeros pasos con el DreamPlug

Hace unas semanas recibí en un pedido conjunto mi nuevo DreamPlug, un pequeño equipo basado en tecnología ARM de NewIT. Inmediatamente me puse a trabajar con el para ponerlo a funcionar. La idea era sustituir a mi actual GuruPlug, y dejar este último para un trabajo mas liviano y exclusivo con la web de Connectical. En mi primera toma de contacto, una vez arrancado, me encontré con una serie de problemas de software no demasiado graves. Echando un ojo a los foros de NewIT, parece ser que, tal vez por tratarse de un equipo demasiado moderno, todas las unidades vienen con estos problemas de fábrica. Afortunadamente, al tratarse de software, todos ellos tiene fácil solución.

El primer fallo que me encontré nada mas arrancar fue un error conocido en la tabla de particiones y, aunque el equipo funciona correctamente, las particiones aparecen «montadas» unas sobre otras generando errores de bus en el /var/adm/messages. El segundo no es un fallo en si mismo, pero el equipo viene con una Ubuntu 9.04 instalado por defecto, una distribución obsoleta y tal vez no demasiado liviana.

Estos son los pasos que he dado para corregir los errores citados. Comentar que Globalscale no da soporte a las modificaciones que podamos hacer en el sistema base, por lo que si quieres tener tu equipo cubierto, simplemente sigue los primeros pasos de la guía y no sustituyas la distribución, aunque si lo haces que sepas que siempre se puede volver atrás instalando de nuevo la imagen de fábrica.

Paso previo: Comprobación de Hardware.

Algunas unidades de DreamPlug vienen con dos posibles fallos de hardware.

El primero de ellos, el menos problemático, está en el adaptador del enchufe europeo, donde el aparato se conecta con el cable de corriente. En algunos modelos este adaptador viene demasiado holgado y hace que el cable de alimentación se desconecte solo con tocarlo. La solución a esto es sencilla, podemos enviar un reporte para que nos manden un adaptador nuevo o, si tenemos mucha prisa por ponernos a trabajar, pegar el adaptador al cable, lo cual no interfiere para nada con el funcionamiento normal del DreamPlug.

El segundo fallo es mas problemático, y la solución pasa por cambiar el aparato entero. Se trata de un error en la frecuencia de reloj del microprocesador, en algunos modelos esta fijada a 400 Mhz cuando debería de estar a 1.2 Ghz. Para comprobar si nuestro equipo está afectado podemos mirar el /proc/cpuinfo como comentan en este hilo, si los BogoMIPS están en torno a 396 nuestro equipo está en fallo, si por el contrario esta en torno a los 1192 es que está funcionando correctamente. Comentar para vuestra tranquilidad que por ahora ningún equipo europeo vendido por NewIT se ha visto afectado.

Paso 1: Crear un USB arrancable.

El primer paso del proceso es crear un volumen USB seudo-arrancable. Es «seudo» porque aunque en el USB almacenamos un sistema base, el kernel de arranque es el que viene en el propio DreamPlug.

Para crear este sistema base USB podemos utilizar la imagen de fábrica, la imagen Debian que nos proveen los chicos de Globalscale o una imagen Debian modificada por Andrés J Díaz. Será necesario entonces formatear el USB en un sistema ext2, ext3 o ext4 (que son los nativos de Linux que soporta el kernel) y desempaquetar esta imagen dentro. En mi caso he realizado todos los pasos en el propio DreamPlug con la imagen Debian de Golbalscale.

# wget http://l.moire.org/dp_deb_01 http://l.moire.org/dp_deb_02
# cat dreamplug_debian_v0.2.zip.001 dreamplug_debian_v0.2.zip.002 > dp_deb.zip
# unzip dp_deb.zip
# mkfs.ext4 /dev/sdñ1 # Siendo sdñ tu unidad USB
# mount /dev/sdñ1 /mnt
# tar xvzpf dreamplug_debian_v0.2.tar.gz -C /mnt
# cp dreamplug_debian_v0.2.tar.gz /mnt # En caso de querer sustituir el sistema

En este ejemplo asumo que sdñ es la unidad conectada por USB, llavero o similar. Con un dispositivo de 2Gb es suficiente. El último paso solo es necesario realizarlo si planificamos sustituir el sistema base Ubuntu 9.04 por el Debian que hemos descargado.

Paso 2: Arrancar desde el USB

El siguiente paso es arrancar desde el USB para poder realizar operaciones en el «disco interno» del DreamPlug. Para realizar toda esta operativa es necesario tener conectado el módulo JTAG. Sin este módulo nos sería imposible controlar el proceso de arranque de la máquina y no podríamos forzar al U-Boot a usar el USB. La idea es arrancar utilizando el kernel de fábrica que se encuentra en el DreamPlug pero seleccionando como disco de sistema el USB.

Cuando el sistema arranca el la consola del JTAG vemos estas líneas:

88E1121 Initialized on egiga1
Hit any key to stop autoboot: 3

En ese momento pulsaremos cualquier tecla para interrumpir el arranque normal y acceder al U-Boot:

Marvell>>

Entonces se modifica el entorno para que se utilice el sistema raíz del USB:

Marvell>> setenv x_bootargs_root root=/dev/sdc1 rootdelay=15
Marvell>> boot

Es necesario el parámetro «rootdelay» para esperar a que el bus USB se inicie después de la carga del kernel ya que el escaneo de dicho bus es asíncrono. No es posible controlar exactamente este tiempo, ya que depende de diferentes factores, pero 15 segundos es mas que suficiente.

Hay que tener en cuenta que no se realiza un guardado del los cambios en el entorno de arranque, por lo tanto esto no afecta a los siguientes inicios del DreamPlug.

Paso 3: Reconstruir las particiones

Una vez iniciado el sistema nos autenticamos como root con la contraseña por defecto de las imágenes «nosoup4u».

Revisamos la tabla de particiones:

# fdisk -l /dev/sda
Disk /dev/sda: 1967 MB, 1967128576 bytes
61 heads, 62 sectors/track, 1015 cylinders
Units = cylinders of 3782 * 512 = 1936384 bytes
Disk identifier: 0xabcdef

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1016     1920993+   6  FAT16
Partition 1 has different physical/logical endings:
     phys=(54, 61, 61) logical=(1015, 54, 24)
/dev/sdb2              56        1021     1826706   83  Linux

Como se puede observar hay un problema en la tabla. La primera partición FAT16, que es la utilizada para almacenar la imagen del kernel que usa U-Boot para arrancar no tiene el tamaño correcto. La partición debería de ser de 16 Mb o 55 cilindros, por lo que la eliminamos y la creamos de nuevo:

# fdisk /dev/sda
Command (m for help): d
Partition number (1-4): 1
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1015, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-55, default 55): 55

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

Command (m for help): w
The partition table has been altered!

Syncing disks.

Ahora la primera partición tiene el tamaño correcto, pero la segunda sigue siendo incorrecta. Comienza en el cilindro 56 lo cual está bien, pero termina mas allá del final del disco. Es necesario corregir también esta partición:

# fdisk /dev/sda
Command (m for help): d
Partition number (1-4): 2
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (56-1015, default 56): [enter]
Using default value 56
Last cylinder, +cylinders or +size{K,M,G} (56-1015, default 1015): [enter]
Using default value 1015

Command (m for help): w
The partition table has been altered!

Syncing disks.

Y esto es todo. En este momento ya tenemos las particiones correctamente creadas, el sistema debería de funcionar sin problemas puesto que ya hemos corregido todos los fallos. Solo sería necesario reiniciar, rezar al dios que mas nos convenga, hacer algo de vudú, sacrificar un carnero y construir un falso ídolo.

Paso 4: Debianizar

Si lo que queríamos era simplemente corregir los errores de fábrica del DreamPlug no es necesario realizar los cambios siguientes, pero si queremos disponer de una distribución mas ligera podemos sustituir la Ubuntu 9.04 de la siguiente manera.

En el primer paso habíamos copiado la imagen tar.gz de Debian en nuestro USB. Vamos a utilizarla ahora. Suponemos que ya hemos arrancado desde el USB según el paso 2 y nos hemos autenticado en el sistema. Realizamos ahora el cambio:

# umount /dev/sda2 # Puesto que ha sido montado automáticamente por usbmount
# mkfs.ext4 /dev/sda2 # Formateamos con ext4
# e2label /dev/sda2 root # Etiquetamos la partición como root (opcional)
# mount -t ext4 /dev/sda2 /mnt
# tar xvzpf /dreamplug_debian_v0.2.tar.gz -C /mnt
# sync && sync && sync
# umount /mnt

En este momento ya tenemos instalada la nueva distribución Debian en disco interno del DreamPlug. Solo resta reiniciar y podremos comenzar a trabajar.

Para terminar decir que para aquellos que no os sintáis cómodos con el idioma de Cervantes, tenéis una versión de este artículo en inglés aquí.

Logo de GPUL

Xornadas Libres de GPUL

Cómo viene siendo habitual año tras año en GPUL, los próximos días 28 a 31 se celebrará en el marco de la Facultad de Informática de A Coruña las “Xornadas de Software Libre”, reconvertidas este año en “Xornadas Libres” por ser mas generales y tratar otros temas como Hardware Libre, o robótica.

En esta edición dos conferencias/taller corren de mi cuenta. Ambas tratan sobre el despliegue de servidores web bajo Linux. En la primera los asistentes aprenderán a desplegar su propio WordPress utilizando para ello las tecnologías de nginx como servidor web, PHP, y MySQL Server. La segunda, ligeramente mas avanzada, versará sobre Redmine, un gestor de proyectos. Comentar que, en esta última, aparte de su despliegue, haremos también un recorrido sobre el uso de la herramienta.

Dichas conferencias/taller tendrán lugar los días martes 29 y jueves 31, ambas a las 19:30.

Evidentemente no debéis dejar de prestar atención al resto de ponencias, las cuales son todas muy interesantes y amenas.

Actualización: Ya está disponible el programa completo en la página web de GPUL. Aquí os dejo el cartel:

Cartel de las Xornadas Libres de GPUL

VII Xornadas Software Libre Concello de Mugardos

VII Jornadas de Software Libre en Mugardos

El próximo día 26 de Junio se celebran en la Casa del Concello de Mugardos las Séptimas Jornadas de Software Libre en donde hablaremos sobre las principales novedades de Ubuntu 10.04, Drupal, traducciones, P2P y de las principales ventajas que ofrecen los sistemas libres frente a los sistemas privativos.

En esta ocasión la charla de apertura corre de mi cuenta con una introducción al mundo Linux de la mano de Ubuntu. En ella haremos un recorrido por las características de este robusto sistema, con la idea de que aquellos que no hayan tenido un contacto anterior con este mundillo, puedan iniciarse sin problemas, y aquellos usuarios expertos que ya lo hayan utilizado, puedan darle un amplio repaso.

VII Xornadas Software Libre Concello de Mugardos

Por supuesto no puedes perderte el resto de conferencias, en las cuales se tratarán temas actuales, de gran interés y enfocados desde puntos de vista profesionales, pero sin faltar el toque de humor distendido que caracteriza a todos los ponentes.

Puedes visitar la web de la Comunidade O Zulo para conocer de primera mano todas las novedades de esta edición, así como informarte de otros eventos que organizan a lo largo del año.

HFS+

Hoy en día es normal utilizar discos duros externos para llevarnos cosillas de un lado a otro, incluso los utilizamos como otro espacio de almacenamiento más como un poco de “cajón desastre”.

También es normal hoy en día que (si somos usuarios asiduos de estos discos) tengamos que conectarlos en diferentes sistemas operativos, porque algún amigo friki usará Linux o algún que otro imprudente utilizará Windows…

Para solucionar el problema de los “múltiples Sistemas Operativos” los fabricantes hacen que miran hacia otro lado y sacan sus discos preformateados en FAT, un formato un tanto antiguo que funciona en todas las plataformas, pero con un montón de limitaciones.

Si bien las limitaciones de FAT están mas o menos controladas (es muy raro ya el usuario que anda con MS-Dos o similar en donde no es posible utilizar FAT32) aún sigue habiendo una en concreto que nos puede hacer la vida bastante complicada, la limitación de 4 GB de tamaño máximo de archivo. Parece un poco tonto no ¿Quien va a crear un archivo mayor de 4 GB?, pues no es tan raro, una imagen de un DVD rellenito ya ocupa mas, y no digamos si el DVD es de doble capa…

Cada día que pasa veo que la gente se hace mas vaga. Antes descargabas archivos grandes de Internet divididos en múltiples ficheros de 1 o 2 GB, pero según han ido aumentando las velocidades de acceso ya nadie se molesta en eso y te pasan un archivo enorme de 6 o 7 GB que, a la hora de almacenarlo en un medio externo de tipo FAT, tienes que recortar en varios pedazos.

El problema viene cuando quieres almacenar eso que estas descargando directamente el el disco externo. Empieza a bajar 1 Gb, luego 2 GB, 3 GB, 4 GB, y se jodió el invento, fallo de acceso que (perdonando la expresión) te cagas en las bragas, y adiós muy buenas.

Entonces, ¿Como solucionamos el petate? Bueno, la solución pasa por utilizar algún sistema de archivos mas actual y, por lo tanto, nativo de alguna plataforma. Pero con eso nos creamos otro problema, al ser un sistema nativo solo va a funcionar (a priori) en su plataforma. Y claro, ahora pensamos, JODER! Si me formateo un disco en Linux (por ej.) y solo lo voy a poder usar en Linux ¿Como hago para llevarle las pelis porno a mi colega imprudente que tiene Windows?

La respuesta está en que, como dije antes, que no se pueda usar a priori no quiere decir que no se pueda usar. Lo que pasa es que los Operativos son muy suyos, y por defecto no traen soporte para nada mas que para lo que a ellos les interesa, pero esto no quiere decir que no podamos usar los sistemas de unos en los otros. ¿Cuál es entonces la mejor opción?

No existe la “solución definitiva”, hay varias y cada una tiene sus pros y sus contras, de los 3 grandes tipos de sistemas de archivo (ext3 de Linux, HFS+ de MacOS y NTFS de Windows) podríamos usar cualquiera, con su complicación en el sistema operativo vecino. Por ej, si usamos ext3 nos funcionará de maravilla en Linux, en Windows tendremos que utilizar Ext2 IFS y en MacOS la cosa se complica bastante al no haber una implementación sencilla del sistema.

Desde la aparición de FUSE el utilizar como salida el sistema de archivos NTFS nativo de Windows se esta convirtiendo en algo “estandarizado” para compartir archivos entre plataformas. En Windows funciona correctamente (bueno, es Windows…) y en MacOS y Linux funciona con FUSE y NTFS-3G de forma muy sencilla. Pero entonces ¿A que viene el título de HFS+?

HFS+ es el sistema de archivos nativo de MacOS, en esencia es parecido a los otros dos (soporta permisos, nombres de archivo kilométricos, etc…) por lo que es un remedio mas a todo este lío, ¿Por qué elegirlo?

Bueno, en estos momentos HFS+ (sin Journaling) esta soportado de forma nativa en MacOS y Linux, lo cual es una ventaja, ya que no tenemos que instalar nada para utilizarlo en estas plataformas. Además si formateamos un disco externo con HFS+ podremos usarlo con Time Machine y así hacer copias de seguridad fáciles en nuestro MacOS. En Windows tendremos que instalar un programa como HFSExplorer, con licencia GPL, o MacDrive, de pago (aunque buscando un poco podremos encontrarlo en forma “baratita”) pero con la ventaja de hacer que los discos funcionen también de forma nativa en el operativo, como si se tratasen de NTFS.

En conclusión, si usamos asiduamente MacOS, sin duda HFS+ es la mejor elección para nuestros dispositivos externos ya que es muy fácil de usar y de las tres alternativas presentadas es la que menos requiere a la hora de portarla a otros operativos y con la ventaja de que podremos utilizar Time Machine.

Como dato final decir que a la hora de formatear nuestro disco externo desde MacOS usando la “Utilidad de Discos” debemos escoger Mac OS Plus (mayús./minús.) para que nos cree el sistema sin Journaling y así no tener problemas a la hora de utilizarlo desde Linux. En el caso de que se nos active el Journaling (o que ya tengamos formateado el disco y no queramos borrarlo) podemos hacerlo desde la misma utilidad haciendo click en el menú archivo mientras mantenemos pulsada la tecla opción (alt, para los amigos) y seleccionando “Desactivar registro”.

Nota: En ocasiones el disco puede tener Journaling habilitado y resistirse a deshabilitarlo, en ese caso tendremos que hacer la jugada de forma manual con comandos. Para ello basta con utilizar diskutil de la siguiente forma:

  1. Con el disco conectado hacemos un “mount” a secas (en caso de estar montado) o un “diskutil list” para saber cual es el dispositivo (en mi caso aparece como /dev/disk2s3)
  2. Si esta montado (aparece en el escritorio), desmontamos el dispositivo con la orden: diskutil umount /dev/disk2s3
  3. Y le deshabilitamos el journaling con: sudo diskutil disableJournal force /dev/disk2s3

Y con esto quedaría listo.