Instalar debian en el sheevaplug/ eSATA sheevaplug

Artículo creado el 25 de Febrero 2010 ---> Actualizado el 19 Diciembre de 2010

ÍNDICE

1. Preámbulo

2. Preparaciones previas

2.1 Configuración del reloj de hardware
2.2 Actualización del U-boot

3. Métodos de instalación

3.1 Instalación mediante debootstrap
3.2 Instalación mediante el instalador de debian
3.2.1 Descargar archivos del instalador y ponerlos disponibles para el sheeva
3.2.2 Preparar el entorno y cargar el instalador
3.2.3 Instalación y particionado

4. Configurar U-boot para que arranque la instalación

5. Post-instalación. Generación de uInitrd y uImage tras una actualización

1. Preámbulo

El sheeva plug que estamos usando durante la redacción de este artículo trae preinstalado Ubuntu Jaunty Jackalope pero podemos instalar debian en una tarjeta sd o en un USB stick o en un disco duro externo USB. A día de hoy desconozco si hay alguna posibilidad de instalarlo en la memoria flash interna.
Si se va a proceder a instalar en un Disco duro USB se recomienda usar una tarjeta sd para la partición /boot puesto que el uboot que vamos a instalar no siempre reconoce a la primera los Discos duros USB.

Por otro lado el eSATA sheevaplug es un modelo más nuevo del que el autor de este artículo no dispone, pero al que se le puede aplicar estas instrucciones salvo un par de pequeños detalles en los comandos que serán mencionados en cada caso correspondiente poniendo en negrita la palabra eSATA para mejor localización de esas diferencias. Se recomienda acudir a esa fuente para comprobar tanto novedades como posibles erratas, sobre todo en el caso del eSATA ya que no se dispone de él para realizar las correspondientes pruebas.

2. Preparaciones previas

2.1 Configuración del reloj de hardware
Se han reportado errores de fallos durante la instalación por no estar en reloj de hardware correctamente configurado, y se recomienda hacerlo con el comando hwclock mediante la instalación de ubuntu existente.

Sin embargo, en las dos instalaciones que se han hecho previas a la redacción de este artículo, (la primera a un USB stick y la segunda a una sd) no se han encontrado problemas sin haber sido necesario tal paso. Claro que en la segunda instalación el reloj interno estaba bien configurado por la instalación previa de debian.

2.2 Actualización del U-boot
Es necesaria la actualización de U-boot si la versión instalada es anterior a la 3.4.19 o si tienes la 3.4.27. La versión 3.4.27 tiene un bug que puede darse:

Verifying Checksum ... Bad Data CRC error when loading the Debian image.

Existe un artículo en este wiki con instrucciones para hacerlo

Nota: Tanto para la actualización del u-boot, como para la instalación es necesario tener correctamente instalado y configurado minicom. En el artículo sobre la actualización del u-boot se explica como hacerlo.

3. Métodos de instalación

3.1 Instalación mediante debootstrap
Este método no lo he probado ni he investigado como hacerlo en el sheeva, pero supongo que no diferirá demasiado sobre una instalación debootstrap normal como se indíca en este artículo de la wiki.

Supongo que esa instalación se haría desde la propia instalación de ubuntu del sheeva y tras hacerlo solo habría que saltar al paso de configurar u-boot

3.2 Instalación mediante el instalador de debian
3.2.1 Descargar archivos del instalador y ponerlos disponibles para el sheeva
Lo primero que debemos hacer es descargar los archivos ulmage y ulnitrd. Ahora mismo están disponibles el instalador para lenny o para squeeze.

Lenny:
ulmage
ulnitrd

Squeeze:
ulmage
ulnitrd

Nota: Se recomienda visitar esta página por si hay nuevas versiones del instalador o los enlaces estan rotos.

Una vez tenemos esos archivos, podemos guardarlos en tres sitios diferentes (independientemente de donde vayamos a instalar), en un servidor FTP, en una tarjeta MMC/SD o en un USB.

Las velocidades de lectura y escritura en las tarjetas MMC/SD y en los pendrives USB son mucho más lentas que en un disco duro USB, además la vida últil de estas es más corta, por lo que es recomendable realizar la instalación en un disco duro, sin embargo, debido a que a veces el arrancador u-boot no reconoce a la primera los discos duros externos, mi recomendación es que se instale en el disco usb pero con una partición /boot en una tarjeta MMC/SD.

¿Por qué la parrafada anterior para hablar del particionado antes de decidir donde guardar los archivos del instalador?
Porque guardar esos archivos en un disco duro USB puede ser un problema si no es reconocido por el u-boot a la primera.

Lo ideal es guardarlos en el servidor TFTP, pero si no disponemos de uno o no queremos montarlo para la ocasión, podemos guardarlo en la tarjeta MMC/SD o en el Pendrive. La partición en la que guardar los archivos tiene que ser o fat16 o ext2 (en un principio ext3 también está soportado), pero como la partición para boot debe estar en ext2 recomiendo crear una partición de unos 150 mb en ext2 en la tarjeta donde guardaremos esos archivos.
Una vez cargados en memoria y arrancado el instalador podremos usar esa partición como punto de montaje para /boot.

3.2.2 Preparar el entorno y cargar el instalador
Conectamos al sheeva con minicom y accedemos a la linea de comandos del u-boot ya actualizado. (revisar el enlace de la actualización del U-boot si en tu caso no has necesitado hacerlo y no sabes como hacer esto)

Con estos comandos, prepararemos el sheeva para cargar el kernel de debian y reiniciará el dispositivo con los cambios guardados, tras lo cual, volveremos a acceder a la linea de comandos del U-boot presionando una tecla durante la carga del mismo.

setenv mainlineLinux yes
setenv arcNumber 2097
saveenv
reset

En el caso del eSATA sheevaplug solo hay que cambiar el arcNumber por 2678 en lugar de 2097

De nuevo en la linea de comandos cargamos el instalador en memoria, dependiendo de donde se hayan guardado los archivos del instalador y el formato de la partición. (en este ejemplo la partición está en formato ext2, si el formato es fat 16 sustituir ext2load por fatload

El instalador está en un USB:

usb start
ext2load usb 0:1 0x01100000 /uInitrd
ext2load usb 0:1 0x00800000 /uImage

El instalador está en una tarjeta MMC/SD cards:

mmcinit
ext2load mmc 0:1 0x01100000 /uInitrd
ext2load mmc 0:1 0x00800000 /uImage

El instalador está en un servidor TFTP: (sustituir la ip por la de vuestro servidor)

setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.147
tftpboot 0x01100000 uInitrd
tftpboot 0x00800000 uImage

Una vez cargado el instalador lo lanzamos con estos dos últimos comandos:

Para lenny:

setenv bootargs console=ttyS0,115200 base-installer/initramfs-tools/driver-policy=most mirror/suite=stable apt-setup/local0/repository="http://people.debian.org/~tbm/orion lenny main" apt-setup/local0/key=http://people.debian.org/~tbm/orion/68FD549F
bootm 0x00800000 0x01100000

(son solo dos lineas, la primera es muy larga)

Para squeeze.

setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
bootm 0x00800000 0x01100000

3.2.3 Instalación y particionado
La instalación es casi igual que una instalación estándar con el instalador de debian normal, solo que en lugar de una interfaz ncurses la interfaz es ASCII (si se puede llamar así).

Un ejemplo de como se vé en el particionado

  lqqqqqqqqqqqqqqqqqqqqqqqqu [!!] Partition disks tqqqqqqqqqqqqqqqqqqqqqqqqqk
  x                                                                         x
  x This is an overview of your currently configured partitions and mount   x
  x points. Select a partition to modify its settings (file system, mount   x
  x point, etc.), a free space to create partitions, or a device to         x
  x initialize its partition table.                                         x
  x                                                                         x
  x        Configure encrypted volumes                                      x
  x                                                                a        x
  x        SCSI1 (0,0,0) (sda) - 8.0 GB Kingston DataTraveler 2.0  a        x
  x        >     #1  primary  255.0 MB  B  f  ext2    /boot        a        x
  x        >     #2  primary    2.3 GB     f  ext3    /            a        x
  x        >     #5  logical  246.7 MB     f  swap    swap         a        x
  x        >     #6  logical    5.2 GB     f  ext3    /home        a        x
  x                                                                a        x
  x        Undo changes to partitions                                       x
  x        Finish partitioning and write changes to disk                    x
  x                                                                         x
  x     <Go Back>                                                           x
  x                                                                         x
  mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

<F1> for help; <Tab> moves; <Space> selects; <Enter> activates buttons

Esa es una captura de la herramienta de particionado del instalador. Esas particiones las ha hecho el instalador de forma automática usando todo el espacio de un pendrive. Podemos realizar el particionado que queramos, el único requisito es que haya una partición para /boot en formato ext2 y al menos con 150 MB de espacio.

Aprovecho para reiterar mi recomendación de instalarlo usando una sd para la partición /boot y un disco externo para el resto de particiones.

4. Configurar U-boot para que arranque la instalación

Una vez finalizada la instalación, al reiniciar el sheeva debemos acceder de nuevo a la linea de comandos de U-boot para que arranque automáticamente la instalación de debian. De nuevo los comandos dependen de donde está situada la partición /boot.

En un disco USB:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_usb 'usb start; ext2load usb 0:1 0x01100000 /uInitrd; ext2load usb 0:1 0x00800000 /uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_usb; bootm 0x00800000 0x01100000'
saveenv

Si a pesar de todas las recomendaciones, tenemos la partición /boot en un disco duro USB, como no siempre se reconoce el disco a la primera podemos variar la linea del comando bootcmd añadiendo al final "; reset" de manera que si falla el arranque el sheeva se reinicie una y otra vez hasta que sea reconocido y la carga se haga correctamente.

setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_usb; bootm 0x00800000 0x01100000'; reset

En una tarjeta MMC/SD:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_mmc 'mmcinit; ext2load mmc 0 0x01100000 /uInitrd; ext2load mmc 0 0x00800000 /uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x00800000 0x01100000'
saveenv

También se han reportado algunos errores para iniciar de esta manera siendo necesario lanzar mmcinit dos veces para que el dispositivo arranque, (en mi caso no se ha dado este problema en ninguna ocasión)
Si tu dispositivo no arranca modifica la lina del bootcmd_mmc para que ejecute dos veces mmcinit:

setenv bootcmd_mmc 'mmcinit; mmcinit; ext2load mmc 0 0x01100000 /uInitrd; ext2load mmc 0 0x00800000 /uImage'

en caso de que la partición de arranque estuviera en un disco eSATA sería así:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_sata 'ide reset; ext2load ide 0:1 0x00800000 /uImage; ext2load ide 0:1 0x01100000 /uInitrd'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_sata; bootm 0x00800000 0x01100000'
saveenv

NOTA: En todos los casos se considera que /boot está en una partición aparte y además en la primera partición del dispositivo (usb 0:1 ide 0:1). Si no tenemos una partición /boot y boot es una carpeta dentro de la raiz, deberemos poner /boot/uImage en los comandos en lugar de /uImage.

Con esto ya tenemos ya tenemos todo configurado para que el sheeva arranque automáticamente con la instalación de debian.
Para arrancar ahora mismo podemos hacer dos cosas, ejecutar el comando reset para que se reinicie el sheeva y cargue el solito o ejecutar el comando de arranque para arrancar sin reinicar:

run bootcmd

5. Post-instalación. Generación de uInitrd y uImage tras una actualización

Tras una actualización del kernel, es posible que se descarguen nuevas imágenes del kernel y del initrd en /boot. Sin embargo, como hemos visto anteriormente el Uboot no es capaz de trabajar diréctamente con dichas imágenes, sino que hay que manipularlas un poco para que incluyan una cabecera especial.

Instalaremos pues el paquete uboot-mkimage con aptitude para después, estando en /boot, generar las imágenes como sigue:

mkimage -A arm -O linux -T kernel  -C none -a 0x00008000 -e 0x00008000 -n Linux-2.6.32-5 -d vmlinuz-2.6.32-5-kirkwood uImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d initrd.img-2.6.32-5-kirkwood uInitrd

Fotos del exterior y del interior del modelo del sheeva utilizado para la instalación y pruebas para la redacción de este artículo:
http://www.cyrius.com/debian/kirkwood/sheevaplug/gallery.html
Fuente:
http://www.cyrius.com/debian/kirkwood/sheevaplug/install.html
http://blog.bofh.it/debian/id_265