Este capítulo contiene una breve descripción del proceso de creación de las imágenes en vivo y las instrucciones para el uso de los tres tipos de imágenes más utilizadas. El tipo de imagen más versátil, iso-hybrid, se puede utilizar en una máquina virtual, en medios ópticos u otros dispositivo de almacenamiento USB. En ciertos casos especiales, como para el uso de la persistencia, las imágenes hdd, pueden ser las más adecuadas para dispositivos USB. El capítulo termina con instrucciones para crear y usar una imagen de tipo net, que es un poco más complicado debido a la configuración necesaria en el servidor. Es un tema ligeramente avanzado para cualquier persona que no esté familiarizada con el arranque en red, pero se incluye aquí porque una vez que se realiza la instalación, es una forma muy conveniente para probar y desplegar imágenes de arranque en red local sin la molestia de tratar con los dispositivos de almacenamiento de la imagen.
A lo largo de todo el capítulo se hace a menudo referencia al nombre de las imágenes producidas por defecto por live-build. Si se descarga una imagen ya creada, el nombre puede variar.
Por lo general, un sistema en vivo se refiere a un sistema operativo que arranca en un equipo desde un medio extraíble, como un CD-ROM, dispositivo USB, o desde una red, listo para usar sin ningún tipo de instalación en la unidad de costumbre, con configuración automática en tiempo de ejecución (Ver Términos).
Debian Live, es un sistema Debian GNU/Linux, creado para una de las arquitecturas soportadas (actualmente amd64, i386, powerpc y sparc). Se compone de las siguientes partes:
Se puede usar live-build para crear la imagen del sistema a partir de ciertas especificaciones, incluir un kernel de Linux, su initrd y un gestor de arranque para ponerlos en funcionamiento, todo ello en un formato que depende del medio de almacenamiento elegido (imagen ISO9660, imagen de disco, etc.)
Independientemente del tipo de imagen, cada vez se tendrá que realizar los mismos pasos básicos para construir una imagen. Como primer ejemplo ejecutar la siguiente secuencia de comandos live-build para crear una imagen ISO híbrida básica que contiene sólo el sistema estándar de Debian sin X.org. Es adecuada para grabarla en un CD o DVD y también para copiarla en un dispositivo USB.
En primer lugar, se ejecuta el comando lb config. Esto creará una jerarquía «config/» en el directorio actual que será usada por otros comandos:
$ lb config
Al no pasar ningún parámetro a lb config, se indica que se quiere utilizar todas las opciones por defecto. Ver El comando lb config para más detalles.
Ahora que existe un jerarquía «config/», se puede crear la imagen con el comando lb build:
# lb build
Este proceso puede llevar un tiempo, dependiendo de la velocidad de la conexión de red. Cuando haya terminado, debería haber un fichero binary.hybrid.iso listo para ser usado en el directorio actual.
Después de construir o descargar una imagen ISO híbrida, las cuales se pueden obtener en ‹http://www.debian.org/CD/live/›, el siguiente paso habitual es preparar los medios de almacenamieto, ya sean medios ópticos CD-R(W) o DVD-R(W) o llaves USB.
Grabar una imagen ISO es fácil. Simplemente instalar wodim y usarlo desde el intérprete de comandos para grabar la imagen. Por ejemplo:
# apt-get install wodim
$ wodim binary.hybrid.iso
Las imágenes ISO preparadas con el comando isohybrid igual que las imágenes del tipo iso-hybrid producidas por defecto, pueden sencillamente copiarse a una llave USB con dd o con un programa equivalente. Conectar una llave USB con un tamaño suficiente para la imagen y determinar qué dispositivo es, al cual nos referiremos de ahora en adelante como ${USBSTICK}. Este nombre de «dispositivo» se refiere a la llave entera como por ejemplo /dev/sdb y ¡No a una partición como /dev/sdb1! Se puede encontrar el nombre del dispositivo correcto mirando la salida de dmesg después de conectar la llave, o mejor aún ejecutando ls -l /dev/disk/by-id.
Cuando se esté seguro de tener el nombre del dispositivo correcto, usar el comando dd para copiar la imagen a la llave. ¡Esto borrará de forma definitiva cualquier contenido previo en la llave!
$ dd if=binary.hybrid.iso of=${USBSTICK}
La primera vez que se arranque desde los medios de almacenamiento en vivo, ya sea CD, DVD, llave USB, o de arranque en red PXE, primero puede ser necesario algún tipo de configuración en la BIOS de la máquina. Dado que las BIOS varían mucho en sus características y combinaciones de teclas, no se puede entrar en el tema en profundidad aquí. Algunas BIOS proporcionan una tecla para abrir un menú de dispositivos de arranque que es la manera más fácil de hacerlo si se encuentra disponible en el sistema.
Una vez que se haya arrancado desde los medios de almacenamiento externos, se accede a un menú de arranque. Si se pulsa la tecla «enter», el sistema arrancará usando el modo por defecto Live y las opciones predeterminadas. Para obtener más información acerca de las opciones de arranque, ver la opción «help» del menú y también las páginas del manual de live-boot y live-config que se encuentran en el sistema en vivo.
Suponiendo que se ha seleccionado Live y arrancado una imagen en vivo por defecto con escritorio gráfico, después de que los mensajes de arranque hayan pasado, se habrá iniciado automáticamente una sesión como usuario user y se verá el escritorio preparado para ser usado. Si se ha arrancado una imagen sólo con consola como por ejemplo las imágenes predeterminadas standard o rescue se habrá iniciado automáticamente una sesión como usuario user y se verá el cursor del intérprete de comandos preparado para ser usado.
Ejecutar las imágenes en vivo en una máquina virtual (VM) puede ser un gran ahorro de tiempo para su desarrollo. Esto no está exento de advertencias:
Siempre que se pueda trabajar dentro de estas limitaciones, mirar que software VM hay disponible y elegir uno que sea adecuado según las necesidades.
La máquina virtual más versátil en Debian es QEMU. Si el procesador tiene soporte de hardware para virtualización, utilizar el paquete qemu-kvm en la descripción del paquete qemu-kvm se enumera brevemente la lista de requisitos.
En primer lugar, instalar qemu-kvm si el procesador lo soporta. Si no es así, instalar qemu, en cuyo caso el nombre del programa será qemu en vez de kvm en los siguientes ejemplos. El paquete qemu-utils también es útil para la creación de imágenes virtuales de disco con qemu-img.
# apt-get install qemu-kvm qemu-utils
Arrancar una imagen ISO es sencillo:
$ kvm -cdrom binary.hybrid.iso
Consultar las páginas del manual para más detalles.
Para probar una imagen ISO con virtualbox-ose:
# apt-get install virtualbox-ose virtualbox-ose-dkms
$ virtualbox
Crear una nueva máquina virtual, cambiar la configuración de almacenamiento para utilizar binary.hybrid.iso como dispositivo CD/DVD y arrancar la máquina.
$ echo virtualbox-ose-guest-x11 >> config/package-lists/my.list.chroot
Crear una imagen HDD es similar a una de tipo ISO híbrida en todos los aspectos, con la diferencia de que hay que especificar -b hdd y de que el nombre de la imagen final es binary.img que se puede copiar en medios ópticos. Es adecuada para el arranque desde dispositivos USB, discos duros USB y otros sistemas de almacenamiento portátil. Normalmente, se puede utilizar para este propósito una imagen ISO híbrida, pero es posible que la BIOS no maneje adecuadamente las imágenes híbridas. También es interesante una imagen HDD si se desea utilizar el espacio restante en los medios de almacenamiento para una partición con persistencia.
# lb clean --binary
Ejecutar el comando lb config como antes pero esta vez especificando el tipo de imagen HDD:
$ lb config -b hdd
Crear ahora la imagen con el comando lb build:
# lb build
Cuando termine el proceso de creación, debe haber un fichero llamado binary.img en el directorio actual .
La imagen binaria generada contiene una partición VFAT y el gestor de arranque syslinux, lista para ser copiada directamente en un dispositivo USB. Dado que utilizar una imagen HDD es igual a usar una imagen ISO híbrida en un USB, seguir las instrucciones de Usar una imagen ISO híbrida con la diferencia de usar el nombre binary.img en lugar de binary.hybrid.iso.
En primer lugar, instalar qemu como se describe más arriba en Probar una imágen ISO con QEMU A continuación, ejecutar kvm o qemu, según qué versión necesita el sistema anfitrión y especificando binary.img como primer disco duro.
$ kvm -hda binary.img
Si se desea usar el espacio libre después de haber instalado la imagen binary.img en una llave USB, se puede usar un programa de particionado como gparted o parted para crear una partición nueva en el dispositivo. La primera partición será usada por el sistema Debian en vivo.
# gparted ${USBSTICK}
Después de crear la partición, dónde ${PARTITION} es el nombre de la partición, por ejemplo /dev/sdb2 se tiene que crear un sistema de ficheros en él. Una opción posible sería ext4.
# mkfs.ext4 ${PARTITION}
Nota:⌡* Si se desea usar el espacio extra con Windows, segun parece, ese sistema operativo no puede acceder normalmente a otra partición más que a la primera. Se han comentado algunas soluciones a este problema en nuestra ⌠lista de correo pero según parece no hay una solución fácil. Recordar: Cada vez que se instale una nueva binary.img en el dispositivo, todos los datos del dispositivo se perderán debido a que la tabla de particiones se sobrescribe con el contenido de la imagen, así pues, realizar primero una copia de seguridad de la partición para poder restaurarla trás actualizar la imagen en vivo.
La siguiente secuencia de comandos creará una imagen de arranque en red básica que contendrá el sistema estándar de Debian sin X.org. Se puede usar para el arranque en red.
# lb clean --binary
Ejecutar el comando lb config de la siguiente manera para configurar la imagen de arranque en red:
$ lb config -b net --net-root-path "/srv/debian-live" --net-root-server "192.168.0.1"
A diferencia de las imágenes ISO y HDD, el sistema de arranque en red en sí mismo no envía la imagen del sistema de ficheros al cliente, por eso los ficheros se deben enviar mediante NFS. Las opciones --net-root-path y --net-root-server especifican la ubicación y el servidor, respectivamente, del servidor NFS en el que se encuentra la imagen del sistema de ficheros en el arranque. Se debe asegurar que estos se ajustan a los valores adecuados para la red y el servidor deseados.
Crear ahora la imagen con el comando lb build:
# lb build
En un arranque en red, el cliente ejecuta una pequeña pieza de software que generalmente se encuentra en la EPROM de la tarjeta Ethernet. Este programa envía una solicitud de DHCP para obtener una dirección IP e información sobre qué hacer a continuación. Por lo general, el siguiente paso es conseguir un gestor de arranque de alto nivel a través del protocolo TFTP. Este gestor podría ser PXELINUX, GRUB, o incluso arrancar directamente un sistema operativo como Linux.
Por ejemplo, si se descomprime el archivo generado binary-net.tar.gz en el directorio /srv/debian-live, se verá la imagen del sistema de ficheros en live/filesystem.squashfs y el kernel, initrd y el gestor de arranque pxelinux en tftpboot/debian-live/i386.
Ahora se debe configurar tres servicios en el servidor para que arranque en red: el servidor DHCP, el servidor TFTP y el servidor NFS.
Hay que configurar el servidor DHCP de red para asegurar que proporciona una dirección IP al cliente, y para anunciar la ubicación del gestor de arranque PXE.
He aquí un ejemplo que puede servir de inspiración. Fue escrito para el servidor ISC DHCP isc-dhcp-server en su fichero de configuración /etc/dhcp/dhcpd.conf:
# /etc/dhcp/dhcpd.conf - fichero de configuración para isc-dhcp-server
ddns-update-style none;
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.254;
next-server servername;
filename "pxelinux.0";
}
Se encarga de suministrar el kernel y el Disco RAM inicial para el sistema.
Se debe instalar el paquete tftpd-hpa. Este servidor podrá suministrar todos los ficheros contenidos de un directorio raíz, normalmente /srv/tftp. Para permitirle que pueda servir los ficheros de /srv/debian-live/tftpboot, se debe ejecutar el siguiente comando con privilegios de superusuario:
# dpkg-reconfigure -plow tftpd-hpa
y llenar el directorio del nuevo servidor tftp cuando sea requerido.
Una vez el equipo cliente ha descargado y arrancado el kernel de Linux junto a su initrd, intentará montar el sistema de archivos de la imagen en vivo a través de un servidor NFS.
Se debe instalar el paquete nfs-kernel-server.
Entonces, se debe hacer que la imagen del sistema de archivos esté disponible a través de NFS añadiendo una línea como la siguiente para /etc/exports:
/srv/debian-live *(ro,async,no_root_squash,no_subtree_check)
e informar al servidor NFS sobre esta nueva exportación con el siguiente comando:
# exportfs -rv
La configuración de estos tres servicios puede ser un poco difícil. Será necesario un poco de paciencia para conseguir que todos ellos funcionen juntos. Para obtener más información, ver el wiki de syslinux en ‹http://syslinux.zytor.com/wiki/index.php/PXELINUX› o la sección sobre TFTP Net Booting del Manual del Instalador de Debian en ‹http://d-i.alioth.debian.org/manual/en.i386/ch04s05.html› Esto puede ser útil, ya que sus procesos son muy similares.
La creación de una imagen de arranque en red es fácil usando la mágia de live-build, pero probar las imágenes en máquinas físicas puede ser un proceso mucho más lento.
Para hacer nuestra vida más fácil, se puede utilizar la virtualización. Hay dos soluciones.
Se debe editar el fichero /etc/qemu-ifup:
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2
Obtener o crear un grub-floppy-netboot (en el svn).
Lanzar qemu con "-net nic,vlan=0 -net tap,vlan=0,ifname=tun0"
#!/usr/bin/vmware
config.version = "8"
virtualHW.version = "4"
memsize = "512"
MemAllowAutoScaleDown = "FALSE"
ide0:0.present = "FALSE"
ide1:0.present = "FALSE"
floppy0.present = "FALSE"
sound.present = "FALSE"
tools.remindInstall = "FALSE"
ethernet0.present = "TRUE"
ethernet0.addressType = "generated"
displayName = "Test Boot PXE"
guestOS = "other"
ethernet0.generatedAddress = "00:0c:29:8d:71:3b"
uuid.location = "56 4d 83 72 5c c4 de 3f-ae 9e 07 91 1d 8d 71 3b"
uuid.bios = "56 4d 83 72 5c c4 de 3f-ae 9e 07 91 1d 8d 71 3b"
ethernet0.generatedAddressOffset = "0"