Lihuen
RSSRSS AtomAtom

¿Cómo hacer tu propia distro?

¿Cómo personalizar el instalador de Debian para que también instale paquetes nuestros propios paquetes personalizados?

Para empezar a responder ésta pregunta, necesitamos contar con:

  1. Un repositorio local: Dónde se encuentren nuestros archivos .deb personalizados;
  2. Una copia del repositorio de debian

Descargar los repositorios: debian, security y local

Lo primero que necesita es una copia en la máquina local de los repositorio de debian y el local.

Para descargar repositorios, usted puede instalar el comando debmirror

apt-get install debmirror

Debmirror necesita recibir argumentos específicos. Para obtener información sobre el comando, ejecute:

man debmirror

Puede editar el siguiente ejemplo dependiendo de la arquitectura de la distribución que desea. Él último argumento corresponde al lugar dónde se desea descargar el repositorio. Para contar con una copia del repositorio de debian, debe contar con 37GB de espacio en disco aproximadamente.

debmirror  -h ftp.nl.debian.org  --progress --dist=squeeze --root=/debian --di-arch=i386 --section=main,non-free,contrib,main/debian-installer,main/installer-i386 --arch=i386 --method=rsync --nosource --ignore-release-gpg --i18n --rsync-extra=doc,tools,indices --rsync-options='-aIL' /home/usuario/debian

Del mismo modo, genere una copia local del repositorio que contiene los paquetes locales que se pretende incluir a la iso. Por ejemplo, los repositorios de lihuen

debmirror --host=repo.lihuen.linti.unlp.edu.ar/ --root=lihuen --dist=squeeze/lihuen4 --section=main,non-free,contrib --arch=i386  --progress --method=http  --nosource --ignore-release-gpg  --ignore-missing-release /home/usuario/locales

Edición del paquete

tasksel

Es un paquete que permite la selección de tareas a instalar en el sistema Debian, durante o después de la instalación.

Tlihuen.jpg

Para descargar los fuentes del paquete

apt-get source tasksel

Crear una lista de tareas

Una "tarea" es una lista de nombres de paquetes que se pretende instalar en un sistema. Para crear una lista de tareas, debe crear un archivo nuevo con el nombre que desea asignarle a la nueva tarea en la carpeta:

tasksel-2.88//tasks/ 

En ésta carpeta encontrará una gran cantidad de listas de tareas. Borré todas las que considere innecesarias para su distribución.

Una tarea debe contar con los siguientes campos:

Task:nombre_de_la_tarea

Nombre con el que se va a mostrar la tarea en la lista de tareas. Debe estar escrito minúscula.

Relevance: un_valor

Valor de importancia que se le asigna a la tarea. Varía desde 0 a 10

Description: 

Una breve información sobre la tarea

Key:

Nombre de los paquetes que son elementales en la tarea. Si alguno de éstos paquetes no se encuentran en el CD/DVD de instalación, no se mostrará la tarea dentro de las opciones para instalar.

Packages: list

Lista de los nombres de los paquetes que formen la tarea. Ésta lista debe escribirse con un margen izquierdo de dos espacios en blanco.

Test-new-install: argumento_1 argumento_2

Puede recibir uno o dos parámetros. El argumento del primer parámetro se tiene en cuenta durante la instalación del sistema. el segundo parámetro se aplica cuando el usuario ejecuta tasksel con el sistema ya instalado.

Los valores posibles son:

install Instala la tarea automáticamente en el sistema aunque el usuario no la seleccione drante la instalación.

skip No visualiza la tarea entre la lista de opciones.

show: Muestra la tarea dentro de la lista de tareas. No es obligatorio. Pero es importante setearlo como segundo parámetro en el caso de que la tarea tenga la propiedad skip durante la instalación.

mark Muestra la tarea como "seleccionada" (con un tilde) durante la instalación del sistema.

Por ejemplo, en la tarea "gnome" del tasksel de lihuen, se configuró:

Test-new-install: mark show Lo que indica que la tarea se muestra como "marcada o seleccionada" durante la instalación, y se muestra dentro de la lista de tareas disponibles para instalar cuando el usuario ejecuta tasksel.

Otro ejemplo es la tarea "lihuen". Test-new-install: install skip Como ésta tarea contiene paquetes base para la instalación de Lihuen, no se presenta al usuario la posibilidad de selección. De manera que se instala automáticamente y su nombre no se muestra dentro de la lista de tareas a instalar.

debian-installer

Es un paquete que permite crear y personalizar el instalador de Debian.

Instalador modo gráfico de Debian-squeeze

Descargar los fuentes de debian-installer

Si usted no cuenta con los archivos fuentes del paquete, puede obterlos ejecutándo el siguiente comando:

 apt-get source debian-installer

Instalar dependencias incumplidas de debian-instal ler

IMPORTANTE:El paquete debian-installer debe compilarse bajo el mismo sistema que se pretende generar la imágen iso. Por ejemplo, si usted desea generar una imagen iso netboot,squeeze, debe tener instalado una distribución debian squeeze.

Para poder compilar el paquete debian-installer es necesario que instale sus dependencias. La lista de dependencias de debian-installer se encuentra por defectoen el archivo debian/control. Otra manera de obtener la lista de paquetes que se necesita, es ejecutando 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 del paquete. Luego se mostrará en pantalla las dependencias incumplidas.

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.

Personalizando el instalador

Configurar repositorios personalizados

Debian-installer necesita un repositorio de donde tomar los paquetes necesarios para la creaciòn de la iso.

Por defecto,debian-installer generará un archivo

 build/sources.list.udeb

basado en el archivo /etc/apt/sources.list' del sistema.

Si usted intención es generar una imagen con repositorios diferente a los que se encuentran en su sistema, es posible especificar los repositorios de donde se desea descargar los paquetes. Para ello tendremos que crear un archivo

build/sources.list.udeb.local

con la especificación del repositorio que desea. Poer ejemplo:

deb http://repo.lihuen.linti.unlp.edu.ar/debian squeeze  main/debian-installer

Agregar paquetes extras y/o personalizados al instalador

Debian-installer utiliza una seria de mini-paquetes (.udeb) que forman parte del instalador. Por ejemplo, para lograr que el instalador tome la apariencia de Lihuen durante la instalación, se configura y empaqueta el mini-paquete rootskel-gtk; y se agregan ntfs-modules-2.6.32-5-486-di_1.99_i386.udeb y ntfsprogs-udeb_2.0.0-1+b1_i386.udeb para posibilitar un particionado en particiones con formato ntfs.

Para tal fin existe la carpeta:

 build/localudebs/

Para que debian-installer agregue ésta personalización, es necesario agregarle el archivo "sources.listi.udeb.local" la dirección de la carpeta con los .udebs modificados

deb copy:/home/usuario/debian-installer-20110106/build/ localudebs/

Observaciones:

Aunque usted hayacreado el sources.list.udeb.local, cuando generemos la imagen el archivo sources.list.udeb igualmente será creado, pero no utilizado.

Creando el archivo preseed.cfg

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.

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

 build/preseed.cfg 


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.


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 el archivo 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

Tuneando el instalador

Personalizar el menú de isolinux (dentro del paquete debian installer)

Es posible adaptar la parte "gráfica" del menú del instalador a nuestro gusto. Es decir, se pueden modificar las imágenes, colores, textos de ayuda, etc.

Menú del instalador de Debian-squeeze
Menú del instalador de Lihuen 4 -squeeze

Estos archivos están ubicados en build/boot/x86/

Los màs importantes son:

stdmenu.cfg

Permite configurar el tamaño del cuadro, los colores de las fuentes, de selección,entre otros aspectos del menú de isolinux.

menu.cfg

En él se puede configurar la cantidad de entradas aparecerán en el menú del instalador.

f1..10.txt

Corresponden a los textos mostrados cuando se presiona algunas de las teclas F1 - F10;

Una carpeta adelante, en build/boot/x86/pics/

Se encuentran las imágenes mostradas por el instalador.

IMPORTANTE= Aseguresé que las nuevas imágenes mantengan los mismos tamñaños y formatos que las originales. De otro modo, isolinux mostrará un mensaje de error informando que no puede mostrar el menú de la instalación.

Personalizar las imágenes y colores del instalador (a partir del paquete rootskel-gtk)

Rootskel-gtk es un paquete que utiliza debian-installer para configurar los aspectos gráficos del instalador. Si decide editarlo, coloque, vuelva a compilarlo y siga las especificaciones que se detallaron en en punto Agregar paquetes extras y/o personalizados al instalador , desarrollado en ésta documentación.

Puede descargar su código fuente ejecutando:

apt-get source rootskel-gtk

Éste mini-paquete permite configurar aspectos como:

Las imágenes que se visualizan durante la instalación

Los archivos de las imágenes que se muestran durante la instalación de la distribución se encuentran en la carpeta:

rootskel-gtk/src/usr/share/graphics/

Note icon.png Warning icon.png Logo debian.png

Las nuevas imágenes deben respetar el tamaño y el formato que las que se encuentran en ésta carpeta. Para evitar edición extra de código, se recomienda que coloque sus imágenes con los mismos nombres que tiene los archivos originales. De ésta forma se asegurará que funcione correctamente.

Color de la ventana, botones, barra de progreso, cuadros de selecció, etc.

Para personalizar los colores del instalador debe editar el archivo:

rootskel-gtk_1.21/usr/share/themes/Clearlooks/gtk-2.0/gtkrc

Los campos más importantes de éste archivo son:

style "clearlooks-default"
 {
    [...]
    
       bg[NORMAL]              = "#e0e4e0"  # Color de la Ventana instalador
       bg[PRELIGHT]            = "#e0e4e0"  # Color de la Ventana instalador
       bg[SELECTED]            = "#01440d"  # Color para los campos seleccionados 
                                              # verde lihuen
       bg[INSENSITIVE]         = "#e0e4e0"  # Color de la Ventana instalador
       bg[ACTIVE]              = "#e0e4e0"  # Color de la Ventana instalador

    [...] 

       base[ACTIVE]		= "#01440d" # # Color para los campos activados 
                                              # verde lihuen
       base[SELECTED]		= "#01440d" # Color para los campos seleccionados 
                                              # verde lihuen
 
    [...] 
  }
 
 [...]  continuación del archivo gtkrc

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 l Para obtener una lista de todas las posibles combinaciones y tipos, basta con utilizar el comando make en el directorio build

 build make

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

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).

Para crear los archivos necesarios para ir armando la iso DVD o CD, es necesario ejecutar el comadno make de la siguiente manera:

make  build_cdrom_isolinux

Posteriormente, debe copiar el resultado de ésta ejecución en su repositorio de debian local

cp -r dest/cdrom/ dest/MANIFEST dest/MANIFEST.udebs  /home/debian/dists/squeeze/main/installer-i386/current/images/

No es necesario que regenerar nuevamente los Releases ni los Packages del repositorio de debian.

IMPORTANTE:

Antes de cada compilación,ejecute el comando

make reallyclean

para borrar todos los archivos temporales y configuraciones que hayan quedado de una compilación anterior.

debian-cd

Edición del archivo de configuración de debian-CD

En el raíz del paquete se encuentra el archivo más importante:

Archivo:CONF.sh.gz


En éste archivo se deben setear los valores de variables globales que son accedidas por otros scripts durante el proceso de creación de la imagen.

# El directorio donde se encuentra la carpeta de los fuentes de debian-cd   
export BASEDIR=`pwd`

# Aca escribimos el nombre de nuestra distribución.
export CDNAME=Lihuen
 
# Nombre de la versión de debian que se quiere crear la imagen .iso            
export CODENAME=squeeze

# Acá escribimos el número de la versión de nuestra distribución
export DEBVERSION="4.01"

# Es necesario indicar una dirección en donde debian-cd pueda guardar archivos temporalmente.
Lo importante de ésta carpeta es que, como no se borra una vez creada la iso, permite obtener información a modo debug.
export TDIR=/home/usuario/iso_tmp

# debian-cd permite especificar la carpeta de destino  para la imagen iso
export OUT=/home/usuario/iso_create

# Es aconsejable visualizar detalladamente las pasos de creación de la imagen.
export VERBOSE_MAKE=1

# Descomente ésta variable si su intensión es crear la imagen en un único archivo .iso (no crear archivos jigdo)
export MAXJIGDOS=0

# En ésta variable hay que especificar el tipo de soporte para el que se pretende crear la iso
export DISKTYPE=DVD

# debian-cd completa la capacidad del CD/DVD con los paquetes más utilizados. 
# Por ejemplo, si tus listas de paquetes ocupan 2.5GB, debian-cd completa los 2GB restantes
# con paquetes extras. Para evitar ésto, existe la variable COMPLETE en 0
export COMPLETE=0
 Tareas para el instalador

# Se selecciona el número 2 para que el instalador incorpore los paquetes para debian-#
installer.
 export INSTALLER_CD=2

# Lo más interesante es la variable TASK. En ella se puede escribir el nombre de una 
# tareas de las que se encuentren dentro de la carpeta debian-cd-3.1.5/tasks/. 
# Es posible crear una tarea "madre" que contenga una lista de nombres de tareas. 
# Éste tema se detalla en la sección "especificación de tareas para el instalador".
# Por ejemplo, la tarea LihuenDVD-all, contiene una lista con los nombres de todas las   
# tareas que se encuentran en el la carpeta " task " del paquete tasksel-lihuen.
export TASK=LihuenDVD-all
 Especificaciones de los repositorios  

# En ésta variable hay que especificar el path de nuestra copia local del repositorio de debian
export MIRROR=/home/usuario/debian

# Especificamos el path de la copia local del repositorio de security
export SECURITY=/home/usuario/security

# Después de realizar pruebas sobre las configuraciones, no encontramos la forma de que 
# debian-cd  agregue los paquetes locales de la manera en que se establece en el REDME. 
# Por tal motivo, decidimos utilizar la variable LOCALUDEB y realizaruna serie de modificaciones 
# en determinados scripts como se explica en la sección "Modificaciones en debian-cd para incorporar 
# paquetes locales a lo imagen iso"
# Especificamos el path de la copia local del repositorio de paquetes locales
export LOCALDEBS=/home/usuario/locales

Si necesitas incorporar paquetes NONFREE y CONTRIB a tu imagen iso, es necesario que descomentes las cariables y las setees en 1. Lo mismo ocurre conla variable FORCE_FIRMWARE. Como la idea de Lihuen es desarrollar una distribución con paquetes free, no se configuran tales variables en éstos ejemplos.

Modificaciones en debian-cd para incorporar paquetes locales a lo imagen iso

Especificación de las listas de tareas para el instalador

Para que debian-cd almacene en el CD/DVD espacio para nuestros paquetes, es necesario crear listas de tareas. Para debian-cd, una lista de tareas, es un archivo que contiene una lista con nombres de tareas simple, Una lista de tarea simple es un archivo donde se listan los nombres de paquetes a instalar. Pueden ser iguales que las que se crearon para el paquete tasksel, pero su sintaxis no es la misma. Para debian-cd sólo es necesario que se escriban los nombres de paquetes uno debajo del otro. Por ejemplo, en el tasksel Lihuen tenemos la tarea accesibilidad

Task: accesibilidad
Relevance: 10
Section: user
Description: Accesibilidad
 Esta tarea instala software para incrementar la accesibilidad de Lihuen a
 todo tipo de  personas. 
Key:
 gnome-orca
 dasher
Packages: list
  gok
  libcolorblind0
  eviacam

Entonces, para pasar la tarea accesibilidad al formato para debian-cd, debemos crear un archivo nuevo en la carpeta:

debian-cd-3.1.5/tasks/squeeze/

y listar los nombres de los paquetes que se encuentran en el campo "Key" y el Packages". Nuestro ejemplo quedaría:

gnome-orca
dasher
gok
libcolorblind0
eviacam

Para la tarea de debian-cd, no es importante el orden, pero no debe haber espacios en blanco entre el margen izquierdo y el nombre del paquete

Bueno. ya tenemos una tarea simple, ahora lo que vamos a hacer es una tarea compuesta. Para ello creamos un archivo vacío y escribimos en él los nombres de las listas simples que queramos al CD/DVD, utilizando la siguiente sintaxis:

#include <nombre_de_tarea_simple>

Por ejemplo,el siguiente es el contenido de la tarea compuesta LihuenDVD-all.

/* Packages that should really be on CD1 */
#include <debian-installer+kernel>
#include <forcd1>
#include <task-essential-lihuen_all>

#include <accesibilidad>
#include <desarrollo>
#include <ltsp>
#include <educacion>
#include <lxde>
#include <gnome>
#include <lihuen>
#include <kernel>

IMPORTANTE

La variable TASK del archivo CONF:sh que se explicó anteriormente, debe contener el nombre de la tarea compuesta que nosotros creamos, si queremos que debian-cd tome nuestra lista de tareas compuesta para crear la imagen. Éste es el motivo por el cual, la variable TASK del archivo de configuración de Lihuen, tiene seteado el nombre:LihuenDVD-al

Personalizar información de la distribución y archivos de documentación

start_new_disc es un archivo que contiene variables cuyos valores son utilizados por debian-cd para generar información de la distribución. Documentación a cerca de la distribución, nombre de la label del CD/DVD del instalador, son ejemplos de la documentación que se genera a partir del nombre de la distro y de su versión, datos que se sitúan en éste archivo.

debian-cd-3.1.5/tools/start_new_disc

Para generar los documentos con el nombre de Lihuen, se cambiò los valores variables por el de Debian. Tambièn se reemplazó el valor de la versiòn de 6.0 a 4.1

Note que està comentado desde la línea 379 a la 385, porque la configuración que tiene validez para nosotros en la que está desde la línea 397 a la 393 En ésta configuración, se debe completar bien el path de la ubicacaión de los archivos Release del repositorio local

Ejemplo: 
         LOCALDEBS/dists/$CODENAME/lihuen4/main/binary-$ARCH/Release