Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
Este documento describe un método artesanal, modular y de bajo nivel para construir imágenes ISO de LiveCD de ALDOS con las actualizaciones acumuladas desde su lanzamiento. A diferencia de los enfoques automatizados con herramientas como livecd-tools, este procedimiento ofrece control total sobre cada componente, permitiendo una comprensión profunda del proceso de creación.
La filosofía se basa en un principio de cirugía precisa: se parte de una ISO funcional como semilla ―descomprimida en el sistema de archivos― y, mediante una serie de pasos manuales, se actualiza, personaliza y reempaqueta en una nueva imagen optimizada, lista para arrancar en sistemas BIOS y UEFI.
Este manual sirve como legado técnico para la comunidad, asegurando que el conocimiento para mantener y evolucionar ALDOS trascienda al autor original.
⚠️ Importancia del entorno de construcción: Para garantizar la máxima compatibilidad y evitar conflictos con versiones de bibliotecas o formatos binarios, se recomienda encarecidamente ejecutar todo este procedimiento desde una instalación en ejecución de ALDOS. Esto asegura que las herramientas críticas (grub2-mkimage, los módulos EFI, mksquashfs, etc.) y sus dependencias sean exactamente las mismas que espera el sistema de la imagen final, particularmente para el arranque UEFI.
Antes de comenzar, asegúrese de contar con lo siguiente:
proyecto/
├── efifs/ # Contiene el sistema de archivos requeridos para EFI
├── squashfs/ # Contiene el sistema de archivos raíz (ext3fs.img)
├── isofs/ # Contiene los metadatos y cargadores de arranque de la ISO
│ ├── LiveOS/
│ ├── boot/grub/
│ ├── isolinux/
│ └── ...
└── rootfs/ # Punto de montaje (inicialmente vacío)
squashfs-tools, xorriso, dosfstools, grub2-efi, grub2-pc, e2fsprogs (para zerofree). En ALDOS, puede instalarlos con:yum install squashfs-tools xorriso dosfstools grub2-efi grub2-pc e2fsprogs
Defina variables de entorno para facilitar el proceso. En su guion de instrucciones (script), puede hacerlo así:
#!/bin/bash
PROYECTO="/home/usuario/Proyectos/ALDOS-LiveCD/aldos-liveimg"
FECHA="$(date +%Y%m%d)"
export PROYECTO FECHA
cd "${PROYECTO}" || exit 1
Para que la imagen ISO final pueda arrancar en sistemas con firmware UEFI moderno, es necesario construir una imagen de sistema de archivos FAT que contenga el cargador de GRUB para la arquitectura x86_64. Este procedimiento genera el archivo efi.img que luego se integrará en la ISO.
mkdir -p efifs
BOOT_IMG_DATA=$(mktemp -d)
BOOT_IMG=efi.img
# 1. Crear un sistema de archivos FAT vacío
mformat -C -f 2880 -L 16 -i ${BOOT_IMG}
# 2. Montar la imagen y copiar la estructura EFI/GRUB base
mount -o loop ${BOOT_IMG} ${BOOT_IMG_DATA}
cp -a /usr/share/grub/efi* ${BOOT_IMG_DATA}/efi/
mcopy -s -i ${BOOT_IMG} isofs/efi/boot ${BOOT_IMG_DATA}/efi/
# 3. Generar la imagen binaria de GRUB para EFI
grub2-mkimage \
--directory /usr/lib/grub/x86_64-efi \
--prefix '()/boot/grub' \
--output ${BOOT_IMG_DATA}/efi/boot/bootx64.efi \
--format x86_64-efi \
--compression auto \
part_gpt part_msdos iso9660
# 4. Finalizar y copiar la imagen terminada
umount ${BOOT_IMG_DATA}
rmdir ${BOOT_IMG_DATA}
cp -a ${BOOT_IMG} ./efifs/efi.img
Explicación del proceso:
mformat: Crea un sistema de archivos FAT16 (-f 2880) formateado para 1.44 MB, que es el tamaño estándar requerido por el estándar de arranque EFI.mount y cp/mcopy: Monta la imagen como un dispositivo de bloque y copia los archivos de configuración y módulos de GRUB necesarios para el arranque.grub2-mkimage: Construye el ejecutable bootx64.efi (el cargador EFI propiamente dicho), incorporando los módulos mínimos para manejar particiones (part_gpt, part_msdos) y el sistema de archivos ISO (iso9660).umount y cp: Desmonta la imagen y copia el archivo final efi.img al directorio efifs/, listo para ser referenciado por xorriso en la Fase 7.Nota importante: Este paso debe ejecutarse antes de la Fase 1, ya que la imagen efifs/efi.img resultante es un componente estático que xorriso integrará directamente.
📌 Esta fase es condicional y opcional. La imagen base squashfs/LiveOS/ext3fs.img tiene un tamaño predefinido para economizar espacio. Si planea aplicar una gran cantidad de actualizaciones o añadir muchos paquetes nuevos, el espacio libre por defecto (aproximadamente 300 MiB) podría ser insuficiente. Este procedimiento permite aumentar el tamaño de dicha imagen antes de comenzar las modificaciones.
Se recomienda montar la imagen de manera temporal para verificar el espacio libre actual y estimar cuánto aumentar.
# Montaje temporal para verificación
mount -o loop -t ext4 squashfs/LiveOS/ext3fs.img rootfs
chroot rootfs/ /bin/bash -c "df -h /"
umount rootfs
Si el espacio libre en la partición raíz (/) es inferior al que necesitarán sus actualizaciones, proceda con la ampliación.
Este proceso utiliza qemu-img para aumentar el tamaño del archivo de imagen contenedor y resize2fs para expandir el sistema de archivos ext4 dentro de él.
⚠️ Asegúrese de que la imagen NO esté montada en rootfs/ al ejecutar estos mandatos.
# 1. Aumentar el tamaño del archivo de imagen (ejemplo: +1 GiB)
qemu-img resize squashfs/LiveOS/ext3fs.img +1G
# 2. Verificar y reparar la integridad del sistema de archivos después del cambio
fsck.ext4 -fyD squashfs/LiveOS/ext3fs.img
fsck.ext4 -p squashfs/LiveOS/ext3fs.img
# 3. Expandir el sistema de archivos ext4 para ocupar todo el nuevo espacio
resize2fs squashfs/LiveOS/ext3fs.img
Explicación:
qemu-img resize: Aumenta el tamaño físico del archivo ext3fs.img añadiendo 1 Gibibyte (GiB) de ceros al final. Puede ajustar la cantidad (+512M, +2G, etc.).fsck.ext4: Es crucial verificar el sistema de archivos tras una modificación estructural de la imagen para prevenir corrupción.resize2fs: Ajusta las estructuras del sistema de archivos ext4 dentro de la imagen para que utilice toda la capacidad nueva del archivo contenedor.Con este paso completado, la imagen base tiene más espacio libre para acomodar actualizaciones y paquetes adicionales. Ahora puede continuar con el montaje y la inyección de actualizaciones descritos en la Fase 1.
En esta fase, se prepara el sistema de archivos raíz de la imagen ―almacenado en squashfs/LiveOS/ext3fs.img― para realizar modificaciones.
Primero, se verifica la integridad del sistema de archivos y se monta en el directorio rootfs/, junto con los sistemas virtuales necesarios para un entorno chroot funcional.
fsck.ext4 -fyD squashfs/LiveOS/ext3fs.img && \
fsck.ext4 -p squashfs/LiveOS/ext3fs.img && \
mount -o loop -t ext4 squashfs/LiveOS/ext3fs.img rootfs && \
mount -o bind /dev rootfs/dev && \
mount -o bind /proc rootfs/proc && \
mount -o bind /sys rootfs/sys || exit 1
Explicación:
fsck.ext4 -fyD: Fuerza una verificación y reparación automática del sistema de archivos ext4.mount -o loop: Monta el archivo de imagen como un dispositivo de bloque en el directorio rootfs/.mount -o bind: Hace que los directorios /dev, /proc y /sys del anfitrión sean visibles dentro de rootfs/. Esto es indispensable para que herramientas como yum funcionen correctamente dentro del entorno aislado.Con el sistema montado, se procede a actualizar todos los paquetes utilizando un repositorio local o específico que contenga las actualizaciones acumuladas.
cp -a /ruta/a/repositorio/ALDOS-livecd.repo rootfs/etc/yum.repos.d/
yum -y --installroot="$(pwd)/rootfs/" --disablerepo=* --enablerepo=ALDOS-livecd update
Explicación:
*.repo) dentro del sistema montado. Este repositorio debe contener todas las actualizaciones que se desean integrar.yum update se ejecuta con --installroot apuntando a rootfs/, y se habilitan sólo los repositorios necesarios. Este es el paso que inyecta los parches de seguridad y actualizaciones en la imagen base.⚠️ Este paso es condicional. Sólo debe ejecutarse si el mandato yum update de la fase anterior actualizó el paquete kernel.
Si el núcleo se actualizó, es imprescindible copiar los nuevos archivos de arranque (vmlinuz, initramfs) desde el sistema raíz actualizado a las ubicaciones de arranque de la ISO, tanto para el modo CD (isolinux/) como para PXE (images/pxeboot/).
# REEMPLACE '5.10.246-40.aldos.x86_64' CON LA VERSIÓN ACTUAL INSTALADA
KERNEL_VERSION="5.10.246-40.aldos.x86_64"
cp -a rootfs/boot/initramfs-${KERNEL_VERSION}.img isofs/images/pxeboot/initrd.img
cp -a rootfs/boot/initramfs-${KERNEL_VERSION}.img isofs/isolinux/initrd.img
cp -a rootfs/boot/vmlinuz-${KERNEL_VERSION} isofs/images/pxeboot/vmlinuz
cp -a rootfs/boot/vmlinuz-${KERNEL_VERSION} isofs/isolinux/vmlinuz
cp -a rootfs/boot/.vmlinuz-${KERNEL_VERSION}.hmac isofs/images/pxeboot/.vmlinuz.hmac
cp -a rootfs/boot/.vmlinuz-${KERNEL_VERSION}.hmac isofs/isolinux/.vmlinuz.hmac
# Optimiza el espacio mediante enlaces físicos entre archivos idénticos
hardlink isofs/isolinux/ isofs/images/pxeboot/
Explicación: Si la imagen arrancara con un núcleo antiguo pero el sistema raíz tuviera módulos actualizados, podría fallar. Este paso asegura la coherencia absoluta. El mandato hardlink ahorra espacio al hacer que los archivos idénticos en ambos directorios compartan los mismos datos en el disco.
📌 Este paso es opcional. Ejecútelo sólo si desea añadir funcionalidades completas ―como el escritorio Xfce― a una imagen base mínima. Si lo omite, asegúrese de omitir también el paso de limpieza específica de paquetes descrito en la siguiente fase.
El siguiente bucle instala grupos de paquetes predefinidos que componen un entorno de escritorio completo.
for GRUPO in core base printing hardware-support xfce-desktop xfce-apps sound-and-video
do
yum -y \
--installroot="$(pwd)/rootfs/" \
--disablerepo=* \
--enablerepo=ALDOS-livecd \
group mark install ${GRUPO}
done
Explicación: Los grupos de paquetes ―como xfce-desktop― son metapaquetes que instalan conjuntos de software relacionados. La lista puede personalizarse según las necesidades. Consulte los grupos disponibles con yum group list dentro del entorno chroot.
Esta es la fase de ajuste fino. Antes de proceder a la limpieza, puede realizar modificaciones directas en el sistema montado (rootfs/). Ejemplos comunes incluyen:
/etc.chroot ―por ejemplo, chroot rootfs/ /bin/bash para una sesión interactiva.rpmorphan./usr/lib/locale/locale-archive.grub2 o del gestor de arranque.⚠️ ¡PRECAUCIÓN! Una vez terminadas las personalizaciones, ejecute los siguientes mandatos de limpieza desde una sesión gráfica ligera o una terminal fuera del entorno chroot, asegurándose de que ningún proceso esté usando los directorios montados (rootfs/dev, rootfs/proc, rootfs/sys).
El objetivo es dejar el sistema como si estuviera recién instalado, eliminando cualquier rastro del proceso de construcción ―cachés, historiales, repositorios temporales.
# Limpia registros de yum y elimina el repositorio temporal
echo > rootfs/var/log/yum.log
rm -f rootfs/etc/yum.repos.d/ALDOS-livecd.repo
# Elimina cachés y metadatos de yum y rpm
rm -fr rootfs/var/lib/yum/{groups,history,repos,rpmdb-indexes,uuid,yumdb}
rm -fr rootfs/var/cache/yum/*
rm -f rootfs/var/lib/rpm/__db*
# Recrea la estructura mínima necesaria para yum
mkdir -p rootfs/var/lib/yum/{history,yumdb}
# Borra huellas de actividad del usuario
echo > rootfs/root/.bash_history
cat /dev/null > rootfs/var/log/lastlog
Explicación: Esta limpieza es crucial por seguridad ―para evitar filtrar datos del constructor― y para ahorrar espacio, ya que los siguientes pasos comprimirán todo el sistema de archivos.
Esta fase prepara los componentes modificados para su empaquetado final. Comienza con el desmontaje seguro del sistema base, el cual requiere un entorno de ejecución controlado para evitar interferencias, seguido de técnicas de optimización que reducen significativamente el tamaño de la imagen ISO resultante.
Para evitar que servicios de gestión de archivos de escritorios completos ―como GVFS (GNOME Virtual File System) o udisks2― bloqueen los puntos de montaje al monitorear automáticamente los dispositivos, se recomienda ejecutar esta fase desde un entorno con control total.
Opciones seguras en ALDOS:
Diagnóstico de bloqueo: Si el mandato umount falla con el error device is busy, significa que algún proceso está usando los directorios montados. Para identificarlo, puede usar lsof o fuser desde otra terminal. Utilizar un monitor de recursos del sistema también es una opción práctica.
# 1. Identificar el proceso bloqueante (ejemplo con lsof)
lsof +f -- $(pwd)/rootfs
# 2. Si se conoce el proceso, puede cerrarlo. Como última opción, forzar la terminación:
# fuser -k $(pwd)/rootfs
# 3. Proceder con el desmontaje ordenado
umount -R rootfs/{dev,proc,sys}
umount rootfs
Una vez que ningún proceso esté reteniendo los montajes, el desmontaje procederá sin problemas.
Este es un truco artesanal clave para reducir el tamaño final de la ISO. El mandato zerofree llena con ceros todos los bloques libres del sistema de archivos ext4, lo que permite que el compresor xz ―usado por mksquashfs― logre una compresión máxima.
# Rellena con ceros los bloques libres para optimizar la compresión
zerofree -v squashfs/LiveOS/ext3fs.img
# Verifica la integridad después de la operación anterior
fsck.ext4 -fyD squashfs/LiveOS/ext3fs.img
fsck.ext4 -p squashfs/LiveOS/ext3fs.img
sync # Asegura que todos los datos se escriban en el disco
A continuación, se elimina la imagen squashfs antigua y se genera una nueva con compresión xz de alto rendimiento.
rm -f isofs/LiveOS/squashfs.img
mksquashfs \
squashfs \
isofs/LiveOS/squashfs.img \
-quiet -comp xz -b 16384 -Xdict-size 100%
sync
chown -R $USER:$USER isofs/ squashfs/ # Ajusta propietarios según su usuario
Explicación: Las opciones -comp xz -b 16384 -Xdict-size 100% configuran el compresor xz para obtener la máxima compresión posible, a cambio de un mayor uso de memoria y tiempo de CPU. Para una compresión más rápida, puede usar -comp gzip.
En este punto, puede realizar los últimos ajustes a los componentes de la ISO antes de su ensamblaje final. Revise y modifique según sea necesario:
isofs/isolinux/isolinux.cfg, isofs/boot/grub/grub.cfg.isofs/.disk/info (número de versión), isofs/LEEME.txt.Asegurarse que la imagen ISO se genere correctamente es importante para garantizar que funcione tanto en sistemas BIOS como con EFI.
Dentro del directorio isofs/, genere un nuevo archivo md5sum.txt que contenga los hashes de todos los archivos. Esto permite verificar la integridad del contenido de la ISO una vez grabada.
pushd isofs/ || exit 1
rm -f md5sum.txt
find . -type f -print0 | xargs -0 md5sum | grep -v "\./md5sum.txt" > md5sum.txt
popd
El mandato xorriso crea una imagen ISO que puede arrancar tanto en sistemas legacy (BIOS) como modernos (UEFI). Ajuste el nombre del volumen (-V) y las rutas según su proyecto.
VERSION="1.4.20"
VOLUMEN="ALDOS-${VERSION//./-}" # Convierte 1.4.20 en ALDOS-1-4-20
xorriso -as mkisofs \
-r -J -V "${VOLUMEN}" \
-o "ALDOS-LiveCD-${VERSION}-${FECHA}.iso" \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-isohybrid-mbr /usr/share/syslinux/isohdpfx.bin \
-eltorito-alt-boot \
-e efifs/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
isofs/
Explicación de las opciones clave:
-b isolinux/isolinux.bin: Especifica el cargador de arranque para BIOS.-eltorito-alt-boot -e efifs/efi.img: Añade la imagen de arranque EFI (efi.img) como un cargador de arranque alternativo en la ISO, creando una imagen híbrida.-isohybrid-mbr e -isohybrid-gpt-basdat: Modifican la tabla de particiones de la imagen para que pueda grabarse directamente en un dispositivo USB y arrancar desde él.Como prueba final, puede verificar la capacidad de arranque de la nueva imagen ISO utilizando un emulador como QEMU.
# Verificación de arranque BIOS
qemu-system-x86_64 -cdrom "ALDOS-LiveCD-${VERSION}-${FECHA}.iso" -m 2048
# Verificación de arranque UEFI (requiere el firmware OVMF)
qemu-system-x86_64 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -cdrom "ALDOS-LiveCD-${VERSION}-${FECHA}.iso" -m 2048