DIY Live: Debian GNU/LINUX

4 minuto(s) de lectura

Debian

La intención de esta entrada es la de crear un sistema Minimal Debian 10 Live 64bits que puede arrancarse desde CD/USB y ademas con soporte de Legacy BIOS o el hardware actual EFI.

La información ha sido recopilada en su mayor parte de esta gran guía.

Esta entrada esta escrita más con fines educativos personales que cualquier otra cosa.

No tiene porque ser necesariamente la guía más completa o la mejor detallada para todo el amplio espectro de necesidades a cubrir.

Espero que esta guía sea de todos modos útil.

Prerrequisitos

Instalaremos las aplicaciones para la creación del entorno;

sudo apt-get -y install \
debootstrap dosfstools squashfs-tools \
xorriso isolinux syslinux-efi \
grub-pc-bin grub-efi-amd64-bin mtools

Crearemos un directorio de trabajo donde alojar todo el proyecto:

mkdir -p $HOME/LIVE_BOOT

Configurando Debian

Vamos a usar la rama buster para hacer la distribución minimal y amd64 para la arquitectura:

sudo debootstrap \
--arch=amd64 --variant=minbase buster \
$HOME/LIVE_BOOT/chroot \
http://ftp.es.debian.org/debian/

Vamos a iniciar el entorno chroot sobre Debian que acabamos de arrancar:

sudo chroot $HOME/LIVE_BOOT/chroot

A continuación debemos de seguir trabajando sobre la misma terminal ya que la configuración y los cambios que vamos a realizar tienen que ser dentro del entorno chroot y no sobre nuestro sistema base.

Configuramos hostname de la distro:

echo "lordpedal-live" > /etc/hostname

Ahora vamos a instalar el Kernel, administración de servicios y utilidades mínimas para tener un entorno de tamaño reducido operacional:

apt update && \
apt install --no-install-recommends \
linux-image-amd64 live-boot \
systemd-sysv network-manager net-tools \
wireless-tools wpagui curl \
openssh-client blackbox xserver-xorg-core \
xserver-xorg xinit xterm \
nano && apt clean

Tras la instalación, configuramos el password del usuario root:

passwd root

Salimos del entorno chroot para volver a nuestra distro:

exit

Vamos a crear las carpetas que contendran los ficheros para nuestro entorno Live:

mkdir -p $HOME/LIVE_BOOT/{staging/{EFI/boot,boot/grub/x86_64-efi,isolinux,live},tmp}

Comprimimos el entorno chroot en un sistema ficheros Squash:

sudo mksquashfs \
$HOME/LIVE_BOOT/chroot \
$HOME/LIVE_BOOT/staging/live/filesystem.squashfs \
-e boot

Copiamos el kernel y initramfs desde el entorno chroot al directorio live:

cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* \
$HOME/LIVE_BOOT/staging/live/vmlinuz && \
cp $HOME/LIVE_BOOT/chroot/boot/initrd.img-* \
$HOME/LIVE_BOOT/staging/live/initrd

Preparando los menús del Boot Loader

Creamos un menú de inicio de ISOLINUX (Syslinux). Este menú de inicio se utiliza cuando se inicia en modo BIOS / Legacy:

cat <<'EOF' >$HOME/LIVE_BOOT/staging/isolinux/isolinux.cfg
UI vesamenu.c32

MENU TITLE Boot Menu
DEFAULT linux
TIMEOUT 600
MENU RESOLUTION 640 480
MENU COLOR border       30;44   #40ffffff #a0000000 std
MENU COLOR title        1;36;44 #9033ccff #a0000000 std
MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel        37;44   #50ffffff #a0000000 std
MENU COLOR help         37;40   #c0ffffff #a0000000 std
MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07        37;40   #90ffffff #a0000000 std
MENU COLOR tabmsg       31;40   #30ffffff #00000000 std

LABEL linux
  MENU LABEL Debian Live [BIOS/ISOLINUX]
  MENU DEFAULT
  KERNEL /live/vmlinuz
  APPEND initrd=/live/initrd boot=live

LABEL linux
  MENU LABEL Debian Live [BIOS/ISOLINUX] (nomodeset)
  MENU DEFAULT
  KERNEL /live/vmlinuz
  APPEND initrd=/live/initrd boot=live nomodeset
EOF

Creamos un segundo, y similar menú de arranque para GRUB. Este arranque es usado cuando arrancamos en EFI/UEFI mode:

cat <<'EOF' >$HOME/LIVE_BOOT/staging/boot/grub/grub.cfg
search --set=root --file /DEBIAN_CUSTOM

set default="0"
set timeout=30

# If X has issues finding screens, experiment with/without nomodeset.

menuentry "Debian Live [EFI/GRUB]" {
    linux ($root)/live/vmlinuz boot=live
    initrd ($root)/live/initrd
}

menuentry "Debian Live [EFI/GRUB] (nomodeset)" {
    linux ($root)/live/vmlinuz boot=live nomodeset
    initrd ($root)/live/initrd
}
EOF

Creamos una tercera configuración de arranque. Esta configuración será un archivo de configuración inicial que está integrado dentro de GRUB en la partición EFI. Esto encuentra la raíz y carga la configuración de GRUB desde allí:

cat <<'EOF' >$HOME/LIVE_BOOT/tmp/grub-standalone.cfg
search --set=root --file /DEBIAN_CUSTOM
set prefix=($root)/boot/grub/
configfile /boot/grub/grub.cfg
EOF

Y creamos un archivo para el arranque llamado DEBIAN_CUSTOM. Este archivo se utilizará para ayudar a GRUB a identificar nuestro sistema de archivos. Este nombre de archivo debe ser único y debe coincidir con el nombre de archivo en nuestra configuración previa que dimos en grub.cfg:

touch $HOME/LIVE_BOOT/staging/DEBIAN_CUSTOM

Preparando los ficheros del Boot Loader

Copiamos los ficheros de arranque necesarios de BIOS/Legacy a nuestro espacio de trabajo:

cp /usr/lib/ISOLINUX/isolinux.bin "${HOME}/LIVE_BOOT/staging/isolinux/" && \
cp /usr/lib/syslinux/modules/bios/* "${HOME}/LIVE_BOOT/staging/isolinux/"

Copiamos los ficheros de arranque necesarios de EFI a nuestro espacio de trabajo:

cp -r /usr/lib/grub/x86_64-efi/* "${HOME}/LIVE_BOOT/staging/boot/grub/x86_64-efi/"

Generamos una imagen de arranque de EFI en GRUB:

grub-mkstandalone \
--format=x86_64-efi \
--output=$HOME/LIVE_BOOT/tmp/bootx64.efi \
--locales="" \
--fonts="" \
"boot/grub/grub.cfg=$HOME/LIVE_BOOT/tmp/grub-standalone.cfg"

Creamos una imagen de disco de arranque UEFI FAT16 que contenga el cargador de arranque EFI. Tenga en cuenta el uso de los comandos mmd y mcopy para copiar nuestro cargador de arranque UEFI llamado bootx64.efi:

(cd $HOME/LIVE_BOOT/staging/EFI/boot && \
    dd if=/dev/zero of=efiboot.img bs=1M count=20 && \
    sudo mkfs.vfat efiboot.img && \
    mmd -i efiboot.img efi efi/boot && \
    mcopy -vi efiboot.img $HOME/LIVE_BOOT/tmp/bootx64.efi ::efi/boot/
)

Crear ISO arrancable

Para finalizar todo el trabajo solo nos queda convertir el trabajo en un fichero .ISO para poder redistribuirlo o usarlo en CD/USB:

xorriso \
    -as mkisofs \
    -iso-level 3 \
    -o "${HOME}/LIVE_BOOT/debian-custom.iso" \
    -full-iso9660-filenames \
    -volid "DEBIAN_CUSTOM" \
    -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
    -eltorito-boot \
        isolinux/isolinux.bin \
        -no-emul-boot \
        -boot-load-size 4 \
        -boot-info-table \
        --eltorito-catalog isolinux/isolinux.cat \
    -eltorito-alt-boot \
        -e /EFI/boot/efiboot.img \
        -no-emul-boot \
        -isohybrid-gpt-basdat \
    -append_partition 2 0xef ${HOME}/LIVE_BOOT/staging/EFI/boot/efiboot.img \
    "${HOME}/LIVE_BOOT/staging"

Y listo!