* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

Ejemplo de Draklive

Tras toda la teoría, pasemos a un pequeño ejemplo práctico y veamos cómo hacer nuestro LiveUSB paso a paso.

Este ejemplo sirve para crear un sistema live, pero no EL sistema live definito. Es decir, que con lo aquí indicado se obtendrá (o debería) un sistema live perfectamente funcional, pero en absoluto optimizado. No se tratarán ni deshabilitación de servicios, ni configuraciones por defecto, ni nada de nada. Es lo que es, un ejemplo para ver desde un punto de vista práctico todo lo comentado hasta ahora.

El sistema live a generar será tanto un LiveCD como un LiveUSB (con arranque extra mediante CD) para Mandriva 2008.1 y desde Mandriva 2008.1. Siempre y cuando la versión de la distribución del sistema live sea la misma que la versión de la distribución en la que se genera, no debería haber problema. Las mezclas es lo que suele darlos.

Preparación

Aunque Draklive sólo puede ejecutarse como root, lo que yo hago (y será lo que haga en este ejemplo) es hacerlo todo como mi usuario normal (preparar el entorno de trabajo, editar las configuraciones, etc) y únicamente trabajar como root para invocar desde consola Draklive con las opciones pertinentes, ya que es mucho más cómodo. Además, los directorios de construcción y demás usados por Draklive también están en mi directorio ya que Draklive necesita bastante espacio para trabajar, la partición en la que tengo los directorios personales es mucho más grande que la raíz. Por tanto, a partir de ahora supondremos que vamos a trabajar en un directorio llamado MandrivaLive en algún lugar del directorio personal de nuestro usuario normal.

Lo primero de todo es preparar el entorno de Draklive. Como ya se indicó en su momento, lo mejor es instalar por urpmi el paquete de Draklive para la distribución, y ya. Dado que estamos en Mandriva 2008.1, por dependencias se instalarán además todos los archivos de configuración en /etc/draklive-config-One/.

Copiaremos los contenidos de dicho directorio (es decir, los directorios config, extra, files, patches y tools) al directorio config dentro de MandrivaLive. Así pues, rutaCompleta/MandrivaLive/config será el directorio base que utilizará Draklive.

De todos los archivos copiados, los más importantes serán config/config/live.cfg y config/config/settings.cfg, que serán, respectivamente, el archivo de configuración y el archivo de parámetros.

Configuración

Ahora que ya tenemos la configuración, lo siguiente será adecuarla a nuestras necesidades personales. Lo que haremos será partir de los archivos de configuración y parámetros copiados y personalizarlos.

Para generar el sistema live se utilizará un sistema instalado en una máquina virtual, por lo que se desechará la configuración específica del paso install. Si usar una máquina virtual no es una posibilidad para ti por el motivo que sea... pues tendrás que aprender a lidiar con dicho paso en toda su gloria :)

Empecemos con el archivo de parámetros. Dado que la instalación la haremos en la máquina virtual, podemos eliminar los parámetros repository, additional_repository, desktop, region, pack y default_user. Como ya se explicó, y no sólo por no usar el paso install, también nos cargaremos el parámetro commercial.

Estableceremos el parámetro arch a i586 (vamos, suponiendo que estemos creando un sistema live de 32 bits que es lo más común), media a usb o cdrom según queramos un LiveUSB o un LiveCD/DVD, y el nombre y el producto a lo que nos apetezca.

Dado que trabajaremos en el directorio personal de nuestro usuario, necesitamos añadir dos parámetros no presentes en la configuración de Mandriva, chroot y builddir, para indicar dónde está el sistema a partir del que generar el sistema live, y dónde guardar los resultados de la ejecución de Draklive.

El resultado será algo como (lógicamente con las rutas adaptadas a cada caso particular):

chroot=/rutaCompleta/MandrivaLive/chroot
builddir=/rutaCompleta/MandrivaLive/build
arch=i586
media=usb
name=mandriva-linux-2008-spring
product=ejemplo-draklive

Pasemos ahora a la configuración pura y dura. Aunque aquí eliminaremos los elementos que no sean necesarios, pueden dejarse intactos (ya que no se van a usar) o comentarse sin eliminarse (comenzando cada línea a comentar con el símbolo #) para que se vea que no se usarán.

Las variables iniciales no nos interesan, así que fuera. El elemento workdir recordemos que no se usa para nada, así que fuera también.

Vamos dentro de system. El elemento root no se usa en Draklive, sino que se utiliza directamente el parámetro chroot, por lo que podemos eliminarlo. Como no usamos paso install, podemos eliminar también los elementos repository, auto_install, install_env, preselect_kdm_user (junto a su condicional previo), langs_always, files, remove_files, stage2_updates, patches, erase_rpms, rpms, disable_services, postInstall y additional_media.

Ataquemos ahora al resto de elementos de system. hide_media_dirs ya dije en su momento que no sabía qué hacía, pero por el nombre no parece importante (ocultar directorios del medio, o algo parecido), así que lo elimino. En cuanto a module_options, parece que limita a 64 el número de archivos de loop. Aunque tampoco sé qué implicaciones tiene... esto sí parece importante o al menos recomendable, ya que incluso la configuración del SVN más reciente lo tiene, así que lo mantengo. Como exclude_modules está vacío, lo elimino.

Ahora nos encontramos con un problema específico de Mandriva 2008.1. Según se puede ver en el registro de cambios de live.cfg, podemos ver que el cambio se introdujo en el commit 416: use custom unionfs 1.4 module for USB live to fix branch management (and do not use rpm db hack in this case), es decir, utilizar módulo de unionfs 1.4 personalizado para LiveUSB para solucionar la gestión de ramas (y no usar el truquillo para la base de datos de rpm en este caso).

Vamos, que en el módulo de UnionFS de Mandriva 2008.1 había algún tipo de problema y era necesario utilizar un módulo distinto, metido directamente con Draklive en initrd. El caso es que, aunque juraría haberlo visto en el SVN, no soy capaz de encontrarlo. El caso es que, no sé si porque en el kernel de Mandriva 2008.1 más actualizado ya está resuelto, o porque no encontré realmente el fallo en cuestión aún, sin utilizar dicho módulo especial... a mí me funciona tanto el LiveCD como el LiveUSB. Así que... eliminamos ;)

En el segundo bloque de initrd_post puede verse en la documentación que es un apaño para evitar el bug de unionfs, y que sólo se aplica cuando no se está creando un LiveUSB porque el LiveUSB ya tiene el módulo especial. No obstante, nosotros no estamos usando ese módulo especial, por lo que eliminamos el condicional, aunque dejamos el apaño (Blino sabe lo que se hace ;) ). Incluso si el apaño no es estrictamente necesario, utilizarlo no parece estropear nada (una vez probado el sistema live generado), así que...

Si vemos la configuración de Mandriva 2009.0 podemos ver cómo el problema ya está resuelto y el apaño ya no es necesario. Concretamente, en el registro de cambios de live.cfg podemos ver que se eliminó en el commit 557, remove old rpm workaround, es decir, eliminar antiguo apaño de rpm.

Respecto al primer bloque de initrd_post, lo que hace es, en caso de que el medio sea una memoria USB, montar los directorios temporales y de log en un sistema de archivos temporal, en lugar de en el propio medio. De este modo, estarán en memoria RAM, desapareciéndose al apagar el sistema, y no ocupando memoria ni realizando escrituras de forma innecesaria. Lógicamente en un LiveCD no es necesario ya que nada se escribe en el CD.

Para acabar con los elementos de system, dejaremos vga_mode a 788, que equivale a una resolución de 800x600 y 16 bits de color, adecuado para la mayoría de las pantallas (aunque con los nuevos tamaños que surgen, con el tiempo seguramente acabe usándose un modo distinto). En cuanto a gfxboot, el cargador de arranque gráfico, está desactivado en los USB. Según el comentario adjunto, da problemas en algunos sistemas, así que... Prefiero un cargador de arranque por texto que funcione a uno gráfico que pueda fallar.

Sigamos con los elementos posteriores a system. Nos encontramos con loopbacks, que como ya indiqué no tengo ni idea de lo que hace. Parece crear archivos SquashFS con un conjunto de archivos a excluir del sistema live... Considerando que siempre lo eliminé y no pasó nada... esta vez no seré menos ;)

Para terminar con nuestra limpieza de elementos innecesarios debido a no ser el paso install, eliminaremos los elementos regions y packs.

A continuación nos encontramos dos condicionales, de forma que si el medio es un cdrom se utilizan una serie de elementos, y si el medio es un usb se utilizan otros. Estos elementos son los que permiten especificar las características del medio y el esquema de montaje a utilizar.

En el caso del cdrom, tenemos un condicional en media que se aplica sólo en el caso de que el producto sea Mandriva One, de forma que la etiqueta del medio se establece a MandrivaOne se copian ciertos archivos con información sobre la One. Como no estamos haciendo una Mandriva One, eliminaremos el condicional y su contenido. No obstante, podemos ponerle una etiqueta a nuestro CD/DVD para darle un toque más personal si queremos ;)

El otro elemento aparte de media que cambia según sea un LiveUSB o un LiveCD es mount. Para un LiveCD/DVD, el esquema de montaje apropiado es el volatil, que como era de esperar es el que está configurado. Únicamente tendremos que eliminar el parámetro referido a los módulos que se le pasa ya que no los vamos a utilizar.

Veamos por último el caso del usb. Dentro de media, storage y extra_boot los dejamos como están para tener un LiveUSB que, además, tenga arranque por CD. El tiempo de espera del cargador de arranque, indicado en bootloader_timeout, también está bien: simplemente arranca inmediatamente. Este elemento puede establecerse también para el caso del cdrom con el resultado esperado.

Las opciones de montaje, mount_options, indican mediante dmask=0000 que todos los usuarios podrán leer, escribir y acceder a los directorios de la memoria USB, y mediante fmask=0111 que todos los usuarios podrán leer y escribir pero no ejecutar los archivos de la memoria USB. Todo esto es sobre la memoria USB una vez que el sistema live está funcionando, pero no sobre el sistema live en sí mismo. Aquí puede verse más información sobre máscaras de bits.

Al igual que en el caso del cdrom, media tiene un condicional que en este caso se aplica si el producto es Mandriva Flash, estableciendo la etiqueta, el nombre del sistema live, copiando archivos adicionales y borrando otros (sigo sin saber cómo funciona exactamente ese elemento de configuración). Al igual que con el cdrom, eliminamos el condicional y lo que contiene, y si queremos podemos agregar una etiqueta y un nombre al sistema live. Mucha atención en la etiqueta, ya que si lleva letras minúsculas el arranque fallará debido al bug del Draklive de Mandriva 2008.1 ya mencionado en la documentación de la configuración.

Finalmente, queda el esquema de montaje, que como era de esperar está establecido a un esquema persistente. Si bien en el anterior caso prescindimos de todos los parámetros, en éste necesitamos indicar el tamaño que tendrá el archivo de loopback en el que se almacenarán los cambios del sistema live. El tamaño lógicamente dependerá del espacio disponible en la memoria USB, el uso que vayamos a darle al LiveUSB, etc.

Tras todos los cambios mencionados, el resultado será algo como (algunas líneas están tabuladas de forma especial para no romper la apariencia de la página):

#!/usr/bin/perl -cw

my $_l = {
    system => {
        module_options => {
            loop => "max_loop=64",
        },
        vga_mode => 788,
        #- disable gfxboot on USB, buggy with grub on some systems
        gfxboot => $live->{settings}{media} ne 'usb',
        initrd_post =>
          join("\n",
               if_($live->{settings}{media} eq 'usb', do {
                   my $tmp = "/live/tmp";
                   my @sticky = qw(/var/tmp /tmp);
                   (
                       "sh -c 'mkdir -p $tmp'",
                       "mount -t tmpfs none $tmp",
                       "mkdir $tmp/var",
                       (map {
                           ("mkdir $tmp$_",
"mount -o dirs=$tmp$_=rw:/live/distrib$_=ro -t unionfs unionfs $_")
                       } (qw(/var/log), @sticky)),
                       "chmod 1777 @sticky",
                   );
               }),
#- workaround an unionfs bug that breaks rpm's __db files,
#- which can be reproduced by
#-  rm -f /var/lib/rpm/__db.*; rpm -q basesystem; ldconfig -X; rpm -q basesystem
               "sh -c 'rm -f /var/lib/rpm/__db.*'",
               "mkdir /tmp/rpm",
               "mount -t tmpfs none /tmp/rpm",
               "mkdir /tmp/rpm/real",
               "mount --bind /var/lib/rpm /tmp/rpm/real",
               "mkdir /tmp/rpm/fake",
               "sh -c 'ln -sf /tmp/rpm/real/* /tmp/rpm/fake'",
               "mount --bind /tmp/rpm/fake /var/lib/rpm",
          ),
    },
    if_($live->{settings}{media} eq 'cdrom',
        media => {
            storage => 'cdrom',
            source => "LABEL=KalvyCD",
            bootloader_timeout => 1,
        },
        mount => $custom{mounts}{volatile_squash_union}->(),
    ),
    if_($live->{settings}{media} eq 'usb',
        media => {
            storage => 'usb',
            bootloader_timeout => 1,
            mount_options => 'dmask=0000,fmask=0111',
            extra_boot => [ qw(cdrom) ],
            source => "LABEL=KALVYUSB",
            title => "Mandriva Draklive Tutorial",
        },
        mount => $custom{mounts}{squash_union}->('400M'),
    ),
};

Ejecución

Una vez terminada la configuración, pasamos al uso de Draklive en sí. La instalación, como ya se indicó, la realizaremos en una máquina virtual. Para ello, nada mejor que referirnos al artículo concreto sobre dicho tema.

Una vez instalada la distribución en la máquina virtual, lo siguiente será montar la partición de la imagen del disco duro usado en la máquina virtual en el directorio en que el paso install la habría instalado. Para ello crearemos el directorio chroot dentro de MandrivaLive, y dentro de chroot un nuevo directorio con el nombre que identifique al sistema live que estamos generando según sus parámetros. Dicho nombre coincidirá con el subdirectorio en build en el que se almacenarán los resultados de la ejecución, como se explicó en la documentación de los parámetros.

Para los parámetros arriba mostrados, el nombre será mandriva-linux-2008-spring-ejemplo-draklive-usb-i586, así que para montar la partición ejecutaremos como root en el directorio MandrivaLive (está dividido en dos líneas simplemente para que no estropee la organización de la página):

mount -o loop,offset=32256 -t ext3 mandriva.img \
chroot/mandriva-linux-2008-spring-ejemplo-draklive-usb-i586

(el offset es el resultado de ejecutar fdisk -lu mandriva.img y multiplicar las unidades por el comienzo de la partición a montar, que típicamente será la primera. Ejemplo en Manual: Usando QEMU)

Si no nos aclaramos con el nombre del directorio tampoco es mayor problema, ya que en cuanto ejecutemos alguno de los pasos de Draklive que lo necesiten (boot o loop) se quejará de que no encuentra algún archivo, y ya podremos ver cómo tendríamos que llamar al directorio.

Una vez montada la partición es como si ya hubiésemos ejecutado el paso install de Draklive. Así que ahora ejecutaremos los dos siguientes:

draklive --boot --loop --config-root /rutaCompleta/MandrivaLive/config

Hasta aquí es común tanto si estamos haciendo un LiveCD/DVD o un LiveUSB (aunque tendremos que repetir los pasos tras cambiar el parámetro media si queremos generar un LiveCD después de un LiveUSB, o viceversa). Las (pequeñas) diferencias comienzan ahora.

Si estuviésemos haciendo un LiveUSB y éste estuviese configurado para generar un CD de arranque, ahora ejecutaríamos:

draklive --boot-image cdrom --master \
--config-root rutaCompleta/MandrivaLive/config

creando así la imagen ISO del CD de arranque.

Para grabar el LiveUSB en la memoria USB:

draklive --record --device /dev/dispositivoEnQueGrabar \
--config-root /rutaCompleta/MandrivaLive/config

En cambio, si estuviésemos haciendo un LiveCD/DVD, únicamente tendríamos que generar la imagen ISO del propio sistema live:

draklive --master --config-root /rutaCompleta/MandrivaLive/config

Una vez hecha la imagen maestra para el CD o tras haber grabado el USB ya no es necesario tener montada la imagen. Si al ir a desmontarla el dispositivo aparece como ocupado, puede verse qué procesos están usando dicho dispositivo mediante fuser -vm directorio-de-montaje.

Tanto en el caso del CD de arranque como en el LiveCD/DVD quedaría grabarlo en el medio, pero... ¿no sería mejor comprobar que funcionan antes de hacer la grabación? (En el caso de LiveUSBs no sé cómo se podría hacer sin grabar previamente el LiveUSB, de ahí que ya se explicase cómo grabarlo)

Comprobación

Para comprobar que nuestro sistema live funciona como esperamos, la solución más obvia sería grabarlo y arrancar el ordenador con él.

Pero si disponemos de una máquina virtual podemos probar si el LiveCD/DVD funciona a partir únicamente de su imagen ISO, sin tener que grabarla. Si la máquina virtual tiene soporte para USB, como QEMU, podremos incluso probar si el CD de arranque para un LiveUSB funciona (y por tanto el LiveUSB) sin tener que grabarlo en un CD.

Aquí se expondrá cómo hacerlo con QEMU, aunque el procedimiento será similar en el caso de otras máquinas virtuales.

Para arrancar QEMU con la imagen ISO de un LiveCD/DVD:

qemu -boot d -cdrom imagen.iso

Nótese que esta orden es la mínima expresión necesaria para arrancar desde la imagen ISO. Pueden añadirse las opciones de QEMU que se deseen (siendo especialmente aconsejable -kernel-kqemu, para activar el módulo de aceleración en todo su esplendor).

Respecto a la imagen.iso, como es natural ahí deberá ponerse el nombre real de la imagen ISO a utilizar. En este caso, estará dentro del directorio build, el directorio que identifica a la distribución que estamos generando según lo indicado en el archivo de parámetros, dist, y será el archivo de imagen ISO que identifica a la distribución que estamos generando según lo indicado en el archivo de parámetros.iso. Suena un poco lioso, pero en cuanto entres en build fijo que lo encuentras.

Para arrancar QEMU con la imagen ISO de un CD de arranque para un LiveUSB:

qemu -boot d -cdrom imagen.iso -usb -usbdevice host:vendor_id:product_id

Lógicamente, el LiveUSB debe estar conectado cuando ejecutemos esta orden. Al igual que con la orden para LiveCDs/DVDs, éstos son sólo las opciones básicas para el arranque, pero pueden añadirse cuantas sean necesarias. imagen.iso se encontrará en el directorio dist antes mencionado, y su nombre será similar al de la imagen del sistema live, pero con el sufijo -boot-cdrom (antes del .iso).

Para conocer el vendor_id y el product_id, la forma más sencilla es, con el USB conectado, ejecutar lspcidrake -v, buscar nuestra memoria USB en la lista y ver ahí tanto el vendor_id como el product_id.

Otra forma, igualmente sencilla, es, de nuevo con el USB conectado, arrancar QEMU sin la opción usbdevice, pasar a la consola de QEMU pulsando Ctrl-Alt-2, escribir info usbhost y ver ahí de nuevo tanto el vendor_id como el product_id.

En la versión 0.9.0 de QEMU (al menos, puede que haya otras afectadas), existe un bug que hace que tras arrancar QEMU con un USB conectado, dicho USB desaparecerá por completo de nuestro sistema real. Ni siquiera reconocerá que está conectado, mucho menos montado. Para que vuelva a aparecer, deberemos desconectarlo y conectarlo de nuevo (una vez hayamos cerrado QEMU).

Una vez que sabemos que nuestro LiveCD/DVD o la imagen ISO de arranque por CD del LiveUSB funcionan correctamente, podremos grabarla mediante cualquier programa de grabación tipo K3B, Brasero...

Y ya tenemos nuestro ansiado sistema live listo para lucir, lo que nos convertirá en el alma de las fiestas, nos volverá mucho más sexys y hará que liguemos cuando queramos, con quien queramos y como queramos*.

Y aquí termina este ejemplo. Así pues, dirijámonos prestos y veloces al último artículo de este manual, solución de problemas, si es que todavía queda alguien con suficiente paciencia como para seguir leyendo... ¡Ánimo mis valientes!

* El autor de este manual no se hace responsable de los posibles efectos adversos que creerse a pies juntillas lo aquí expuesto pudiera provocar.