Lihuen
RSSRSS AtomAtom

Modificando debian-installer

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

Instalar los fuentes de debian-installer

Si usted no cuenta con el paquete, puede hacerlo ejecutándo el siguiente comando:

# apt-get source debian-installer

Instalar dependencias incumplidas de debian-installer

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.

Configurar repositorios personalizados

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.

Personalizando el instalador

Es posible adaptar la parte "externa" del instalador a nuestro gusto. Es decir, se pueden modificar las imágenes, colores, textos de ayuda, etc. Estos archivos están ubicados en build/boot/x86/ En general, se van a encontrar archivos f*.txt, los cuales corresponden a los textos mostrados cuando se presiona algunas de las teclas F1 - F10; archivos *.cfg, que son configuraciones simples en las que dicen los archivos *.txt a incluir; y en el directorio build/boot/x86/pics/ se encuentran las imágenes mostradas por el instalador.

Por otro lado, si deseamos cambiar el path en el cual el instalador busca la imagen, se puede optar por modificar el archivo build/config/x86.cfg. Para ser mas específico, se debería modificar la línea 14 la cual contiene

SPLASH_PNG=boot/x86/pics/klowner.png

Generar la imagen

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 excepciones son las imágenes CD/DVD, que solo contendrán 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.

Automatización de la instalación

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.

Creando nuestro preseed.cfg

A pesar de que se puede generar un archivo preseed.cfg utilizando algunos comandos, es preferible crear uno desde el principio. De esta manera, la automatización de la instalación será totalmente personalizable. Empezaremos creando un archivo y llamándolo preseed.cfg. A continuación se detallaran cada uno de los parámetros que se pueden configurar. No todos ellos son obligatorios.

Localización

# Configuración de localización para el idioma y país.
d-i debian-installer/locale string es_AR

Mapa del teclado

# Selección de teclado
d-i console-keymaps-at/keymap select es

Configuración de la red

# netcfg escogerá la interfaz que tiene enlace si puede. Esto hace que no
# muestre la lista si hay más de uno.
d-i netcfg/choose_interface select auto
# Si tiene un servidor de DHCP lento y el instalador expira intentando
# conectarse a él, esto puede serle útil.
#d-i netcfg/dhcp_timeout string 60
# Escoger una interfaz específica en lugar de la encontrada:
# d-i netcfg/choose_interface select eth1
# Así es como puede configurar la red manualmente descomentando esta línea
# y las líneas de configuración estática de red a continuación.
# d-i netcfg/disable_dhcp boolean true
# Si quiere que el fichero de preconfiguración funcione tanto en
# sistemas con un servidor de DHCP como en los que no lo tengan, tendrá
# que descomentar estas líneas y añadir la configuración estática de red
# a continuación.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually
# Configuración estática de red
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true
# Cualquier nombre de host y de dominio que se obtengan por DHCP se utilizan
# antes que los valores aquí definidos. Sin embargo, definir los valores evita
# que la pregunta se muestre aunque los valores vengan del DHCP.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
# Deshabilitar el molesto mensaje sobre la clave WEP
d-i netcfg/wireless_wep string
# El nombre de servidor raro que algunos ISP utilizan como una especie de contraseña
#d-i netcfg/dhcp_hostname string radish

Configuración de los repositorios

# No tiene que definir la cadena mirror/country si selecciona ftp
#d-i mirror/protocol string ftp
d-i mirror/country string enter information manually
d-i mirror/http/hostname string ftp.es.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# Versión a instalar.
#d-i mirror/suite string testing
# Versión a utilizar para descargar componentes de la instalación
# (opcional)
#d-i mirror/udeb/suite string testing

Configuración de reloj y zona horaria

# Controla si el reloj de hardware está o no configurado a UTC 
# (Tiempo Universal Coordinado)
d-i clock-setup/utc boolean true
# Puede utilizar esta opción para definir un valor apropiado para $TZ.
# Consulte los valores permitidos en /usr/share/zoneinfo/ 
d-i time/zone string Buenos_Aires

Cargador de arranque

# GRUB es el gestor de arranque predeterminado (para arquitectura x86).
# Descomente esta opción si quiere instalar lilo en su lugar:
#d-i grub-installer/skip boolean true
# Esta es una configuración adecuada y segura, hace que grub se instale
# automáticamente en el MBR si no se detecta otro sistema operativo en
# la máquina.
d-i grub-installer/only_debian boolean true
# Lo siguiente hace que el «grub-installer» instale en el MBR en caso de
# que se encuentre instalado otro sistema operativo. Esto es menos seguro puesto
# que podría hacer que el otro sistema operativo no se pudiera arrancar.
d-i grub-installer/with_other_os boolean true
#Alternativamente, descomente y edite estas líneas
#si desea instalar en una ubicación distinta al MBR:
#d-i grub-installer/only_debian boolean false
#d-i grub-installer/with_other_os boolean false
#d-i grub-installer/bootdev  string (hd0,0)
#Para instalar grub en múltiples discos:
#d-i grub-installer/bootdev  string (hd0,0) (hd1,0) (hd2,0)

Selección de paquetes

tasksel tasksel/first multiselect standard, desktop
#tasksel tasksel/first multiselect standard, web-server 
#tasksel tasksel/first multiselect standard, kde-desktop
# Paquetes individuales que también deben instalarse
#d-i pkgsel/include string openssh-server build-essential

Finalizar la primera fase de la instalación

# Omitir el mensaje final sobre la finalización de la instalación.
d-i finish-install/reboot_in_progress note
# Esta opción impedirá que el instalador expulse el CD durante 
# el reinicio, y puede ser útil en algunas circunstancias:
#d-i cdrom-detect/eject boolean false


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.


Nota: Se han seleccionado los parámetros más genéricos posibles para que la instalación sea util en cualquier computadora. Utilizar preseed.cfg nos permite automatizar muchas más cosas, como el particionamiento, configuración de las X, etc., pero para utilizarlos se recomienda tener conocimiento del hardware del equipo donde se va a realizar la instalación. Para más información, visite el sitio oficial.

Especificando una ruta para nuestro preseed.cfg

Este es el método mas sencillo, recomendado y utilizado por excelencia. Tendremos que editar el archivo de configuración ubicado en installer/build/config/common. En el ubicaremos la variable PRESEED y le especificaremos el directorio donde se encuentra nuestro archivo preseed.cfg. A manera de ejemplo:

PRESEED = /home/<user>/preseed.cfg

Modificando el initrd

Este mètodo es un poco mas complicado que el anterior. 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 -input-charset utf-8  -o Debian.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ../cd

Si todo salió bien, tendremos un archivo Debian.iso en el directorio cd/, el cual contendrá nuestro archivo preseed.cfg dentro del initrd.


 Ante cualquier duda o inconveniente no dudes en visitar nuestros foros.
 http://lihuen.linti.unlp.edu.ar/foros