¿Quieres tu propia distro “TomasOS” lista para instalar y usar en live? En esta guía fabricamos una ISO live híbrida (BIOS/UEFI) con XFCE, idioma español, zona horaria de Madrid, firmware no libre (wifi/gráficas), y utilidades básicas. Todo con live-build (la herramienta oficial de Debian).
Requisitos
- Host: Debian/Ubuntu/Linux Mint (amd64).
- Espacio libre: ≥ 10 GB.
- Conexión a Internet.
- Terminal con sudo.
1) Instalar herramientas
sudo apt update
sudo apt install -y live-build xorriso squashfs-tools git wget curl
2) Crear la estructura del proyecto
mkdir -p ~/tomasos && cd ~/tomasos
mkdir -p auto config/package-lists config/hooks config/includes.chroot
3) Configurar live-build (¡evita recursión con noauto
!)
Importante:
lb config
ejecutaauto/config
. Si dentro deauto/config
llamas alb config
sinnoauto
, entras en bucle. Usalb config noauto
.
cat > auto/config <<'EOF'
#!/bin/sh
set -e
lb config noauto \
--distribution trixie \
--architectures amd64 \
--binary-images iso-hybrid \
--archive-areas "main contrib non-free non-free-firmware" \
--apt-recommends true \
--debian-installer live \
--mirror-bootstrap http://deb.debian.org/debian/ \
--mirror-chroot-security http://security.debian.org/debian-security \
--mode debian \
--bootappend-live "boot=live components quiet splash locales=es_ES.UTF-8 keyboard-layouts=es timezone=Europe/Madrid username=tomas user-fullname='Tomas GD' hostname=TomasOS"
EOF
chmod +x auto/config
4) Elegir escritorio y paquetes
Escritorio XFCE y utilidades
cat > config/package-lists/desktop.list.chroot <<'EOF'
task-xfce-desktop
lightdm lightdm-gtk-greeter
network-manager network-manager-gnome
pulseaudio pavucontrol
xfce4-goodies
EOF
Aplicaciones básicas (sin neofetch → usa fastfetch)
cat > config/package-lists/apps.list.chroot <<'EOF'
sudo vim git htop fastfetch gparted gnome-disk-utility
xfce4-terminal thunar-archive-plugin zip unzip p7zip-full
vlc firefox-esr curl wget
EOF
Firmware habitual
cat > config/package-lists/firmware.list.chroot <<'EOF'
firmware-misc-nonfree
firmware-iwlwifi
firmware-realtek
firmware-amd-graphics
intel-microcode
amd64-microcode
EOF
5) Idioma y zona horaria dentro del live (hook chroot)
cat > config/hooks/010-locales-timezone.chroot <<'EOF'
#!/bin/bash
set -e
echo "es_ES.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
update-locale LANG=es_ES.UTF-8
ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
EOF
chmod +x config/hooks/010-locales-timezone.chroot
6) Autologin del usuario tomas
(opcional)
mkdir -p config/includes.chroot/etc/lightdm/lightdm.conf.d
cat > config/includes.chroot/etc/lightdm/lightdm.conf.d/50-autologin.conf <<'EOF'
[Seat:*]
autologin-user=tomas
autologin-user-timeout=0
EOF
7) Construir la ISO
sudo lb clean --purge # limpieza total por si ya hiciste pruebas
./auto/config # aplica la configuración
sudo lb build | tee build.log
Al terminar verás Build completed successfully
y tendrás live-image-amd64.hybrid.iso
en el directorio.
Verificación rápida:
ls -lh live-image-amd64.hybrid.iso
sha256sum live-image-amd64.hybrid.iso
8) Probar la ISO con QEMU/KVM
8.1 Instalar QEMU/KVM en Debian/Ubuntu/Mint
sudo apt update
sudo apt install -y qemu-kvm qemu-utils virt-manager libvirt-daemon-system bridge-utils ovmf cpu-checker
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm "$USER"
Cargar módulos (según CPU):
sudo modprobe kvm
sudo modprobe kvm_intel || sudo modprobe kvm_amd
ls -l /dev/kvm || echo "No hay /dev/kvm (revisa BIOS/UEFI VT-x/AMD-V o Secure Boot)"
kvm-ok || true
Si estás dentro de una VM (VirtualBox, etc.), KVM suele no estar disponible:
systemd-detect-virt
8.2 Arrancar (con KVM si está disponible)
Solo live:
qemu-system-x86_64 -enable-kvm -m 4096 -smp 2 -cdrom live-image-amd64.hybrid.iso
Con disco virtual para instalar dentro de la VM:
qemu-img create -f qcow2 TomasOS.qcow2 20G
qemu-system-x86_64 -enable-kvm -m 4096 -smp 2 \
-drive file=TomasOS.qcow2,if=virtio \
-cdrom live-image-amd64.hybrid.iso -boot d -nic user,model=virtio
8.3 ¿No tienes /dev/kvm? Ejecuta sin KVM (más lento, pero funciona)
qemu-system-x86_64 -m 4096 -smp 2 -cdrom live-image-amd64.hybrid.iso
9) Probar la ISO con VirtualBox
GUI (lo más simple):
- Crear VM Linux 64-bit, 4 GB RAM, 2 vCPU.
- (Opcional) Activar EFI.
- En Almacenamiento, montar
live-image-amd64.hybrid.iso
como unidad óptica. - Iniciar.
CLI (VBoxManage):
VM_NAME="TomasOS"
ISO="$HOME/tomasos/live-image-amd64.hybrid.iso"
VBoxManage createvm --name "$VM_NAME" --register
VBoxManage modifyvm "$VM_NAME" --memory 4096 --cpus 2 --vram 128 --ioapic on --graphicscontroller vmsvga --nic1 nat
# EFI opcional:
# VBoxManage modifyvm "$VM_NAME" --firmware efi
VBoxManage createmedium disk --filename "$HOME/VirtualBox VMs/$VM_NAME/$VM_NAME.vdi" --size 20000
VBoxManage storagectl "$VM_NAME" --name "SATA" --add sata --controller IntelAhci
VBoxManage storageattach "$VM_NAME" --storagectl "SATA" --port 0 --device 0 --type hdd --medium "$HOME/VirtualBox VMs/$VM_NAME/$VM_NAME.vdi"
VBoxManage storagectl "$VM_NAME" --name "IDE" --add ide
VBoxManage storageattach "$VM_NAME" --storagectl "IDE" --port 1 --device 0 --type dvddrive --medium "$ISO"
VBoxManage startvm "$VM_NAME" --type gui
Nested virtualization en VirtualBox (para intentar KVM dentro de una VM): en el host, con la VM apagada:
VBoxManage modifyvm "NombreDeTuVM" --nested-hw-virt on
Aun así, lo más práctico es arrancar la ISO directamente en VirtualBox, o usar QEMU sin KVM.
10) Grabar la ISO en USB (modo live)
⚠️ Sustituye /dev/sdX por tu USB (no pongas partición tipo /dev/sdX1).
sudo dd if=live-image-amd64.hybrid.iso of=/dev/sdX bs=4M status=progress conv=fsync
Persistencia en el USB (opcional)
# Deja espacio libre al final o crea una partición nueva para persistencia:
sudo parted /dev/sdX --script mkpart persistence ext4 100
sudo mkfs.ext4 -L persistence /dev/sdX3 # ajusta el número de partición
sudo mkdir -p /mnt/persist && sudo mount /dev/sdX3 /mnt/persist
echo "/ union" | sudo tee /mnt/persist/persistence.conf
sudo umount /mnt/persist
En el menú de arranque del live, elige la opción con persistence (o añade el parámetro persistence
).
11) Variantes y personalización
Cambiar de escritorio (KDE/Plasma o GNOME)
# KDE Plasma
printf "task-kde-desktop\nsddm\n" | tee config/package-lists/desktop.list.chroot
# GNOME
printf "task-gnome-desktop\ngdm3\n" | tee config/package-lists/desktop.list.chroot
Repos backports dentro del live
mkdir -p config/archives
cat > config/archives/backports.list.chroot <<'EOF'
deb http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware
EOF
Fondo de pantalla y branding (ejemplo)
mkdir -p config/includes.chroot/usr/share/backgrounds
cp ~/Imagenes/mi_fondo.png config/includes.chroot/usr/share/backgrounds/tomasos.png
(Después, puedes ajustar el fondo por defecto con un pequeño script en config/hooks
que copie/edite el dconf/xfconf.)
12) Limpieza y reconstrucción
sudo lb clean --purge # borra cachés y artefactos
./auto/config
sudo lb build | tee -a build.log
13) Errores frecuentes y solución rápida
tr: Argument list too long
/ bucle enauto/config
:
Tuauto/config
llamabalb config
sinnoauto
. Solución: usarlb config noauto
, limpiar (sudo lb clean --purge
) y reconstruir.E: Unable to locate package neofetch
:
En Trixie,neofetch
ya no está. Sustituye porfastfetch
.
Ejemplo:sed -ri 's/\bneofetch\b/fastfetch/g' config/package-lists/apps.list.chroot
Could not access KVM kernel module
:
No hay/dev/kvm
. O bien ejecutas QEMU sin-enable-kvm
, o habilitas VT-x/AMD-V en BIOS/UEFI y cargaskvm_intel
/kvm_amd
.
Si estás en una VM de VirtualBox, usa VirtualBox para arrancar la ISO, o activa nested en el host (rendimiento limitado).- Faltan firmware o wifi no funciona:
Asegúrate de tenernon-free-firmware
en--archive-areas
y añade los paquetes de firmware que necesites (vista en el paso 4).
14) ¿Y ahora qué?
- Añade Calamares o personaliza el instalador (opcional).
- Crea metapaquetes propios, scripts de postinstalación y tu branding.
- Publica la ISO con checksums y notas de versión.
Conclusión
Con live-build tienes control total para fabricar tu distro basada en Debian de forma limpia y reproducible. Este flujo (listas de paquetes, hooks y includes) te permite iterar rápido, mantener la ISO y añadir tus mejoras cuando quieras.
¿Quieres que lo empaquete en un repo Git con README
y script build.sh
para automatizarlo aún más? Te lo dejo listo para clonar.