Como su nombre lo indica, debian-installer es el instalador de Debian. Usualmente se pueden presentar situaciones en las que sea necesario modificar el paquete, como es el caso de Lihuen, para adaptarlo a diferentes usos y necesidades. En cualquier caso, debemos seguir los siguientes pasos para lograr que la creación de la imagen ocurra con éxito:
- Instalar dependencias incumplidas de debian-installer.
- Configurar repositorios personalizados.
- Generar la imagen
Antes que nada, para poder usar debian-installer sin conflictos, debemos correrlo desde un sistema que use repositorios inestables, como lo es sid. Debemos utilizar el comando dpkg-checkbuilddeps en el directorio raíz de debian-installer. Esto comprobará los paquetes instalados en el sistema con una lista de las dependencias de nuestro paquete. Luego mostrará en pantalla las dependencias incumplidas. La lista de dependencias de debian-installer se encuentra por defecto en debian/control, pero también es posible especificar otra lista mediante su path. Para más información, usar man dpkg-checkbuilddeps. Una vez obtenida la lista, se debe proceder a instalar los paquetes. Para hacerlo basta con correr el comando apt-get install <paquete1> <paquete2> <paquete3>, siendo paqueteX alguno de los paquetes mostrados en la lista que imprimió dpkg-checkbuilddeps. Lo que resta ahora es completar el paquete debian-installer con los udebs requeridos para cada imagen. Simplemente hay que correr el comando dpkg-buildpackage en el directorio raiz del instalador. Este proceso puede tardar varios minutos, dependiendo de la conexión a Internet.
Cuando compilemos nuestra imagen, por defecto debian-installer generará un archivo sources.list.udeb, el cual estará basado en el sources.list de nuestro sistema. Si nuestra intención es generar una imagen con una versión diferente a la instalada, es posible especificar los repositorios de donde se desea descargar los paquetes. Para ello tendremos que crear un archivo sources.list.udeb.local en el directorio build/. Vale aclarar que, aunque hayamos creado el sources.list.udeb.local, cuando generemos la imagen el archivo sources.list.udeb igualmente será creado, pero no utilizado.
Una vez instaladas las dependencias y elegidos los repositorios deseados, lo que queda es generar la imagen. Para ello se debe tener en cuenta la arquitectura (i386, amd64,etc.) y el tipo (cdrom, netboot, floopy, etc.). Para obtener una lista de todas las posibles combinaciones de arquitecturas y tipos, basta con utilizar el comando make en el directorio build/. Una vez elegidas las opciones, hay que generar la imagen usando uno de los build_targets (build-netboot, all_build, etc.). Una vez finalizado el proceso, la imagen será generada en el directorio build/dest. La mayoría de las imágenes creadas por debian-installer están listas para ser usadas. Las excepiones son las imágenes CD/DVD, que solo contendran la base (initrd y kernel). El paquete usado para completar las imágenes CD/DVD es debian-cd. Aunque por otro lado, si lo que se desea es que la imagen solo tenga el instalador, se puede crear una imagen mini-ISO con solo el netboot initrd en ella. Por ejemplo, el comando make build_netboot creará una imagen en build/dest/netboot/mini.iso, usando isolinux.
Una excelente forma de automatizar debian-installer es usar la preconfiguración. La preconfiguración ofrece un mecanismo para responder a preguntas realizadas durante la instalación sin tener que introducir manualmente las respuestas mientras ésta se ejecuta. Esto hace posible que se automaticen la mayoría de las instalaciones e incluso ofrece funcionalidades que no están disponibles durante una instalación normal. Para ello se crea un archivo preseed.cfg, en el cual se incluirán todas las opciones a automatizar.
Se pueden utilizar tres métodos de preconfiguración: modificando el initrd para que incluya el archivo preseed.cfg, llamando al archivo preseed.cfg especificando una ruta, o solicitando el archivo preseed.cfg vía red.
El método que explicaremos a continuación se basa en modificar el initrd.
Dado que las imágenes ISO no se pueden modificar (directamente) una vez creadas, precisamos montarla en un directorio, y luego copiar su contenido a otro. Entonces, como root, ingresamos en la consola:
# mkdir -p loopdir # mount -o loop <tu imagen.iso> loopdir # rm -rf cd # mkdir cd # rsync -a -H --exclude=TRANS.TBL loopdir/ cd # umount loopdir
En caso de que no reconozca alguno de los comandos, debemos instalarlo. Por ejemplo:
# apt-get install rsync
El paso siguiente es modificar el initrd. Para ello, ingresaremos la siguiente secuencia de comandos:
# mkdir irmod # cd irmod # gzip -d < ../cd/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames # cp ../<tu preseed.cfg> preseed.cfg # find . | cpio -H newc --create --verbose | gzip -9 > ../cd/initrd.gz # cd ../ # rm -fr irmod/
Luego, para que el directorio cd/ quede listo para convertirse en una imagen ISO, tendremos que actualizar el md5sum.txt
# cd cd # md5sum `find -follow -type f` > md5sum.txt # cd ..
Lo que resta ahora es generar la imagen ISO, y que esta sea booteable.
# mkisofs -o test.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux.bin -c boot.cat ../cd
Si todo salió bien, tendremos un archivo test.iso en el directorio cd/, el cual contendrá nuestro archivo preseed.cfg dentro del initrd.