Linux en Routerboard: Prueba 1

Resumen

Los siguientes pasos describen el proceso para que la placa routerboard 532 realice el booteo desde una memoria compact flash (CF), que contiene una imagen basada en Debian obtenida en la página de RouterBoard 500. El proceso consiste en descargar la imagen, decomprimirla, almacenarla en una memoria CF de 1 GB, y lograr el booteo. Además en la sección Errores se describe los problemas y las soluciones para dejarlo totalmente funcional.

Pasos

1. Descargamos y luego descomprimimos la imagen rb500-1024.img.zip

pianobar:/mnt/tesis/tesis/download# wget http://www.routerboard.com/files/rb500- 1024.img.zip
--02:49:16--  http://www.routerboard.com/files/rb500-1024.img.zip
           => `rb500-1024.img.zip'
Resolviendo www.routerboard.com... 12.22.39.145
Connecting to www.routerboard.com|12.22.39.145|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 43.165.343 (41M) [application/zip]

100%[========================================================>] 43.165.343    88.08K/s    ETA 00:00

02:57:28 (85.95 KB/s) - `rb500-1024.img.zip' saved [43165343/43165343]

unzip rb500-1024.img.zip -d /mnt/tesis/tesis/pruebas/prueba1

El problema es que posee un tamaño superior a 1 GB, por lo que no cabe en nuestra CF, observemos la salida de ls -l:

pianobar:/mnt/tesis/tesis/pruebas/prueba1# ls -l rb500-1024.img
-rw-r--r-- 1 root root 1077608448 2005-10-12 09:43 rb500-1024.img

Lo que nos planteamos es, copiar el contenido de este archivo a la memoria CF, debido a que, como vimos, el archivo imagen completo supera la capacidad de nuestra tarjeta de memoria. Veamos el contenido de este archivo imagen…
Mediante el fdisk -l vemos la lista de las particiones de esta imagen

pianobar:/mnt/tesis/tesis/pruebas/prueba1# fdisk -l rb500-1024.img
Disco rb500-1024.img: 0 MB, 0 bytes
16 cabezas, 63 sectores/pista, 0 cilindros
Unidades = cilindros de 1008 * 512 = 516096 bytes

      Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
rb500-1024.img1               1           8        4000+  27  Desconocido
rb500-1024.img2               9        2088     1048320   83  Linux
La partición 2 tiene distintos finales físicos/lógicos:
 físicos=(1023, 15, 63) lógicos=(2087, 15, 63)

2. Como observamos a la salida del fdisk -l el archivo imagen posee dos particiones, una que va desde el cilindro 1 al 8, del tipo 27 (desconocida) y otra desde el cilindro 9 al 2088 de tipo 83 (Linux!!).
Como dijimos anteriormente, queremos copiar el contenido de las dos particiones, que es inferior al tamaño del archivo imagen.

//Hagamos un paréntesis antes de continuar, es bueno aclarar qué es esta primer partición de tipo desconocida para Linux… Es utilizada por el Routerboard para almacenar el kernel //

Lo que haremos será montar solamente esta segunda partición en /mnt/cf, desde el cilindro 9, por lo tanto deberemos realizar un desplazamiento (offset):

pianobar:/mnt/tesis/tesis/pruebas/prueba1# mkdir -p /mnt/cf
pianobar:/mnt/tesis/tesis/pruebas/prueba1# mount -o loop,offset=4128768 rb500-1024.img /mnt/cf

Veamos con qué nos encontramos dentro de /mnt/cf

pianobar:/mnt/tesis/tesis/pruebas/prueba1# ls /mnt/cf/
bin   cdrom  etc     home    lib         mnt  proc  sbin  tmp  var
boot  dev    floppy  initrd  lost+found  opt  root  sys   usr  vmlinux

Como observamos, tenemos un sistema de archivos raiz (RFS, Root File System). Veamos el espacio que ocupa en disco:

# du -sh /mnt/cf/
94M     /mnt/cf/

3. Ahora, utilizando la herramienta dd, copiamos la primer partición a la memoria CF ( /dev/sda ). Como observamos anteriormente con el fdisk, la primer partición ocupa los primeros 4.128.768 bytes. La debemos copiar en bloques de 512 bytes, por lo que nos da un total de 8064 bloques.

$\frac{4.128.768 bytes}{512 bytes }= 8064 bloques$

pianobar:/mnt/tesis/tesis/pruebas/prueba1# dd if=rb500-1024.img of=/dev/sda bs=512 count=8064
8064+0 records in
8064+0 records out
4128768 bytes (4,1 MB) copied, 15,1068 seconds, 273 kB/s

4. Eliminamos la segunda partición y la creamos nuevamente, de modo que nos queda de la siguiente manera:

Disco /dev/sda: 1039 MB, 1039933440 bytes
16 cabezas, 63 sectores/pista, 2015 cilindros
Unidades = cilindros de 1008 * 512 = 516096 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1               1           8        4000+  27  Desconocido
/dev/sda2               9        2015     1011528   83  Linux

5. Formateamos /dev/sda2 luego de desmontarla:

pianobar:/mnt/tesis/tesis/pruebas/prueba1# umount /dev/sda2
pianobar:/mnt/tesis/tesis/pruebas/prueba1# mke2fs /dev/sda2
mke2fs 1.40-WIP (14-Nov-2006)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
126464 nodos i, 252882 bloques
12644 bloques (5.00%) reservados para el súper usuario
Primer bloque de datos=0
Maximum filesystem blocks=260046848
8 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
15808 nodos i por grupo
Respaldo del súper bloque guardado en los bloques:
        32768, 98304, 163840, 229376

Mientras se escribían las tablas de nodos i: terminado
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 36 meses o
180 dias, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.

6. Creamos /mnt/cf2 para montar la segunda partición de la CF ( /dev/sda2 ), luego la montamos en esa ubicación y por último transferimos el sistema de archivos (root file system) completo, que corresponde a la segunda partición del archivo imagen (rb500-1024.img) , que habiamos dejado en /mnt/cf .

pianobar:/mnt/tesis/tesis/pruebas/prueba1# mkdir -p /mnt/cf2
pianobar:/mnt/tesis/tesis/pruebas/prueba1# mount /dev/sda2 /mnt/cf2
pianobar:/mnt/tesis/tesis/pruebas/prueba1# cp -a /mnt/cf/* /mnt/cf2
pianobar:/mnt/tesis/tesis/pruebas/prueba1# umount /mnt/cf2

7. Listo! Ahora por útlimo, se debe conectar la memoria CF al routerboard 532, conectar mediante un cable serie (modem nulo) la pc al routerboard. Luego debemos abrir Minicom y encender el routerboard. En el arranque, debemos presionar <enter> y elegir la opción de booteo que corresponde a la memoria CF.
y seleccionar que arranque desde la memoria CF.

Welcome to minicom 2.2

OPCIONES: I18n
Compilado en Jan  7 2007, 18:00:43.
Port /dev/ttyS1

               Presione ESC,Z para obtener ayuda sobre teclas especiales

RouterBOOT booter 2.1

RouterBoard 532

CPU frequency: 264 MHz
  Memory size:  32 MB

Press any key within 5 seconds to enter setup..

RouterBOOT-2.1
What do you want to configure?
   d - boot delay
   k - boot key
   s - serial console
   o - boot device
   u - cpu mode
   f - try cpu frequency
   c - keep cpu frequency
   r - reset configuration
   e - format nand
   g - upgrade firmware
   i - board info
   p - boot protocol
   t - do memory testing
   x - exit setup
your choice: o - boot device

Select boot device:
   e - boot over Ethernet
   n - boot from NAND, if fail then Ethernet
 * c - boot from CompactFlash only
   1 - boot Ethernet once, then NAND
   2 - boot Ethernet once, then CompactFlash
   o - boot from NAND only
   b - boot chosen device
your choice: c - boot from CompactFlash only

Errores

1). - Sistema raíz, montado con permisos de solo lectura

Descripción: Debido a que no se ha podido realizar la comprobación del sistema de archivos, el sistema raíz se ha montado con permisos de solo lectura, lo que trae como consecuencia que no puedan levantarse los servicios de red (interfaces, servicios como ssh, rutas)
Mesaje de error:

fsck failed.  Please repair manually and reboot.  Please note
that the root file system is currently mounted read-only.  To
remount it read-write:

   # mount -n -o remount,rw /

CONTROL-D will exit from this shell and REBOOT the system.

Solución: ingresar al sistema usando la clave de root, que es root y luego montar el sistema raíz con permisos de lectura/escritura: mount -n -o remount,rw /

2). - Diferencia de versiones de e2fsck

Descripción: Debido a que la CF ha sido formateada desde la pc host utilizando una versión reciente de e2fsck y la distribución que se almacena en la CF posee una versión anterior, no se puede realizar la comprobación del sistema de archivos.
Mesaje de error:

 fsck.ext2: Filesystem has unsupported feature(s) (/dev/cfa2)
e2fsck: Get a newer version of e2fsck!

Solución:

3). - Problemas para usar apt-get

a- Descripción: El primer problema surge debido a que se llena la memoria cache…
Error:

Solución: se debe agregar en /etc/apt/apt.conf la siguiente linea para limitar la memoria cache (ver man apt.conf)

APT::Cache-Limit "8388608";

b- Descripción: Cuando intenta hacer el apt-get dist-upgrade no puede actualizar determinados paquetes debido a que son paquetes escenciales, se produce un error de dependencias circulares.
Error:

: This installation run will require temporarily removing the essential
> package e2fsprogs due to a Conflicts/Pre-Depends loop. This is often
> bad, but
> if you really want to do it, activate the APT::Force-LoopBreak option.
> E: Internal Error, Could not early remove e2fsprogs"

Solución: Se debe realizar un apt-get forzando al sistema a instalar los paquetes por más que tengan dependencias circulares, usando el siguiente comando:
apt-get -o APT::Force-LoopBreak=1 —fix-broken dist-upgrade

También se podría modificar /etc/apt/apt.conf ingresando la linea que se describe abajo, pero luego se la debe eliminar para evitar dañar el sistema en el futuro.
APT::Force-LoopBreak "true";

Archivos de configuración:

/etc/network/interfaces

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet static
        address 192.168.0.10
        netmask 255.255.255.0

#auto eth1
#iface eth1 inet static
#       address 192.168.0.11
#       netmask 255.255.255.0

#auto eth2
#iface eth2 inet static
#       address 192.168.0.12
#       netmask 255.255.255.0
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License