Live manual Debian Live

# Debian Live Manual

# Ejemplos

803

# 16. Ejemplos

804

Este capítulo ofrece ejemplos de creación de imágenes de sistemas en vivo para casos de uso específicos. Si se es nuevo en la creación de una imagen en vivo propia, se recomienda leer primero los tres tutoriales en secuencia, ya que cada uno enseña nuevas técnicas que ayudan a utilizar y entender los ejemplos restantes.

805

16.1 Uso de los ejemplos

806

Para poder seguir estos ejemplos es necesario un sistema donde crearlos que cumpla con los requisitos enumerados en Requisitos y tener live-build instalado tal y como se describe en Instalación de live-build.

807

Hay que tener en cuenta que, para abreviar, en estos ejemplos no se especifica una réplica local para la creación de la imagen. Es posible acelerar las descargas considerablemente si se utiliza una réplica local. Se puede especificar las opciones cuando se usa `lb config`, tal y como se describe en Réplicas de Distribution utilizadas durante la creación, o para más comodidad, establecer el valor por defecto para la creación del sistema en `/etc/live/build.conf`. Basta con crear este fichero y en el mismo, establecer las variables `LB_MIRROR_*` correspondientes a la réplica preferida. Todas las demás réplicas usadas en el proceso de creación usarán estos valores por defecto. Por ejemplo:

808

LB_MIRROR_BOOTSTRAP="http://mirror/debian/"
LB_MIRROR_CHROOT_SECURITY="http://mirror/debian-security/"
LB_MIRROR_CHROOT_BACKPORTS="http://mirror/debian-updates/"

809

16.2 Tutorial 1: Una imagen predeterminada

810

Caso práctico: Crear una primera imagen sencilla, aprendiendo los fundamentos de live-build.

811

En este tutorial, vamos a construir una imagen ISO híbrida por defecto que contenga únicamente los paquetes base (sin Xorg) y algunos paquetes de soporte, como un primer ejercicio en el uso de live-build.

812

No puede ser más fácil que esto:

813

$ mkdir tutorial1 ; cd tutorial1 ; lb config

814

Si se examina el contenido del directorio `config/` se verá almacenada allí una configuración en esqueleto preparada para ser personalizada o en este caso para ser usada inmediatamente para construir una imagen por defecto.

815

Ahora, como superusuario, crear la imagen, guardando un log con `tee` mientras se crea.

816

# lb build 2>&1 | tee build.log

817

Assuming all goes well, after a while, the current directory will contain `live-image-amd64.hybrid.iso`. This ISO hybrid image can be booted directly in a virtual machine as described in Testing an ISO image with Qemu and Testing an ISO image with VirtualBox, or else imaged onto optical media or a USB flash device as described in Burning an ISO image to a physical medium and Copying an ISO hybrid image to a USB stick, respectively.

818

16.3 Tutorial 2: Una utilidad de navegador web

819

Caso práctico: Crear una utilidad de navegador web, aprendiendo a aplicar personalizaciones.

820

En este tutorial, se creará una imagen adecuada para su uso como utilidad de navegador web, esto sirve como introducción a la personalización de las imágenes de sistemas en vivo.

821

$ mkdir tutorial2
$ cd tutorial2
$ lb config
$ echo "task-lxde-desktop firefox-esr" >> config/package-lists/my.list.chroot

822

La elección de LXDE para este ejemplo refleja el deseo de ofrecer un entorno de escritorio mínimo, ya que el enfoque de la imagen es el uso individual que se tiene en mente, el navegador web. Se podría ir aún más lejos y ofrecer una configuración por defecto para el navegador web en `config/includes.chroot/etc/iceweasel/profile/`, o paquetes adicionales de soporte para la visualización de diversos tipos de contenido web, pero se deja esto como un ejercicio para el lector.

823

Crear la imagen, de nuevo como superusuario, guardando un log como en el Tutorial 1:

824

# lb build 2>&1 | tee build.log

825

De nuevo, verificar que la imagen está bien y probarla igual que en el Tutorial 1.

826

16.4 Tutorial 3: Una imagen personalizada

827

Caso práctico: Crear un proyecto para conseguir una imagen personalizada, que contenga el software favorito para llevárselo en una memoria USB donde quiera que se vaya, y hacerlo evolucionar en revisiones sucesivas, tal y como vayan cambiando las necesidades y preferencias.

828

Como nuestra imagen personalizada irá cambiando durante un número de revisiones, si se quiere ir siguiendo esos cambios, probar nuevas cosas de forma experimental y posiblemente volver atrás si no salen bien, se guardará la configuración en el popular sistema de control de versiones `git`. También se utilizarán las mejores prácticas de configuración automática a través de scripts `auto` como se describe en Gestionar una configuración.

829

16.4.1 Primera revisión

830

$ mkdir -p tutorial3/auto
$ cp /usr/share/doc/live-build/examples/auto/* tutorial3/auto/
$ cd tutorial3

831

Editar `auto/config` del siguiente modo:

832

#!/bin/sh
lb config noauto \
--distribution stable \
"${@}"

833

Ejecutar `lb config` para generar el árbol de configuración, utilizando el script `auto/config` que justo se acaba de crear:

834

$ lb config

835

Completar la lista de paquetes local:

836

$ echo "task-lxde-desktop spice-vdagent hexchat" >> config/package-lists/my.list.chroot

837

First, `--distribution stable` ensures that ⌠stable} is used instead of the default {testing⌡. Second, we have added spice-vdagent for easier testing the image in qemu. And finally, we have added an initial favourite package: hexchat.

838

Ahora, crear la imagen:

839

# lb build

840

Tener en cuenta que a diferencia de los dos primeros tutoriales, ya no se tiene que escribir `2>&1 | tee build.log` ya que esto se incluye ahora en `auto/build`.

841

Una vez que se ha probado la imagen (como en el Tutorial 1) y se ha asegurado de que funciona, es el momento de iniciar el repositorio git, añadiendo sólo los scripts auto que se acaba de crear, y luego hacer el primer commit:

842

$ git init
$ cp /usr/share/doc/live-build/examples/gitignore .gitignore
$ git add .gitignore auto config
$ git commit -m "Initial import."

843

16.4.2 Segunda revisión

844

In this revision, we're going to clean up from the first build, replace the smplayer package with vlc package, rebuild, test and commit.

845

El comando `lb clean` limpiará todos los ficheros generados en las primeras creaciones a excepción del caché, lo cual ahorra tener que volver a descargar de nuevo los paquetes. Esto asegura que el siguiente `lb build` vuelva a ejecutar todas las fases para regenerar los ficheros de nuestra nueva configuración.

846

# lb clean

847

Now install the vlc package before the lxde package chooses between smplayer, vlc and mplayer-gui in our local package list in `config/package-lists/my.list.chroot`:

848

$ echo "vlc task-lxde-desktop spice-vdagent hexchat" >> config/package-lists/my.list.chroot

849

Crear de nuevo:

850

# lb build

851

Probar, y cuando se esté satisfecho, enviar la próxima revisión al git:

852

$ git commit -a -m "Replacing smplayer with vlc."

853

Por supuesto, es posible hacer cambios más complicados en la configuración, tal vez añadiendo ficheros en los subdirectorios de `config/`. Cuando se envian nuevas revisiones, hay que tener cuidado de no editar a mano o enviar los ficheros del nivel superior en `config` que contienen variables `LB_*` ya que estos son productos de creación también y son siempre limpiados por `lb clean` y recreados con `lb config` a través de sus respectivos scripts `auto`.

854

Hemos llegado al final de nuestra serie de tutoriales. Si bien son posibles muchos más tipos de personalización, aunque sólo sea con las pocas características explicadas en estos sencillos ejemplos, se puede crear una variedad casi infinita de imágenes diferentes. Los ejemplos que quedan en esta sección abarcan varios casos de usos diferentes procedentes de las experiencias recogidas de los usuarios de sistemas en vivo.

855

16.5 Un cliente VNC kiosk

856

Caso Práctico: Crear una imagen con live-build para que se conecte directamente a un servidor VNC al arrancar.

857

Crear un directorio de construcción y lanzar una configuración de esqueleto en su interior, desactivando «recommends» para conseguir un sistema mínimo. Y a continuación, crear dos listas iniciales de paquetes: La primera generada con un script proporcionado por live-build llamado `Packages` (ver Generar listas de paquetes), y la segunda lista una que incluya xorg, gdm3, metacity y xvnc4viewer.

858

$ mkdir vnc-kiosk-client
$ cd vnc-kiosk-client
$ lb config --apt-recommends false
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo "xorg gdm3 metacity xtightvncviewer" > config/package-lists/my.list.chroot

859

Como se explica en Ajuste de APT para ahorrar espacio puede ser necesario volver a agregar algunos paquetes recomendados para que la imagen funcione correctamente.

860

Una manera fácil de conocer todos los «recommends» es utilizar apt-cache. Por ejemplo:

861

$ apt-cache depends live-config live-boot

862

En este ejemplo, descubrimos que teníamos que volver a incluir varios paquetes recomendados por live-config y live-boot: `user-setup` para hacer funcionar el inicio automático de sesión y `sudo` programa esencial para apagar el sistema. Además, podría ser útil añadir `live-tools` para poder copiar la imagen en la memoria RAM y `eject` para finalmente poder expulsar el medio en vivo. Por eso:

863

$ echo "live-tools user-setup sudo eject" > config/package-lists/recommends.list.chroot

864

Después, crear el directorio `/etc/skel` en `config/includes.chroot` y poner dentro un fichero `.xsession` personalizado para el usuario que por defecto ejecutará metacity e iniciará el xvncviewer, conectándo al puerto `5901` de un servidor en `192.168.1.2`:

865

$ mkdir -p config/includes.chroot/etc/skel
$ cat > config/includes.chroot/etc/skel/.xsession << EOF
#!/bin/sh
/usr/bin/metacity &
/usr/bin/xvncviewer 192.168.1.2:1
exit
EOF

866

Crear la imagen:

867

# lb build

868

Disfrutarlo.

869

16.6 A minimal image for a 512MB USB key

870

Use case: Create a default image with some components removed in order to fit on a 512MB USB key with a little space left over to use as you see fit.

871

When optimizing an image to fit a certain media size, you need to understand the tradeoffs you are making between size and functionality. In this example, we trim only so much as to make room for additional material within a 512MB media size, but without doing anything to destroy the integrity of the packages contained within, such as the purging of locale data via the localepurge package, or other such "intrusive" optimizations. Of particular note, we use `--debootstrap-options` to create a minimal system from scratch and `--binary image hdd` to create an image that can be copied to a USB key.

872

$ lb config --binary-image hdd --apt-indices false --apt-recommends false --debootstrap-options "--variant=minbase" --firmware-chroot false --memtest none

873

Para hacer que la imagen funcione correctamente, tenemos que volver a añadir, al menos, dos paquetes recomendados, que son excluidos por la opción `--apt-recommends false`. Ver Ajuste de APT para ahorrar espacio

874

$ echo "user-setup sudo" > config/package-lists/recommends.list.chroot

875

Additionally, you'll want to have network access, so another two recommended packages need to be re-added:

876

$ echo "ifupdown isc-dhcp-client" >> config/package-lists/recommends.list.chroot

877

Ahora, crear la imagen de forma habitual:

878

# lb build 2>&1 | tee build.log

879

On the author's system at the time of writing this, the above configuration produced a 298MiB image. This compares favourably with the 380MiB image produced by the default configuration in Tutorial 1, when `--binary-image hdd` is added.

880

Dejar fuera los índices de APT con `--apt-indices false` ahorra una cantidad importante de espacio, la desventaja es que será necesario hacer un `apt-get update` antes de usar apt en el sistema en vivo. Excluyendo los paquetes recomendados con `--apt-recommends false` se ahorra un poco de espacio adicional a costa de omitir algunos paquetes que de otro modo podría esperarse que estuvieran alli. `--debootstrap-options "--variant=minbase"` preinstala un sistema mínimo desde el principio. El hecho de no incluir automáticamente paquetes de firmware con `--firmware-chroot false` también ahorra un poco de espacio. Y por último, `--memtest none` evita la instalación de un comprobador de memoria.

881

Note: A minimal system can also be achieved using hooks, like for example the `stripped.hook.chroot` hook found in `/usr/share/doc/live-build/examples/hooks`. It may shave off additional small amounts of space and produce an image of 277MiB. However, it does so by removal of documentation and other files from packages installed on the system. This violates the integrity of those packages and that, as the comment header warns, may have unforeseen consequences. That is why using a minimal debootstrap is the recommended way of achieving this goal.

882

16.7 Un escritorio GNOME con variante local e instalador

883

Caso práctico: Crear una imagen que contenga el escritorio gráfico GNOME, la variante local Suiza y un instalador.

884

We want to make an iso-hybrid image using our preferred desktop, in this case GNOME, containing all of the same packages that would be installed by the standard Debian installer for GNOME.

885

El primer problema es descubrir los nombres de las tareas adecuadas. En la actualidad, live-build no puede ayudar en esto. Aunque podríamos tener suerte y encontrarlos a base de pruebas, hay una herramienta, `grep-dctrl`, para extraerlos de las descripciones de tareas en tasksel-data, para proceder, asegurarse de tener ambas cosas:

886

# apt-get install dctrl-tools tasksel-data

887

Ahora podemos buscar las tareas apropiadas, primero con:

888

$ grep-dctrl -FTest-lang de /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german

889

Con este comando, se descubre que la tarea se llama, sencillamente, german. Ahora, para encontrar las tareas relacionas:

890

$ grep-dctrl -FEnhances german /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german-desktop
Task: german-kde-desktop

891

En el momento del arranque se va a generar la variante local de_CH.UTF-8 y seleccionar la distribución del teclado ch. Ahora vamos a poner las piezas juntas. Recordando de Utilizar metapaquetes que los metapaquetes tienen el prefijo `task-`, especificamos estos parámetros del lenguaje en el arranque y a continuación añadimos los paquetes de prioridad estándar y los metapaquetes que hemos descubierto a la lista de paquetes de la siguiente manera:

892

$ mkdir live-gnome-ch
$ cd live-gnome-ch
$ lb config \
--bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch" \
--debian-installer live
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo task-gnome-desktop task-german task-german-desktop >> config/package-lists/desktop.list.chroot
$ echo debian-installer-launcher >> config/package-lists/installer.list.chroot

893

Note that we have included the debian-installer-launcher package to launch the installer from the live desktop.