# Personalizar distribución de Ubuntu Live CD

Existen varias formas de personalizar una distribución Linux (o como se le debería llamar realmente, GNU/Linux), pero este artículo en particular se enfoca en personalizar la distribución Ubuntu en su versión Live CD.
Existen entonces, varias aplicaciones para realizar este proceso, como Reconstructor o UCK (Ubuntu customization kit) .
Nosotros no utilizaremos tales aplicaciones, ya que le quitarían la diversión al asunto, por lo tanto veremos una serie de pasos, los cuales son una mezcla de métodos recolectados por varios foros y tutoriales, más aportes de mi parte para facilitar la creación de la distro, pudiendo personalizarla utilizando el entorno GNOME, y no solo mediante el uso de la consola.
Por último, vale aclarar que si bien no es un proceso muy complicado, tampoco es nada trivial, pero creanme, se adquieren invaluables conocimientos y una gran satisfacción !

# Nomenclatura

Todo texto que aparezca en color Verde hace referencia a un comando de consola (bash).

# Plan de trabajo

Los pasos generales para crear una distro de Ubuntu Live CD personalizada son los siguientes:
* Obtener la imagen (.iso) del Live CD de Ubuntu (para este documento se utilizó la versión 8.04).
* Descomprimir dicha imagen
* Crear una jaula chroot con lo necesario para personalizarla
* Personalizar la distro
* Comprimir la nueva distro personalizada
* Crear la imagen (.iso) de la nueva distro personalizada

# Preparar el entorno de trabajo

Lo primero que tendremos que hacer es conseguir la imagen del Live Cd, la cual se puede descargar desde la página de Ubuntu
Luego necesitaremos instalar el squashfs para así poder descomprimir y comprimir la distro.
Para ello ejecutaremos el siguiente comando en la consola
sudo apt-get install squashfs-tools genisoimage qemu kvm
Ahora cargamos el modulo de squashfs
sudo modprobe squashfs
Nos crearemos una carpeta con el nombre que queramos
mkdir UbuntuPersonalizado
cd UbuntuPersonalizado
Esta carpeta que acabamos de crear debe contener la imagen del Ubuntu.
Una vez hecho esto debemos crear un directorio de trabajo y montar la imagen de Ubuntu
NOM_IMAGEN="ubuntu-8.04.1-desktop-i386.iso"
mkdir backupISO
cd backupISO
mkdir mnt
sudo mount -o loop ../$NOM_IMAGEN mnt
Seguido crearemos una carpeta llamada extraer-cd y extraeremos en ella el contenido de la imagen utilizando el comando rsync
mkdir extraer-cd
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extraer-cd
Montaremos ahora el sistema de archivos (filesystem) squashfs
mkdir squashfs
sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs squashfs
Por último extraeremos el contenido de squashfs en una nueva carpeta llamada edit
mkdir edit
sudo cp -a squashfs/* edit/
Preparado el entorno de trabajo, pasaremos ahora a preparar la jaula donde personalizaremos la distro.

# Preparar la "jaula" (chroot)

Una de las tantas modificaciones que podemos hacerle a la distro es la de instalar y/o remover aplicaciones.
Para ello necesitaremos copiar archivos de configuración necesarios para tener conexión a internet
sudo cp /etc/resolv.conf edit/etc/ sudo cp /etc/hosts edit/etc/
Ahora copiaremos los archivos necesarios para levantar el GNOME
sudo /etc/init.d/networking restart
sudo cp /etc/X11/xorg.conf edit/etc/X11/
Seguido montaremos los dispositivos necesarios para operar en la jaula y accederemos a ella.
sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
Ahora setearemos variables de sistema
export HOME=/etc/skel/
export LC_ALL=C
Seguidos estos pasos, nos encontraremos ahora dentro de la jaula, es decir, estamos en la distro que vamos a modificar. Notemos que es como estar en otro sistema operativo, ya que recordemos la jaula cambia el directorio raíz, y esta la hemos creado con la carpeta edit como el directorio raiz, recordando nuevamente que edit tiene el contenido del squashfs, es decir la distro del Ubuntu Live CD como si estuviese instalada.
Crearemos ahora los dispositivos genéricos
cd /dev/
MAKEDEV generic
En este punto solo nos restaría iniciar el gdm y empezar a personalizar la distro, pero previo a esto debemos crear un usuario para poder acceder al sistema, y más importante aún, permitirle a este ejecutar comandos como root, es decir, que pueda utilizar el comando sudo
Por lo tanto creamos un usuario cualquiera (heber en este caso)
adduser heber
Y le agregamos la posibilidad de ejecutar comandos como root. Esto lo logramos agregando una línea al archivo /etc/sudoers, el cual contiene los usuarios que pueden utilizar el comando sudo. Es importante aclarar que para editar este archivo, se recomienda utilizar el editor visudo, ya que a grandes rasgos controla que no cometamos error sintacticos, etc.
Para editar el archivo /etc/sudoers, ejecutamos el siguiente comando
visudo -f /etc/sudoers
Una vez abierto el visudo, agregaremos la siguiente línea debajo del bloque # User privilege specification, sabiendo que utilizar el editor visudo es igual que utilizar el editor vi, es decir, utiliza los mismos comandos de acciones, como por ejemplo ESC -> :wq para salir guardando los cambios
heber ALL=(ALL) ALL
Debería quedar algo así
# /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. #
Defaults env_reset
# Uncomment to allow members of group sudo to not need a password # %sudo ALL=NOPASSWD: ALL
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification root ALL=(ALL) ALL heber ALL=(ALL) ALL
Una vez creado el usuario y asignado el permiso para ejecutar comandos como root, solo resta iniciar el gdm
/etc/init.d/gdm start
Luego de ejecutado el comando anterior, se nos iniciará el GNOME en otra terminal (generalmente la 9 o 10), seguido aparecerá la ventana de inicio de sesión, donde elegiremos el idioma que queramos (Desde el menú Config ubicado en la esquina inferior izquierda), e iniciaremos sesión con el usuario creado (heber en este caso). Si cambiamos el idioma que venía por defecto (generalmente Inglés), nos preguntará si queremos que el nuevo idioma seleccionado (ejemplo: Español) sea el idioma por defecto, le diremos que si.

# Personalizar la distro

Iniciada la sesión del nuevo usuario nos encontraremos en un escenario muy familiar... el escritorio por defecto de Ubuntu. Aquí es donde empieza a jugar nuestra creatividad y comenzamos a personalizar la distro.
Qué podemos personalizar ?
* Aplicaciones: Las aplicaciones que tendrá la distro.
* GTK : La apariencia de las ventanas, cursores, iconos, fondo de escritorio, tipo de letra, apariencia del menú, etc.
* GDM : Se le llama GDM también a la ventana de Login, donde nos pide usuario y contraseña.
* Usplash : La pantalla que se muestra cuando se está cargando el sistema operativo y cuando este se está cerrando.
* Imagen del menú de instalación del Live CD
Se recomienda totalmente visitar el sitio gnome-look donde encontraremos una inmensidad de temas GTK, iconos, cursores, fondos de escritorio, temas GDM, Usplash, etc.
Es conveniente además, que todo archivo, ya sea un conjunto de iconos, cursores, fondo de escritorio, etc. que descargemos y utlizemos como tema, lo guardemos en una carpeta común a todos los usuarios, y desde allí los instalemos.
Por ejemplo, ejecutamos en consola el siguiente comando para inciar el nautilus como root
gksudo nautilus
Ahora creamos una carpeta llamada archivos-de-heber en /usr/share/. Esta carpeta es donde descargaremos y guardaremos todo lo relacionado con la parte visual de nuestra distro.

## Aplicaciones

Existen varias formas de instalar y/o desinstalar aplicaciones. Podemos hacerlo utilizando por ejemplo el Gestor de paquetes Synatpic ubicado en el menú Sistema -> Administración -> Gestor de paquetes Synatpic O mediante la consola utilizando el comando apt-get
Veamos como desinstalar el maravilloso editor gráfico GIMP (Solo a modo de ejemplo ya que realmente jamás lo eliminaría de mi sistema :) )
apt-get remove --purge gimp
La opción --purge, como dice el manual del apt-get borra los archivos de configuración de todos los paquetes que sean desinstalados
Ahora para instalar por ejemplo la aplicación nmap ejecutaríamos lo siguiente
apt-get install nmap

## GTK

Para personalizar todo lo que respecta a la visual del GNOME, abrimos la aplicación de apariencia ubicada en el menú Sistema -> Preferencias -> Apariencia
O mediante el comando
gnome-appearance-properties %F
Aqui podremos personalizar la apariencia de las ventanas, los iconos y cursones utilizados, el fondo de pantalla, etc.
* Como instalar un paquete de iconos y/o cursores ?
Obtenemos el conjunto de iconos o cursores empaquetados (en un .tar.gz por ejemplo) y lo arrastramos hasta la pestaña tema de la ventana de Apariencia.
* Puede llegar a ser muy interesante personalizar la barra del menú. Por ejemplo:
Nuestro menú ahora es transparente. Seguido agregamos todo lo que queramos oprimiendo el botón derecho sobre nuestro nuevo menú transparente y seleccionamos la opción Añadir al panel...

## GDM

Para la ventana de Login, nos descargamos una de gnome-look (recordando almacenarla en /usr/share/archivos-de-heber). Luego abrimos la aplicación Ventana de entrada ubicada en el menú Sistema -> Administración -> Ventana de entrada O mediante la consola
gksu /usr/sbin/gdmsetup
También podemos modificar el tema descargado, descomprimiendolo, modificando los archivos de su interior (por ejemplo, las imagenes), y volviendolo a comprimir.

## USplash

Para instalar un Usplash debemos descargar la aplicación startupmanager desde getdeb.net . Una vez descargado dicho instalador y previo a instalarlo, debemos ejecutar la aplicación Origenes del software ubicada en el menú Sistema -> Administración -> Origenes del software o mediante el comando
gksu --desktop /usr/share/applications/software-properties.desktop /usr/bin/software-properties-gtk
Esta aplicación es la encargada de decidir que repositorios de software estarán disponibles, por lo tanto debemos activar los repositorios universe y multiverse, luego oprimimos en Cerrar y por último nos aparecerá otra ventana informandonos que es necesario recargar la información sobre el software disponible, aquí oprimimos en Regargar.
Efectuados dichas actualizaciones, instalamos el startupmanager, el cual una vez instalado podremos acceder a él mediante el menú Sistema -> Administración -> Administrador de arranque o mediante el comando
su-to-root -X -c /usr/sbin/startupmanager
Una vez levantado el Administrador de arranque, efectuaremos los siguientes pasos:

## Últimas modificaciones

Debemos cambiarle el permiso a la carpeta archivos-de-heber para que cualquier nuevo usuario pueda tener acceso a ella, permitiendo que se muestre el fondo de pantalla seleccionado por ejemplo.
Para ello ejecutaremos el siguiente comando
sudo chmod -R 775 /usr/share/archivos-de-heber
Luego debemos copiar todo el contenido de nuestro Home al directorio /etc/skel. Este directorio contiene todos los archivos y directorios que se copiarán automáticamente al Home de un nuevo usuario. De esta manera haremos que todos los nuevos usuarios del sistema tengan la misma configuración que heber.
Para ello ejecutaremos el siguiente comando
sudo cp -r ~/. /etc/skel/.
Ahora solo resta desloguearnos (no apagar el sistema !) de la manera usual. Una vez nos abra la pantalla de Login, nos cambiamos a la terminal 7 (tty7) con la combinación de teclas ALT + F7
Nuevamente ahora en la tty7, pero dentro todavía de la jaula (en la consola), debemos eliminar todos los archivos inecesarios, así como eliminar también el usuario creado. Para ello haremos
sudo userdel -rf heber
Ahora removeremos la entrada de heber de la lista sudoers
visudo -f /etc/sudoers
Paramos el gdm, ya que no lo necesitaremos más
/etc/init.d/gdm stop
Y pasamos a eliminar archivos inecesarios, para así liberar también espacio
apt-get clean rm -rf /tmp/* rm -rf /etc/resolv.conf
Por último desmontamos y salimos de la jaula
umount /proc umount /sys exit
Para terminar lo que respecta a la personalización de la distro, solo nos queda cambiar la imagen del menú de instalación del Live CD.
Para ello debemos seguir los siguientes pasos
Obtener la nueva imagen (.png), renombrarla a splash.png y convertirla a .pnm utilizando el siguiente comando
pngtopnm splash.png > splash.pnm
Luego convertir la .pnm a .rle de la siguiente manera
ppmtolss16 "#000000=0" "#ffffff=7" < splash.pnm > splash.rle
Por último debemos copiar el archivo splash.rle a extraer-cd/isolinux

# Rearmar el CD

La parte de personalización de la distro ya está completa, solo resta rearmar el CD. Si instalamos o desinstalamos aplicaciones, debemos entonces regenerar el Manifiesto, que en síntesis indica las aplicaciones que contiene la distro. Para ello haremos los siguiente
echo regen manifs chmod +w extraer-cd/casper/filesystem.manifest sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extraer-cd/casper/filesystem.manifest sudo cp extraer-cd/casper/filesystem.manifest extraer-cd/casper/filesystem.manifest-desktop sudo sed -i '/ubiquity/d' extraer-cd/casper/filesystem.manifest-desktop
Una vez regenerado el manifesto, debemos comprimir el filesystem de la siguiente manera
sudo rm extraer-cd/casper/filesystem.squashfs
sudo mksquashfs edit extraer-cd/casper/filesystem.squashfs
Comprimido el filesystem, solo resta crear la nueva imagen (.iso) de nuestra distro
IMAGE_NAME="Heber" cd extraer-cd
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-Heber.iso .
Notesé que este último comando tiene un punto al final
Listo ! ya hemos creado nuestra distribución Live CD personalizada de Ubuntu. Si se quiere ahora, se puede grabar nuestra nueva distro en un CD, ya sea utilizando cualquier programa de grabación de CD o mediante el siguiente comando
cdrecord dev=/dev/cdrom ubuntu-Heber.iso
Opcionalmente también se puede utilizar una máquina virtual para testear la distribución