En este artículo se explica como remasterizar (personalizar) la distribución (K)Ubuntu Dapper GNU/Linux. Es poco más que una traducción de los artículos
Requisitos
Antes de nada, debemos asegurarnos de que tenemos todo lo necesario:
- unos 3-5 GB de espacio libre en disco
- un CD o imagen ISO de (K)Ubuntu Dapper (http://releases.ubuntu.com/dapper/)
- squashfs-utils y mkisofs instalados
- un núcleo que admita squashfs (como el que viene de serie en Kubuntu Dapper
- qemu instalado, para probar las imágenes que creemos
Extracción del CD
Cargamos el módulo squashfs:
$ sudo modprobe squashfs
Montamos la imagen ISO o el CD-ROM
$ sudo mount -o loop kubuntu-6.06-desktop-i386.iso /mnt
ó
$ mount /cdrom
Extraemos el contenido de la imagen en un directorio llamado «extract-cd». En mi caso lo hago en una partición aparte (hdb1), que debe estar montada de modo que permita la ejecución de binarios.
$ mkdir /media/hdb1/extract-cd
$ rsync –exclude=/casper/filesystem.squashfs -ax /mnt/ /media/hdb1/extract-cd
El CD contiene varios subdirectorios, incluyendo uno con una selección de programas libres para Windows. Si lo deseamos podemos borrarlo, ahorrando unos 95 MB.
$ sudo rm -rf /media/hdb1/extract-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 kubuntu-live, pero no lo necesitamos para nada)
# aptitude purge language-pack-ar language-pack-ar-base 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 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 segudo 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-desktop
rm /tmp/filtro
Comprimimos el sistema de ficheros (esto puede tomar 15-20 minutos, así que podemos salir a echar un café)
$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs
Calculamos las sumas MD5
$ (cd extract-cd && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
Y creamos la imagen ISO
$ 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