"Después del juego es antes del juego"
Sepp Herberger

sábado, 22 de junio de 2013

Como crear un CD con SystemRescueCD y Clonezilla juntos y revueltos.

Dos de las herramientas favoritas de los administradores Linux son SystemRescueCD y Clonezilla. Estas están construidas sobre dos sistemas distintos: la primera con Gentoo y la segunda con Ubuntu. Eso hace que no sea sencillo poder juntar ambas en una sola imagen de CD o pendrive pero, como veremos en esta entrada, no es tarea imposible.

Existe desde hace tiempo una solución parcial a este problema: el Clonezilla-SysRescCD, que lo que hace es meter en una imagen de CD un arranque dual, que nos permite seleccionar en el arranque entre SystemRescueCd y Clonezilla. Esa no es mi idea: yo quiero ambas utilidades dentro del mismo sistema, con una sola imagen de arranque.

Para ello tomaremos la imagen de SystemRescueCD, en la que integraremos, como si injertasemos un cerezo, los scripts que constituyen Clonezilla. Empezamos pues descargando dicha imagen (en mi caso, la version 3.7.0).

Asimismo necesitamos también la imagen de Clonezilla en su versión DRBL, en concreto drbl-live-xfce-2.1.0-12-i486.zip desde http://sourceforge.net/projects/drbl/files/drbl_live_stable

Una vez finalizadas las descargas, procedemos a extraer el contenido de los ficheros. No nos hace falta ninguna herramienta especializada para ello: el explorador de archivos de Gnome/MATE permite extraer el contenido de ficheros ISO como si fueran zip o tar.gz, eligiendo la opción "Extraer ..." en el menú contextual de ambos ficheros.

Dentro de la carpeta donde se ha extraído el SystemRescueCD encontramos el fichero sysrcd.dat, que contiene el sistema de archivos root del Linux. Este fichero contiene un sistema de ficheros en formato squashfs, en lugar de los mas usuales para nosotros ext3 o ext4. Al ser squashfs un sistema de ficheros de sólo lectura, no podemos montarlo directamente y operar sobre él. Los pasos a seguir son para poder trabajar con su contenido son:

1) Descomprimirlo y borrar el sysrcd.dat original. Esto lo hacemos con la utilidad unsquashfs, incluida en el paquete squashfs-tools. Aviso antes de nada de que todo esto debemos hacerlo como usuario root. Los comandos son:

 # mkdir ~/trabajo  
 # cp sysrcd.dat ~/trabajo  
 # cd ~/trabajo  
 # unsquashfs sysrcd.dat  
 # rm sysrcd.dat   

Esto creará un directorio squashfs-root con el contenido del fichero sysrcd.dat. La acción de borrar el sysrcd.dat es para evitar que al recomprimir el sistema de ficheros de nuevo esta operación nos dé errores, ya que intentaría crear el sistema nuevo agregando todo al antiguo.

2) Hacer los cambios, como veremos a continuación.

3) Recomprimirlo y recrear el fichero.

 # mksquashfs squasfs-root sysrcd.dat  
 # md5sum sysrcd.dat > sysrcd.md5  

Un vez hecho el paso 1, ya tenemos el directorio squashfs-root con el contenido de SystemRescueCD. Vamos ahora a meter dentro el Clonezilla, a ver que sale.

Primero tenemos que descomprimir el fichero de Clonezilla descargado y buscar su sistema de ficheros root. Se encuentra dentro del fichero filesystem.squashfs que, ¡oh, sorpresa! está también en formato squashfs. Bueno, ya hemos visto como descomprimirlo en el paso 1.

Si miramos dentro del sistema de ficheros de Clonezilla, vemos que es una estructura normal de sistema de ficheros Linux (sus directorios etc, bin, usr, ...) y la primera tentación es copiar todo esto dentro del sistema de ficheros de SystemRescueCD. El resultado sería catastrófico: mezclar por completo un Gentoo con un Ubuntu puede dar cualquier cosa, pero nunca será buena.

Hay que ser mas preciso e ir directamente a lo que hace a Clonezilla ser Clonezilla. Clonezilla está formado por un conjunto de utilidades estándar de Linux para trabajar con discos, particiones e imágenes de los mismos, y una serie de scripts que le dan coherencia al proceso. Nuestro objetivo son los scripts, ya que las utilidades en su mayor parte están ya dentro del SystemRescueCD.

¿Dónde están dichos scripts?. Pues dentro de Clonezilla, en las ruta /usr/share/drbl, /usr/sbin y alguna más. Tan solo debemos coger esos directorios y copiar lo que nos interese de ellos en la ruta /opt/drbl de la imagen de SystemRescueCD. Los pasos serían:

  # cd <directorio donde hemos descomprimido el squashfs de clonezilla>   
  # mkdir -p ~/trabajo/squashfs-root/opt   
  # cp -r usr/share/drbl ~/trabajo/squashfs-root/opt/  
  # cp usr/sbin/clonezilla ~/trabajo/squashfs-root/opt/drbl/sbin/clonezilla  
  # cp usr/sbin/drbl* ~/trabajo/squashfs-root/opt/drbl/sbin/  
  # cp -r etc/drbl ~/trabajo/squashfs-root/etc  

Bueno, si el mundo fuese perfecto ya estaría todo hecho. Solo habría que recrear el sysrcd.dat, quemar la imagen ISO nueva y arrancar con la flamante distribución híbrida. Pero no es tan fácil: Ubuntu y Gentoo tienen muchas herramientas en común, pero existen algunas diferencias en los nombres de los ejecutables y Clonezilla además usa algunos comandos que no vienen con SystemRescueCD.

¿Cómo he averiguado esto?. Pues con prueba y error: quemando la imagen en un pendrive, arrancando con ella e intentando hacer un ciclo completo de clonación-restauración. La imagen en cuestión era la mas variada que tenía a mano: un arranque dual con Windows XP en formato NTFS, Debian Squeeze en formato ext3 y una partición de swap. Los errores han empezado a cantar inmediatamente. Vamos a ver que nos hace falta para que nuestros scripts Clonezilla injertados en el SystemRescueCD se sientan como en casa.

No lo he dicho hasta ahora, pero antes de nada debemos tener claro como lanzar el script principal de Clonezilla una vez tenemos la imagen arrancada. Esto se hace con:

/opt/drbl/sbin/clonezilla  

Enumeremos la lista de problemas encontrados y las soluciones que les he ido dando:

1) Nada mas arrancar, el script de Clonezilla intenta configurar la red. Hagamos lo que hagamos (dhcp, dirección estática, etc), el script se queda colgado, dejando noqueado el sistema operativo. Que raro. Bueno, puede tener su explicación en que el sistema de configuración de la red en un Gentoo y en un Ubuntu son bastante diferentes. Podríamos modificar los scripts para que Clonezilla intente configurar la red con los comandos de Gentoo, pero...¿para que carajo queremos que Clonezilla configure la red si SystemRescueCD ya la tiene configurada desde el arranque?. Lo lógico sería forzar a Clonezilla a saltarse esa tarea ya realizada.

¿Y dónde configura Clonezilla la red?. Pues en opt/drbl/sbin/ocs-functions, en concreto dentro de la función network_config_if_necessary() , que quedaremos vacía editando dicho script, tal que así:

 network_config_if_necessary() {  
 }   

Lo cual hacemos con:

nano ~/trabajo/squashfs-root/opt/drb/sbin/ocs-functions

Con esto, Clonezilla no intentará configurar nuestra red y asumirá que ya está configurada, lo cual es cierto.

2) Durante la restauración de las imágenes Linux, se producen errores indicando que no existe partclone.ext3. Si husmeamos con find | grep en SystemRescueCD vemos que tiene un partclone.extfs, pero no partclone.ext3. Mirando en Clonezilla, en su directorio usr/sbin vemos:

 partclone.ext2 -> partclone.extfs  
 partclone.ext3 -> partclone.extfs  
 partclone.ext4 -> partclone.extfs  
 partclone.ext4dev -> partclone.extfs  
 partclone.extfs  

Vamos, que Clonezilla tiene partclones variados, pero todos acaban apuntando a partclone.extfs. Lo único que hay que hacer en SystemRescueCD es imitar esta estructura:

 # cd ~/trabajo/squasfhs-root  
 # cd usr/sbin
 # ln -sf partclone.extfs partclone.ext2  
 # ln -sf partclone.extfs partclone.ext3  
 # ln -sf partclone.extfs partclone.ext4  
 # ln -sf partclone.extfs partclone.ext4dev  

3) Clonezilla necesita un directorio /home/partimag como punto de montaje para las imágenes. El SystemRescueCD no lo tiene, asi que hay que crearlo a mano:


 # mkdir ~/trabajo/squashfs-root/home/partimag



4) Por último, también nos da problemas la restauración de imágenes Linux al intentar utilizar el comando mkswap-uuid para restaurar la partición de swap. Si buscamos este comando en SystemRescueCD vemos que no existe. ¿Qué hacemos?. Pues copiarlo de Clonezilla a SystemRescueCD, así, tal cual.

 # cd <directorio donde hemos descomprimido el squashfs de clonezilla>  
 # cp -r sbin/mkswap-uuid ~/trabajo/squashfs-root/sbin/mkswap-uuid  

Con estos problemas resueltos, ya podemos regenerar el sysrcd.dat como expliqué mas arriba en el paso 3, crear el sysrcd.md5 correspondiente y meter ambos dentro de la ISO de SystemRescueCD, borrando previamente los sysrcd.* originales.

¿Y cómo metemos ficheros dentro de una imagen ISO?. Pues con ISO Master. Una vez generada la ISO, tenemos tres opciones:

1) Quemarla a un CD. Vaya desperdicio.

2) Copiarla a un pendrive para arrancar desde él. Aquí explican como.

3) Meterla en un servidor de arranque PXE, para arrancarla por red y no tener que usar varios pendrives si queremos restaurar múltiples equipos a la vez. Estos dos enlaces explican las ideas generales:
  • Aquí viene como arrancar SystemRescueCD por PXE. En especial me gusta el arranque montando el sistema root sobre NBD, mas rápido y apto para equipos antiguos o con poca memoria que el basado en NFS o en enviar la imagen del sistema de ficheros completa por TFTP o HTTP.
  • Si estamos en un entorno donde la configuración DHCP está almacenada en un árbol Ldap y no podemos trastear mucho con ella, como sucede en los IES de Extremadura, este enlace explica como montar un servidor TFTP integrado en nuestro DHCP y Ldap. Es para Clonezilla, pero adaptarlo a SystemRescueCD es trivial.

NOTA FINAL: aquí están enumerados y resueltos los problemas que he encontrado con las imágenes que uso habitualmente: arranques duales con NTFS y ext3. Si encuentras otros problemas al clonar-restaurar, házmelo saber y nos ponemos manos a la obra para arreglarlos.

DESCARGAR: desde este enlace se puede descargar la imagen ISO realizada según las instrucciones de esta entrada del blog.

1 comentario:

  1. Gracias por la info, Muy buena, acabo de re-crear un sysrcd.dat con las últimas isos de las distribuciones (aun no la pruebo porque recién estaba terminando de "squashafear" el sysrcd.dat y recordé que podía poner un acceso directo al clonezilla en el escritorio y a reiniciar el proceso XD), ya la agrego a mi superpendrive y te aviso

    ResponderEliminar