Creación de una distribución basada en Ubuntu

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

2 comentarios en “Creación de una distribución basada en Ubuntu

  1. Hola Quique,

    estoy creando un planeta BSD, donde recopilare todos los posts, articulos
    y noticias sobre los BSD, en español, y me gustaria poder contar con
    tus articulos.

    Solo tendrias que pasarme tu dirección de los feed(rss), para que los
    sindique en mi planeta BSD.

    El planeta no llevara publicidad, porque yo no quiero ganar nada con esto
    (no seria justo), y solo enlazare un extracto de los articulos o noticias,
    para leer el articulo completo o dejar algun comentario, tendran que irse
    al articulo original de PcBSD.es

    Ya me diras algo,

    Saludos,

    Jaime.

    PD: Si conoces algún blog que hable de los BSD, y este en español,
    pasarme su link.

Los comentarios están cerrados.