Personalizarse un RepairDisk: el camino hacia LFS

Muchas son las veces que hemos tenido que reparar un sistema desde un LiveCD, y en algĂșn punto del proceso nos hemos visto faltos de alguna herramienta y al querer instalarla, el SO del LiveCD nos dice que se ha quedado sin espacio y ajo y agua (a joderse y aguantarse).

Este problema realmente me ha venido a causa de adentrarme en LFS (LinuxFromScratch), que es una guĂ­a (NO una distribuciĂłn propiamente dicha) para instalarse un Linux personalizado. El punto de esta «distribuciĂłn» es que desde cualquier LiveCD, y con las herramientas adecuadas, te bajes el cĂłdigo del kernel y demĂĄs herramientas para montarte tu propio sistema (compilĂĄndolo todo poco a poco). Si se quiere seguir la guĂ­a paso a paso hacen falta varias herramientas y compiladores, y no hay ningĂșn liveCD con todo, asi que toca personalizarse uno.

Pues manos a la obra. Usaremos el SystemRescueCD, que ofrece un entorno bastante completo basado en Gentoo.

En nuestro ejemplo (instalarse un Linux desde cero siguiendo el libro Linux From Scratch) nos faltan los programas Bison y Makeinfo, asĂ­ que vamos a crear una nueva imagen ISO de este disco pero con las nuevas herramientas.

AVISO: Gentoo es una distribuciĂłn que compila in situ todos los paquetes que se desea instalar, por lo tanto el proceso de agregar y actualizar programas es lento.

Aunque se usa un administrador de paquetes (como el apt-get de Debian), en vez de bajarse paquetes se descarga el cĂłdigo fuente para compilarlo en tu mĂĄquina.

Para el proceso se va a necesitar una particiĂłn Linux (ext4 por ejemplo) con al menos 1.5G libres, aunque se aconseja mĂĄs. Si no querĂ©is toquetear vuestras particiones, haced uso de una mĂĄquina virtual. Eso sĂ­, es aconsejable que la particiĂłn tenga varios gigas ya que durante los procesos de compilaciĂłn, instalaciĂłn, sincronizaciĂłn de repositorios
 se necesita espacio temporal; aconsejo usar una particiĂłn de 8G + swap de 2G (con 4G+1G deberĂ­a bastar, pero asĂ­ aseguramos, si falta RAM/swap el proceso serĂĄ aĂșn mĂĄs lento).

Suponiendo que habéis creado una måquina virtual con un disco de 10G, la iniciåis diciéndole que arranque desde el SystemRescueCd recién bajado. Una vez dentro particionamos con fdisk (si habéis iniciado la sesión gråfica podéis hacerlo con gparted, pero el propósito de este post es enseñar el uso de herramientas båsicas). fdisk es un comando interactivo:

  • con la opciĂłn «n» creamos una nueva particiĂłn
  • con la opciĂłn «t» cambiamos el tipo de sistema de ficheros que irĂĄ en la particiĂłn
  • con la opciĂłn «w» escribimos en el disco
  • con la opcion «q» salimos sin escribir los cambios

Cuando usamos la opciĂłn «n» nos darĂĄ varias opciones, todo el tiempo usaremos default, excepto a la hora de establecer el Ășltimo sector en la primera particiĂłn, que tendremos que escribir «+8G», indicĂĄndole asĂ­ al programa que queremos que nuestra particiĂłn ocupe 8GB.

A la hora de crear la segunda partición usaremos las opciones por defecto ya que el resto del espacio serå ocupado. Ademås para indicarle a fdisk que la segunda partición serå de tipo swap, hay que usar la opción «t» (el hexcode para swap es 82). La interfaz tiene esta pinta:

% fdisk /dev/sda
Orden (m para obtener ayuda):

Una vez terminado todo, usamos la opción «w» para escribir los cambios en el disco y salir.
Ahora toca formatear las particiones. Empezaremos por la swap para asĂ­ hacer uso de ella inmediatamente:

% mkswap /dev/sda2
% swapon /dev/sda2

Ya tenemos formateada la particiĂłn swap, y con el comando swapon hemos empezado a usarla. Ahora formateamos en ext4 la primera particiĂłn:

% mkfs.ext4 /dev/sda1

Podemos empezar a seguir los pasos descritos en http://www.sysresccd.org/Sysresccd-manual-en_How_to_personalize_SystemRescueCd, aquĂ­ los traduzco/describo con alguna que otra anotaciĂłn.

Montamos la partición en su sitio (el LiveCD ya viene preparado con una carpeta /mnt/custom donde deberå montarse la partición en la que haremos los cambios oportunos). Ademås después de montar deberemos extraer los archivos del disco, esto se consigue con un script que ya viene preparado. El script tardarå un poco (ya que vuelca cientos de megas de memoria), si queréis comprobar que efectivamente estå funcionando, pasaros a otra terminal (con Alt+F4 por ejemplo) y haced un df -h.

% mount /dev/sda2 /mnt/custom
% /usr/sbin/sysresccd-custom extract

Si ahora navegas dentro de /mnt/custom/customcd, veras varias carpetas. En /mnt/custom/customcd/files se encuentra el sistema de ficheros raíz. Ahora toca chrootear el futuro nuevo sistema. Aquí voy a poner los comandos, para mås información sobre chroot podéis mirar este tutorial que escribí hace un mes

% mount -o bind /proc /mnt/custom/customcd/files/proc
% mount -o bind /dev /mnt/custom/customcd/files/dev
% mount -o bind /sys /mnt/custom/customcd/files/sys
% chroot /mnt/custom/customcd/files /bin/bash
# gcc-config $(gcc-config -c)

Ya estamos en el sistema chrooteado, lo que serĂĄ el sistema del LiveCD una vez lo booteemos. Instalaremos los paquetes que faltan (bison y texinfo) usando el comando emerge (que maneja la paqueterĂ­a de portage de gentoo).

Primero sincronizamos el ĂĄrbol de portage (el equivalente a apt-get update)
# emerge-webrsync NOTA: usamos este comando en vez de «emerge –sync» por ser mĂĄs rĂĄpido, ya que descarga un paquete tar de la web. Es necesario este paso, porque si no emerge lo harĂĄ automĂĄticamente con emerge –sync, haciĂ©ndose mĂĄs lento.

Después de sincronizar el portage tree ya podemos proceder a instalar los paquetes:

# emerge sys-devel/bison
# emerge sys-devel/texinfo
bison tardarĂĄ un rato en compilarse, sed pacientes

Salimos de chroot:# exit

Desmontamos «/proc» para que los nuevos paquetes instalados se almacenen en el squashfs. También desmontamos «/dev» y «/sys» para que no se nos olvide luego
% umount /mnt/custom/customcd/files/proc
% umount /mnt/custom/customcd/files/dev
% umount /mnt/custom/customcd/files/sys

Como ya tenemos el nuevo squash file system preparado, lo creamos con el siguiente comando
% /usr/sbin/sysresccd-custom squashfs
Si queremos agregar algĂșn archivo en la imagen ISO pero queremos que estĂ© fuera del squashfs, debemos meterlo en la carpeta «/mnt/custom/customcd/isoroot»

% cp -a my-files /mnt/custom/customcd/isoroot

En este punto, la guía oficial te dice que puedes establecer el keymap para bootear con un teclado predeterminado (por ejemplo «es» para teclados españoles). Pero haciendo varias pruebas, el script que usan a mí no me ha funcionado y me resultaba en un error a la hora de cargar el kernel, asi que me saltaré este paso.

LlegĂł el momento glorioso, ÂĄya podemos generar la nueva imagen ISO con nuestro sistema customizado!
% /usr/sbin/sysresccd-custom isogen my_srcd
«my_srcd» es el nombre que le damos al volumen, podĂ©is llamadlo como querĂĄis. La imagen queda guardada en «/mnt/custom/customcd/isofile», ademĂĄs tambiĂ©n se genera un archivo .md5 

Si eståis trabajando en un disco virtual, queda el paso crucial: extraer la imagen ISO del sistema virtual. Hay diversas formas de hacerlo, yo os explicaré una sencilla (en VirtualBox) para no tener que instalar «guest additions» ni nada por el estilo.
Usaremos el cliente de para obtener el archivo a travĂ©s de un tĂșnel ssh. Para ello primero debemos configurar el sistema invitado con una contraseña de root. El servidor ssh se inicia automĂĄticamente, aĂșn asi lo reiniciamos por si acaso.
% passwd
% /etc/init.d/sshd restart

Nos toca configurar el port forwarding de la mĂĄquina virtual. En VirtualBox se hace de la siguiente manera:

  1. Accedéis a la configuración de la måquina virtual
  2. En el apartado de red tenéis ya configurado un adaptador en NAT
  3. Buscad la opciĂłn de reenvĂ­o de puertos
  4. AgregĂĄis una nueva regla, con los Ășnicos parĂĄmetros de «puerto anfitrion» y «puerto invitado»
  5. anfitriĂłn=3022 e invitado=22

Con esto hemos conseguido que el puerto 3022 de nuestro PC sea el 22 de la mĂĄquina virtual. Iniciamos el cliente de Filezilla:

  1. En el parĂĄmetro servidor escribimos: sftp://localhost
  2. En el parĂĄmetro nombre de usuario escribimos: root
  3. En el paråmetro contraseña metemos la que usamos en «passwd»
  4. En el parĂĄmetro puerto escribimos: 3022
  5. Click en «Conexión råpida»

Si todo ha ido bien a la izquierda podremos navegar en nuestro PC y a la derecha en la måquina virtual. Basta con acceder (en la måquina virtual) a la carpeta «/mnt/custom/customcd/isofile» y arrastrar la imagen ISO al lugar que deseamos en nuestro PC.

¡Enhorabuena! Si todo ha ido bien ya tienes listo tu imagen ISO con un SystemRescueCD personalizado y listo para bootear desde un CD, USB