Crear una versión personalizada de Ubuntu (Dapper, en este ejemplo)

En este artículo se explica como remasterizar (personalizar) una distribución de Linux, que en este caso será Ubuntu Dapper GNU/Linux, pero se puede aplicar también a otras distros, sobre todo si están basadas en Debian.

Antes de comenzar, hay que asegurarse de cumplir con los requisitos:

  • Unos 3-5 GB de espacio libre.
  • CD o imagen ISO de Ubuntu Dapper (http://releases.ubuntu.com/dapper/)
  • Tener instalados los paquetes squashfs-utils y mkisofs.
  • Asegurarse de que el kernel admite squashfs (como el que viene de serie en Kubuntu Dapper).
  • qemu o virtualbox, para ver si las imágenes que creemos funcionan correctamente sin tener que grabarlas

Primer paso; extracción del contenido del CD

Lo primero es cargar el módulo squashfs:

$ sudo modprobe squashfs

Después, hay que montar la imagen ISO o el CD-ROM:

$ sudo mount -o loop kubuntu-6.06-desktop-i386.iso /mnt

o bien:

$ mount /cdrom

Ahora pasamos a extraer el contenido del CD / imagen en un directorio, (por ej: /media/contenido-cd/). Si vas a usar una partición aparte, asegúrate de que esté montada de forma que permita la ejecución de binarios.

$ mkdir /media/contenido-cd
$ rsync –exclude=/casper/filesystem.squashfs -ax /mnt/ /media/contenido-cd

El CD contiene varios subdirectorios, incluyendo uno con programas libres para Windows. Podemos borrarlo tranquilamente, ahorrando casi 100 MB.

$ sudo rm -rf /media/contenido-cd/programs

Igualmente podemos borrar el directorio “disctree”.

Extracción del sistema

Montamos el sistema de ficheros comprimido con squashfs:

$ sudo mkdir /mnt2

$ sudo mount -t squashfs -o loop /mnt/casper/filesystem.squashfs /mnt2/

Extraemos el contenido del squashfs en un directorio llamado edit

$ mkdir /media/hdb1/edit

$ sudo cp -a /mnt2/* /media/hdb1/edit/

Ya podemos desmontar el CD y el sistema comprimido:

sudo umount /mnt2

sudo umount /mnt

sudo rmdir /mnt2

Personalización

Copiamos nuestro fichero /etc/resolv.conf para tener unos DNS que consultar al acceder a Internet:

$ sudo cp /etc/resolv.conf edit/etc/

Finalmente entramos en nuestro nuevo sistema:

$ sudo chroot edit

# mount -t proc proc proc

# mount -t sysfs sys sys

Ahora podemos hacer todos los cambios que queramos. Podemos empezar editando el fichero /etc/apt/sources.list para modificar los repositorios, actualizar, y añadir / quitar paquetes. Por ejemplo, podemos eliminar los paquetes de idioma que no nos interesen (esto elimina también el paquete ?ubuntu-live, o ?ubuntu-desktop, pero no los vamos a necesitar).

# aptitude purge language-pack-ar language-pack-ar-base language-pack-kde-zh \
 language-pack-bn language-pack-bn-base language-pack-de language-pack-de-base \
 language-pack-fr language-pack-fr-base language-pack-hi language-pack-hi-base \
 language-pack-nl language-pack-nl-base language-pack-kde-ar \
 language-pack-kde-ar-base language-pack-kde-bn language-pack-kde-bn-base \
 language-pack-kde-de language-pack-kde-de-base language-pack-kde-fr \
 language-pack-kde-fr-base language-pack-kde-hi language-pack-kde-hi-base \
 language-pack-kde-nl language-pack-kde-nl-base language-pack-kde-zh-base \

e instalar otros idiomas que sí nos interesen:

#  aptitude install language-pack-an language-pack-an-base

Limpieza

Borramos los ficheros que se hayan ido creando

$ sudo rm ~/.bash_history  ~/.viminfo [etc]
$ sudo rm -rf /tmp/*

Los paquetes deb que hayamos descargados y estén en la cache:

$ sudo  apt-get clean

Y finalmente desmontamos los sistemas de ficheros especiales y salimos del chroot

$ sudo umount proc
$ sudo umount sys
$ exit

Preparación del CD

Podemos editar el fichero extract-cd/isolinux/isolinux.cfg y añadir

preseed/locale=es_ES kbd-chooser/method=es

a las entradas append para que el CD arranque directamente en castellano.

Le damos un nombre a la imagen en extract-cd/README.diskdefines

$ sudo vim extract-cd/README.diskdefines

Regeneramos el manifest (lista de los paquetes del sistema):

$ chmod +w  extract-cd/casper/filesystem.manifest
$ sudo chroot edit dpkg-query -W \
 –showformat=’${Package} ${Version}n’ >  extract-cd/casper/filesystem.manifest

Cuando se ejecuta el instalador del CD de escritorio, lo copia todo al sistema objetivo, pero después hace limpieza y elimina los paquetes que no estén en un segundo fichero llamado filesystem.manifest-desktop. Así se evita que en la instalación se incluya el propio instalador, por ejemplo.

Podemos filtrar el manifest con un script de sed. Creamos un fichero /tmp/filtro con este contenido:

/casper/d
/libdebian-installer4/d
/os-prober/d
/ubiquity/d
/ubuntu-live/d
/user-setup/d

y ejecutamos

cd /media/hdb1/extract-cd/casper
sed -f /tmp/filtro < filesystem.manifest > filesystem.manifest-desktop
rm /tmp/filtro

Comprimimos el sistema de ficheros (cosa que puede tardar bastante, así que mejor ponerse a hacer otra cosa y volver 20 minutos más tarde):

$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs

Calculamos las sumas MD5

$ (cd extract-cd && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)

Para crear la imagen ISO hay que hacer lo siguiente:

$ cd extract-cd

$ mkisofs -r -V “MI_DISTRO” -cache-inodes -J -l -b isolinux/isolinux.bin \
 -c isolinux/boot.cat -no-emul-boot \
 -boot-load-size 4 -boot-info-table -o ../midistro.iso .

Por último, podemos probar la imagen de CD creada con el emulador QEMU

$ qemu -cdrom cdname.iso -boot d

Referencias:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: