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โ€ฆ


Deja tu 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.

      Leo dijo

    Que buena guรญa, algo complicada pero muy รบtil.
    Buen aporte.

      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..

      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