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…



Administrador de sistemas y desarrollador de software. Fanático de la música y la tecnología. Usuario de GNU/Linux desde hace 10 años.

3 comentarios

  1.   Leo dijo

    Que buena guía, algo complicada pero muy útil.
    Buen aporte.

  2.   Leproso_Ivan dijo

    Luego con un poco más de tiempo, y sin tanta molestia en los ojos, lo leeré a fondo. Parece muy útil, y por demás interesante..

  3.   Carlos Sanchez dijo

    Hola woqer, muy buen post!

    llevo algunos años con LFS y me he creado mi propia iso que te puede servir, tiene todo lo necesario para compilar ya que es un LFS. 😀 espero te sea de utilidad

    http://vegnux.org.ve/files/isos/neonatox-06.2rc6.linux-i686-xfce4.iso

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.