Crear un Live CD de Debian con live-helper

El estilo de este artículo debe ser mejorado.

El artículo no sigue completamente las convenciones de estilo.

En construcción.png

Este artículo está en construcción.

Por esta razón, seguramente habrá lagunas en el contenido o en el formato. Por favor, antes de cambiar el contenido, consulta la página de discusión del artículo.


Contenido

Introducción

live-build es un conjunto de scripts creados por el Debian Live Project[1] que simplifican la tarea de construir sistemas Live basados en Debian. La idea principal de live-build es ser un marco de trabajo que utiliza un directorio de configuración para automatizar y personalizar todos los aspectos de la construcción de un Live.

Al ser un conjunto de scripts ha de usarse vía consola, aunque existe una GUI llamada live-magic [2]

Conceptos básicos

La base de live-build son los comandos de alto nivel lb_config, lb_build[3] y lb_clean, que se encargan de llamar a los comandos de bajo nivel correspondientes para llevar el proceso a cabo. También existe el comando lb que por si mismo no realiza ninguna función pero es capaz de interpretar todos los comandos genéricos de live-build. Esto se traduce en que cualquier comando del estilo lb_COMANDO puede ser llamado de la forma lb COMANDO. (Por ejemplo, lb_build y lb build son comandos equivalentes)

Requisitos

  • Acceso como Super Usuario (root)
  • live-build
  • Un intérprete compatible con POSIX como bash o dash
  • debootstrap o cdebootstrap[4]
  • Linux Kernel 2.6.x
  • Conexión a internet (no es esencial, pero simplifica el trabajo)

Instalación

  • Desde los repositorios de Debian:
# aptitude install live-build
  • Desde el código fuente[5].
  • Desde snapshots[6].

Entendiendo los principales comandos

En el siguiente apartado veremos los principales comandos, su función y su uso. Para indagar más sobre el funcionamiento de cada uno se recomienda leer sus respectivos manuales con el comando man lb_COMANDO.

lb config

Crea la estructura de carpetas de configuración del Live bajo el directorio config/. Se configurará automáticamente tomando valores por defecto en aquellos campos para los que no hayamos pasado argumentos. Listado completo de los argumentos en el manual.

lb build

Lee la configuración del directorio config/ e inicia la construcción del Live llamando a comandos de bajo nivel.

lb clean

Limpia los archivos creados por lb build para que la siguientes llamadas a lb build empiecen desde un estado limpio.

Usando los comandos

Construyendo una imagen ISO

Como el comando lb config configura automáticamente nuestro Live con valores por defecto la forma más simple de hacer un Live es con los comandos:

$ lb config
# lb build

El proceso puede tardar dependiendo de la velocidad de conexión y la cantidad de operaciones a realizar. Con estos pasos obtendremos un Live que vendrá con el sistema base de Debian y Gnome como entorno de escritorio.

Probando la ISO con qemu

# aptitude install qemu
$ qemu -cdrom binary.iso

Grabando la ISO en un CD/DVD

En un CD

# aptitude install wodim
$ wodim -v speed=24 dev=/dev/cdrom binary.iso

En un DVD

# aptitude install dvd+rw-tools
$ growisofs -dvd-compat -Z /dev/dvd=binary.iso -speed=4

Construyendo una imagen USB/HDD

Si se ha creado la imagen del ejemplo anterior, se recomienda limpiar el directorio de trabajo con lb clean

# lb clean --binary

Llamamos a lb config con el argumento del tipo de binario e iniciamos la construcción de nuevo:

$ lb config --binary-images usb-hdd
# lb build

Probando la imagen con qemu

$ qemu -hda binary.img

Copiando la imagen a un USB

Con dd. ¡Advertencia! Esto borrara todo el contenido de nuestro USB

# dd if=binary.img of=/dev/<USB>  # Donde <USB> es el dispositivo, no una partición del mismo.

De forma manual. Requiere una partición en formato FAT16 o FAT32

$ cp binary/* /media/<USB>        # Donde <USB> es una partición del dispositivo.
# aptitude install syslinux
# parted /dev/<USB> set 1 boot on
# syslinux -sf /dev/<USB>

Gestionando configuraciones

Hasta el momento hemos aprendido a manejar live_build usando comandos con argumentos vía consola pero para conseguir la configuración del Live deseada probablemente necesitemos llevar a cabo una serie de revisiones hasta que el resultado nos satisfaga. ¿Y si entre tanta prueba perdemos parte de los argumentos?. Tenemos dos formas de evitar esto: usar los auto scripts que nos ofrece live-build o crear nuestro propio script automático.

Ejemplo de auto scripts

Al llamar por primera vez al comando lb config, aparte del directorio config/ también creamos el directorio auto/. Bajo este directorio podemos crear scripts que se llamen igual que los comandos de live-builder y que serán llamados cada vez que se ejecute el comando con el que comparten nombre. Esta es la mejor forma de tenerlo todo ordenado y la recomendada a continuación un ejemplo de auto scripts.

auto/config

#!/bin/sh
lb config noauto \
  --packages-lists "standard" \
  "${@}"

auto/clean

#!/bin/sh
lb clean noauto "${@}"
rm -f binary.log

auto/build

#!/bin/sh
lb build noauto "${@}" 2>&1 | tee binary.log

En cada comando que creemos hemos de añadir el parámetro noauto para evitar que el script se llame a si mismo recursivamente. También debemos tener en cuenta que hemos de ir añadiendo en cada comando ${@} si queremos que utilice los argumentos que le pasemos al llamarlo desde la consola. Por último, no hemos de olvidar que los scripts deben tener permisos de ejecución:

$ chmod +x auto/*

Crear nuestro propio script automático

Esto no es más que crear un script con todos los comandos a los que llamemos para construir el Live en orden. El ejemplo anterior quedaría de esta forma:

#!/bin/sh
lb config \
  --packages-lists "standard" \
  "${@}"
lb build 2>&1 | tee binary.log

Como podemos observar tiene diversas carencias respecto al ejemplo anterior: no permite pasar argumentos a lb build ni contempla operaciones adicionales para lb clean. Sin embargo es una forma mucho más sencilla y fácil de divulgar.

Personalizando la instalación de paquetes

Origen de los paquetes

Distribución, secciones y modo

Para elegir la distribución y las secciones simplemente hemos de pasarle los siguientes argumentos a lb config:

$ lb config \
  --distribution sid \
  --archiver-areas "main contrib non-free"

El modo es una opción experimental que designa como base del sistema una distribución derivada de Debian. Por defecto --mode está establecido en debian pero se puede elegir también entre ubuntu y emdebian para tomar como base uno de estos sitemas.

Mirrors

Repositorios adicionales

Eligiendo paquetes a instalar

Como argumento de lb config

--packages ""

Listas de paquetes

Listas de paquetes predefinidas
--packages-lists ""
/usr/share/live/build/lists/
Listas de paquetes locales
config/chroot_local-packageslists/.
*.list
#include <gnome>
#if ARCHITECTURE...

chroot_local-packages

Configurando APT

Personalizando el contenido del Live

Includes

chroot_local-includes

Para añadir o reemplazar archivos en el sistema de archivos de nuestro Live simplemente hemos de añadirlos en la carpeta config/chroot_local-includes. Este directorio se corresponde con el directorio raíz de nuestro Live. Por ejemplo, para añadir el archivo /home/user/prueba.txt lo copiaremos en config/chroot_local-includes/home/user/prueba.txt.

$ mkdir -p config/chroot_local-includes/home/user
$ cp /foo/bar/prueba.txt config/chroot_local-includes/home/user/

binary_local-includes

Para añadir archivos en el sistema de archivos de nuestro binario hemos de añadirlos en la carpeta config/binary_local-includes. Funciona de manera similar al chroot_local-includes

Hooks

chroot_local-hooks

Para iniciar comandos durante la fase de chroot, podemos crear scripts que contengan los comandos bajo el directorio config/chroot_local-hooks. Los scripts de este directorio serán iniciados en la fase final de chroot. live-build provee algunos ejemplos en el directorio /usr/share/live/build/hooks/.

Hooks al inicio del Live

Para ejecutar comandos durante el inicio de nuestro Live, hemos de crear scripts bajo el directorio config/chroot_local-includes/lib/live/config/ con un número de secuencia como prefijo.

binary_local-hooks

Para ejecutar comandos durante la creación del binario, hemos de añadir los scripts en el directorio. Estos serán iniciados una vez se hayan llevado a cabo todos los comandos de creación del binario y justo antes de llevar a cabo el binary_checksums, el último comando a realizar.

F.A.Q.

  1. lh config no crea ningún directorio de configuración y/o muestra un error en pantalla.
    • Comprueba que el directorio sobre el que se está ejecutando el script no contenga espacios en su dirección. También comprueba que has declarado correctamente los argumentos.
  2. lh build falla durante el proceso.
    • Es muy probable que alguno de los argumentos declarados en lh config sea incompatible con otro o que no funcione correctamente. En la medida de lo posible, trata de reportar el bug para que pueda ser reparado.
  3. ¿Hay alguna otra página con información y/o ejemplos?
  4. ¿Se puede modificar un Live si no dispongo de los archivos de configuración o del chroot?
    • Si usa una imagen creada con squashfs, .

Referencias

  1. Debian Live Project.
  2. live-magic en Debian Package Tracking System.
  3. lb_build es un comando de alto nivel cuya función es llamar secuencialmente a los comandos de alto nivel lb_bootstrap, lb_chroot, lb_binary y lb_source.
  4. aptitude resuelve la dependencia instalando debootstrap por defecto.
  5. Installing live-build from source. Manual oficial. Es inglés.
  6. Installing live-build from snapshots. Manual oficial. Es inglés.