Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ernesto Hernández-Novich
Marzo 6, 2008
Resumen
El presente documento es una guía general en el establecimiento de una infraestructura
de desarrollo que permita producir una Distribución de Software Libre como una serie de
adaptaciones a Debian GNU/Linux siguiendo los principios establecidos y recomendados
por las Custom Debian Distributions (CDD).
Este documento es resultado del proceso de investigación y desarrollo para la cons-
trucción de la Distribución GNU/Linux del CNTI, en el marco del proyecto Debian CDD
CNTI. Agradecemos enviar correcciones y sugerencias al autor, a través de la dirección de
correo <emhn@usb.ve>.
1. Ambiente de Desarrollo
Disponga de un sistema Debian GNU/Linux instalado con Debian Etch. En lo que res-
ta de este documento nos referiremos a este sistema como debian.ejemplo.com, siendo
conveniente que en el servicio DNS de la red aparezca registrado este nombre asociado a
la dirección IP correspondiente.
1
El sistema ha de contar con suciente espacio en disco [2] para la construcción de la
réplica. El espacio asignado para la réplica debe estar en la partición sobre la cual resida
/var/www/debian.
Instale Apache2 (aptitude install apache2) y asegúrese que cualquier cliente Web pue-
de visitar http://debian.ejemplo.com/debian y acceder al directorio raíz de la réplica.
• En el servidor remoto debe existir un directorio raíz sobre el cual operar el rsync,
indicado en la variable RSYNC_DIR.
• La dirección de correo del usuario responsable del mirror, indicada en la variable
MAILTO, de manera que las operaciones de sincronización envíen un reporte de éxito
o fallo automáticamente.
Así, para hacer una réplica completa de todas las distribuciones y todas las arquitecturas
basta utilizar algo similar a:
TO=/var/www/debian
RSYNC_HOST=ftp.ch.debian.org
RSYNC_DIR=debian/
MAILTO=mirroradmin@ejemplo.com
Una vez modicado el script, utilice el comando chown para que pertenezca al usuario
root y grupo root, y el comando chmod para que sólo el dueño pueda ejecutarlo. Si se
ejecuta el comando manualmente, en el archivo /var/log/debian-mirror.log aparecerán
los resultados del trabajo de sincronización paulatinamente. Note que la primera vez que
ejecute el comando tomará un tiempo considerable en culminar su trabajo.
2
1.1.3. Réplicas de otros repositorios
Para ahorrar ancho de banda y facilitar el acceso a paquetes de interés que no están en
el repositorio principal del Proyecto Debian, es conveniente crear réplicas locales en otras ubi-
caciones. En particular, el mecanismo CDD es capaz de aprovechar los parches de seguridad
emitidos regularmente por el Proyecto Debian [4] y los paquetes para extensiones multimedia
provistos por Christian Marillat [5]. En estos casos, puede repetirse el proceso de replicación
pero utilizando diferentes directorios dentro del servidor.
Por ejemplo, para construir una réplica de los paquetes para extensiones multimedia provistos
por Christian Marillat, pero solamente para las arquitecturas i386 y amd64, puede utilizarse un
script similar a
#!/bin/bash
DM=/usr/bin/debmirror
HOST=www.debian-multimedia.org
DIST="etch,lenny,sid"
ARCH="i386,amd64"
SECT="main"
$DM /var/www/debian-multimedia/ \
--progress \
--method=http \
--root='.' \
--rsync-batch=500000 \
--host=$HOST \
--dist=$DIST \
--arch=$ARCH \
--section=$SECT \
--cleanup \
--source \
--getcontents \
--ignore-missing-release
En el resto del documento, asumiremos que existen réplicas par ambos repositorios adicionales,
http://debian.ejemplo.com/debian-security
disponibles en el servidor a través de los URL
y http://debian.ejemplo.com/debian-multimedia respectivamente.
3
1.2.1. Requerimientos.
Es recomendable que la estación de trabajo para las tareas de adaptación y producción de
los CDD tenga:
Procesador de 32 bits de última generación. Mientras más rápido sea el procesador, más
eciente será el proceso de generación de las imágenes así como su prueba por simulación.
Un Pentium M de 1.4GHz sería lo mínimo para ser productivo.
Suciente memoria RAM para poder ejecutar tanto el ambiente gráco en el cual trabaja
el usuario adaptador como sostener las máquinas virtuales para emulación durante las
pruebas. Lo mínimo para ser productivo es contar con 512Mb de RAM.
Suciente espacio en disco para contener la instalación del sistema con su ambiente de
escritorio, las imágenes ISO que se generen, la réplica local de los paquetes que son utiliza-
dos para la confección del CDD y los archivos de conguración que la denen. Lo mínimo
para ser productivo es contar con 40Gb de disco duro.
Una unidad CD-R/CD-RW para poder preparar las imágenes físicas con las ISOs genera-
das durante el proceso de adaptación.
Debian GNU/Linux Etch con las últimas actualizaciones de seguridad disponibles con el
ambiente de escritorio tradicional y con el kernel adecuado para la máquina antriona.
Asumiendo una máquina con arquitectura i386 (Pentium III, Pentium 4, Pentium M,
Xeon, etc.) se utiliza linux-image-2.6-686.
Puede utilizarse RAID por hardware, RAID por software, LVM o particiones crudas. En
todo caso se sugiere el particionamiento
• 256Mb para /
• El resto en /home
Instalar los paquetes rsync, syslinux, netpbm, reprepro, apt-utils, wget, python,
debootstrap y lsb-release de la versión Debian Etch usando aptitude o synaptic.
Instalar manualmente la última versión disponible del paquete debian-cd[9].1 El paque-
te .deb se descarga usando el navegador y una vez en el escritorio puede instalarse bien
sea con la herramienta gráca gdebi o bien desde la línea de comandos utilizando dpkg.
1A la fecha de escritura de este documento, la versión más reciente de debian-cd es la 3.0.3.
4
Instalar manualmente la última versión disponible del paquete simple-cdd [6].2 El pa-
quete .deb se descarga usando el navegador y una vez en el escritorio puede instalarse
bien sea con la herramienta gráca gdebi o bien desde la línea de comandos utilizando
dpkg.
Una vez creadas las imágenes ISO con las CDD, es posible vericar su funcionalidad utili-
zando algún emulador que permita construir máquinas virtuales con capacidades grácas.
El autor utiliza QEmu para ese propósito, por tanto recomienda instalar:
3
• El paquete qemu, para tener el emulador y todas sus dependencias.
• El paquete con los módulos del kernel apropiados para acelerar el funcionamiento
de QEmu en la máquina antriona. Los módulos dependen del kernel particular
instalado, y para nuestro ejemplo sería necesario instalar kqemu-modules-2.6-686.
2. Procedimiento de Construcción
5
$ mkdir testcdd
$ cd testcdd
El directorio estará inicialmente vacío y es responsabilidad del desarrollador del CDD crear el
perl mínimo de trabajo, así como el archivo de conguración para la herramienta simple-cdd.
$ mkdir profiles
Este directorio contendrá todos los archivos necesarios para denir los perles. La herramienta
identica los perles según los nombres de los archivos que encuentra, de manera que para crear
el perl de nombre inicial, es necesario crear:
inicial.description Este archivo de texto es opcional y contiene una sola línea de texto con
una descripción resumida del propósito del perl. Lo que se escriba en este archivo será
utilizado como descripción informativa para el usuario durante el proceso de instalación,
de manera que pueda decidir cuales perles seleccionar.
inicial.preseed Este archivo de texto es opcional y contiene las selecciones a utilizar por
omisión (el preseed ) para las preguntas de conguración que presente el Instalador De-
bian o cualquier paquete que utilice debconf para congurarse. El formato del archivo es
idéntico al requerido por el utilitario debconf-set-selections [8].
inicial.postinst Este archivo de texto es opcional y contiene un script de shell que será
ejecutado automáticamente una vez que se hayan instalado todos los paquetes indicados
en el perl. La intención de este script es realizar las conguraciones manuales necesarias
para aquellos paquetes que no aprovechan debconf.
6
encontrarse en el directorio /usr/share/doc/simple-cdd/examples y que sirve de punto de
partida.
Así construimos el archivo simple-cdd.conf dentro del directorio de trabajo conteniendo
# Directorio de trabajo
simple_cdd_dir=`pwd`
# Perfiles a incluir en el CD
# (separados por espacio en blanco)
profiles=inicial
# Para que el perfil se instale sin preguntar
auto_profiles=inicial
# Paquete aplicador de perfiles
profiles_udeb_dist=sid
# Idioma del instalador
language=Spanish
# País por omisión
country=Venezuela
# Mirror principal del cual tomar paquetes
# y componentes del instalador.
server=debian.ejemplo.com
debian_mirror=http://$server/debian
rsync_debian_mirror=$server::debian
mirror_components=main contrib non-free
# Mirror para actualizaciones de seguridad
security_mirror=http://debian.ejemplo.com/debian-security
# Mirror extra con paquetes extra y componentes.
debian_mirror_extra=http://debian.ejemplo.com/debian-multimedia
mirror_components_extra=main
# Directorio local con paquetes .deb extra a instalar
# (posiblemente con arte gráfico, archivos a sembrar, etc.)
local_packages=${simple_cdd_dir}/Estilo/*.deb
# Imagen SPLASH para el CD
export SPLASHPNG=${simple_cdd_dir}/inicial.png
# Nombre del CD
export DISKINFO=CDD Inicial Debian GNU/Linux
7
2. Se utiliza el paquete debootstrap de la arquitectura objetivo (en nuestro caso i386)
para determinar los paquetes obligatorios que deben incluirse en el instalador para poder
lograr una instalación base mínima funcional. La lista de paquetes particulares estará en
tmp/deboostrap en un archivo con el nombre de la distribución y plataforma (etch-i386).
3. Se descargan todos los paquetes necesarios para debootstrap y para los perles denidos
en el CDD. dentro del directorio de trabajo en el subdirectorio tmp/mirror, construyendo
un repositorio parcial solamente con los paquetes a incluir en el CDD. Mientras más paque-
tes sean necesarios, más tiempo tomará analizarlos, más tiempo tomará descargarlos y más
espacio ocuparán localmente. Note que si se tiene un repositorio con las actualizaciones
de seguridad, se descargarán los paquetes más actualizados.
4. Se prepara una conguración especíca del utilitario debian-cd [9] dentro del directorio
tmp/debian-cd pertinente para la construcción del CDD. La conguración generada es
suciente para la mayoría de los casos, pero si se desea alguna optimización particular
basta modicar los archivos de conguración de debian-cd de manera apropiada. El tipo
de conguraciones y cosas que pueden lograrse con debian-cd escapan al alcance de
este documento, de modo que debe referirse a la documentación de debian-cd para más
detalles.
El proceso de creación de la imagen produce varias bitácoras de avance dentro de los directorios
de trabajo. Si la operación no puede llevarse a cabo exitósamente, aparecerá un mensaje de
error acorde; si este mensaje resulta escueto, pueden consultarse las bitácoras de operación para
determinar con precisión la causa del error. Las bitácoras de interés son:
1. Se construye una imagen de disco virtual que servirá como disco duro para la máquina
emulada. Típicamente una imagen de 2-4Gb es suciente para las instalaciones, y para
ello se ejecuta el comando
8
2. Se ejecuta el emulador QEmu utilizando la imagen de disco como si fuese su disco duro
principal y la imagen ISO9660 como si fuese el CD-ROM. Se indica a QEmu que inicie
la emulación arrancando desde el CD-ROM para así simular la instalación. Para ello se
ejecuta el comando
La razón por la cual se desarrolla un CDD es porque se desea imponer una imagen y con-
guraciones especícas de aquellas incluidas en la distribución estándar Debian GNU/Linux,
pero aprovechar todos los paquetes y herramientas disponibles en Debian GNU/Linux. En este
sentido, la herramienta simple-cdd ofrece varios mecanismos que pueden aprovecharse para
lograr la adaptación.
9
En la lista de paquetes no se pueden agregar paquetes linux-image-*. El instalador ya
tiene paquetes adecuados de kernel para instalar y lo hará automáticamente. La imagen de
instalación se creará con el kernel genérico para la arquitectura; en el caso de la arquitectura
i386, se utilizará el kernel linux-image-2.6-486, que opera por igual en cualquier procesa-
dor Intel o AMD sin optimizaciones especiales. Si se preere incluir uno o más paquetes con
imágenes de kernel optimizadas para una o más arquitecturas superiores, deben indicarse a
simple-cdd en la línea de comandos de construcción de la imagen de instalación utilizando la
opción --kernel-packages.
Una manera de construir la lista de paquetes es seleccionarlos uno a uno a partir de una
máquina en la cual se ha instalado todo lo que se necesita. Esto es, se instala un sistema modelo,
y luego se extrae la lista de paquetes instalados aprovechando el comando dpkg, pero ltrando
los paquetes correspondientes al kernel con un comando similar a
$ dpkg --get-selections | grep -v linux-image | cut -f1
Otra manera de construir la lista es utilizar alguno de los Tasks denidos en Debian como
punto de partida y completarlo. Con el comando
$ tasksel --list-tasks
se muestran todos los Tasks denidos en Debian, mientras que el comando
$ tasksel --task-packages desktop
muestra los paquetes que conforman el Task Desktop tal como lo dene Debian. Esa lista
de paquetes podría utilizarse como punto de partida para crear un perl.
10
d-i clock-setup/utc boolean true
d-i popularity-contest/participate boolean false
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i netcfg/hostname string ejemplo
d-i netcfg/choose_interface select auto
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually
Con esta conguración se lograría que el instalador inicie automáticamente en idioma español,
asumiendo que el país es Venezuela y congurando el reloj de la máquina en hora UTC. Tiene
el efecto adicional que la instalación de paquetes incluirá la sección contrib y non-free de
los repositorios, con lo que será posible instalar controladores privativos y otros paquetes que
dependen de contenido que no está en los repositorios Debian (fonts de Microsoft, plugins de
Flash, plugin de Java). Por último, la máquina será nombrada ejemplo, intentará congurar
automáticamente la red usando DHCP sobre la primera interfaz que se detecte y en caso de no
poder hacerlo lo noticará.
Quedan abiertas las preguntas sobre el nombre de usuario y el esquema de particionamiento.
Esta última también puede ser preestablecida como lo explica la documentación, pero es prefe-
rible dejar el diálogo actual que ofrece la opción de particionamiento automático; es importante
notar que si el idioma de instalación es diferente al inglés (como es nuestro caso) en la siembra
de la pregunta debe utilizarse el nombre de la receta de particionamiento en el idioma de la
instalación. Así, si se quiere utilizar la receta que separa la partición /home del resto, la siembra
adecuada sería
Una conguración interesante es la de deshabilitar el usuario root y activar el uso de sudo para
la administración. Para lograr eso, basta con que el perl incluya el paquete sudo y que en el
archivo de preseed se incluya
esto tiene el efecto de deshabilitar el superusuario (se le coloca una clave imposible) y congurar
sudo para que el usuario regular pueda realizar las labores administrativas con su propia clave.
11
debconf-show para observar las posibles preguntas y las respues-
2. Aprovechar el utilitario
tas que están almacenadas en la base de datos debconf. Por ejemplo, para el paquete
sun-java5-jre puede hacerse
debconf-show sun-java5-jre
y se obtiene como salida
* shared/accepted-sun-dlj-v1-1: true
sun-java5-jre/jcepolicy:
sun-java5-jre/stopthread: true
shared/error-sun-dlj-v1-1:
* shared/present-sun-dlj-v1-1:
donde las líneas marcadas con * indican las preguntas que fueron contestadas durante la
conguración del paquete. La que nos interesa es precisamente la primera que es la de
aceptación de la licencia.
3. Incluir en el archivo preseed del perl la pregunta con la respuesta adecuada asociada al
paquete de interés. En el caso del paquetes sun-java5-jre agregaríamos
12
alcance de este documento, siendo necesario estudiar el Debian Policy [11] y la Guía para Man-
tenedores Novatos [12]. Solamente describiremos la estructura necesaria de los elementos de arte
y la estrucura de los paquetes esenciales para la conguración.
Se han diseñado dos paquetes originales para la conguración automática de la apariencia:
Cada paquete está contenido en un directorio del mismo nombre, todos ellos dentro del directorio
Estilo en el área de trabajo de construcción del CDD. Para construir los paquetes, basta
ubicarse en el directorio raíz que los contiene y ejecutar el comando de construcción apropiado
$ cd testcdd/Estilo/debian-simple-cdd-themes
$ debian/rules binary
de manera que se generen los múltiples archivos .deb en el directorio testcdd/Estilo. Es-
te directorio debe aparecer en la directiva local_packages del archivo de conguración de
simple-cdd para que sean incluidos en el CDD.
13
Se ha creado un GDM Theme prototipo con la intención que sirva como punto de partida
para adaptaciones futuras, posiblemente creando varios. Todos los componentes del tema para
GDM se encuentran en el directorio debian-cnti-cdd-themes/gdm/: imágenes PNG para los
íconos de acción, una imagen PNG para el fondo de pantalla, el archivo XML con la descripción
de la geometría del tema y un archivo .desktop para describir el tema a Gnome.
14
y la instalación disponga del disco automáticamente según los parámetros que el creador de la
CDD disponga.
La ventaja de establecer una receta de particionamiento está precisamente en liberar al usua-
rio de la posible complejidad del proceso y de tomar decisiones sobre un tema que no domina.
La desventaja de establecer una receta de particionamiento está en que se resta exibilidad al
usuario avanzado que quiere controlar con precisión la disposición de la información en el disco.
Si uno no establece ninguna receta de particionamiento, la herramienta simple-cdd genera
una receta para crear una sola partición. En principio es recomendable establecer alguna receta
de particionamiento más razonable que esa, y en secciones anteriores se describió como sembrar
la receta para separar las particiones / y /home. Sea cual sea la receta deseada, la siembra debe
hacerse utilizando su nombre en el idioma del CDD. Al establecer una receta personalizada o
dejar que simple-cdd genere la receta de partición única, se pierde la funcionalidad de particio-
namiento asistido que ofrece el Instalador Debian y en consecuencia la posibilidad de particionar
a gusto.
Si uno no quiere una receta de particionamiento y desea que el asistente de particio-
namiento del Instalador Debian opere de la manera tradicional, debe modicar el archivo
/usr/share/simple-cdd/profiles/default.preseed y colocar en comentarios las siembras
de partman/choose_recipe. Este archivo de siembra es agregado automáticamente a cualquier
CDD, y al eliminar la siembra de recetas de particionamiento se habilitará el uso del asistente
de particionamiento estándar del Instalador Debian.
15
xserver-xorg xserver-xorg/autodetect_monitor boolean true
xserver-xorg xserver-xorg/autodetect_keyboard boolean true
xserver-xorg xserver-xorg/config/display/modes multiselect 1280x1024, 1280x800,
1024x768
SEEDS
dpkg-reconfigure -fnoninteractive xserver-xorg
echo deb http://www.debian-multimedia.org/ etch main > >/etc/apt/sources.list
Referencias
[1] anonftpsync
Script de shell que facilita la construcción de mirrors completos o parciales Debian. Está
disponible en http://www.debian.org/mirror/anonftpsync
[2] Dimensiones de un mirror Debian.
http://www.debian.org/mirror/size
[3] Lista de Mirrors Ociales Debian.
http://www.debian.org/mirror/official
[4] Actualizaciones de Seguridad del Proyecto Debian.
http://www.debian.org/security/
[5] Paquetes Multimedia para Debian GNU/Linux provistos por Christian Marillat.
http://www.debian-multimedia.org/
[6] simple-cdd.
Herramientas utilitarias para facilitar la creación de Custom Debian Distributions provista
por el Proyecto Debian en la distribución unstable a.k.a. Sid y disponible para su descarga
manual en http://packages.debian.org/sid/simple-cdd
[7] Debian Installer
http://wiki.debian.org/DebianInstaller
[8] debconf-set-selections
Utilitario de línea de comandos exclusivo de Debian GNU/Linux que permite insertar
valores por defecto en la base de datos de conguración de debconf. Los detalles de formato
pueden encontrarse en su página de manual, legible con man debconf-set-selections.
[9] debian-cd
Herramienta para construir discos de instalación (CD o DVD) de la distribución Debian
GNU/Linux disponible en http://packages.debian.org/sid/debian-cd. La documen-
tación se incluye al instalar el paquete homónimo.
[10] Preseeding
Es la técnica que permite suministrar respuestas por omisión a los diferentes componentes
del Instalador Debian para automatizar el proceso. La documentación detallada de refe-
rencia se encuentra en http://www.debian.org/releases/stable/i386/apb.html.en
16
[11] Debian Policy
Guía que describe la estructura y contenidos de los repositorios y sistemas Debian, así como
las especicaciones y condiciones que deben cumplir los paquetes para ser adecuados. Se
encuentra en http://www.debian.org/doc/debian-policy/, pero también se instala con
el paquete debian-policy.
[12] Debian New Maintainer's Guide
Guía que describe la forma en que se construye un paquete Debian, orientado a desarrolla-
dores con poca experiencia que necesitan iniciarse en la tarea de mantener paquetes Debian.
Se encuentra en http://www.debian.org/doc/maint-guide/, pero también se instala con
el paquete maint-guide o maint-guide-es.
[13] Graphical Greeter Theme
Está sección de la documentación de GDM describe los elementos necesarios para construir
un tema visual a la medida. Se encuentra en http://www.jirka.org/gdm-documentation/
x1259.html
17