Tarea 2.9 completada (snapshot UUID 43d76b0d). Fase 2 cerrada como completada. Checklist general actualizado. Nota de ajuste para Fase 3: actualizar isos.conf. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
19 KiB
Plan 01 — Pruebas en entorno controlado (VirtualBox)
Proyecto: rm-MULTIBOOT
Autor: Lic. Ricardo MONLA
Fecha de inicio: 2026-06-06
Estado general: 🔄 En progreso — Fases 1 y 2 completadas, Fase 3 pendiente (v2.7.0)
Objetivo
Validar el comportamiento del script rm-multiboot.sh en un entorno controlado
antes de usarlo en equipos reales. El entorno es una VM Linux en VirtualBox
sobre el equipo local, donde se simula el flujo completo: setup, descarga de
ISOs, generación de entradas GRUB y arranque desde el menú multiboot.
Metodología — Mejora continua por fases
Cada fase tiene:
- Tareas con casillas para marcar al completarlas.
- Notas de ejecución donde se registra lo que pasó realmente.
- Conclusión y hallazgos que se completa al cerrar la fase.
Los hallazgos de cada fase son input obligatorio para revisar y ajustar las fases siguientes antes de ejecutarlas. No se avanza a la fase N+1 sin haber completado la sección de conclusión de la fase N.
Fase 1 ──→ [Conclusión] ──→ Replanteo Fase 2
Fase 2 ──→ [Conclusión] ──→ Replanteo Fase 3
...y así sucesivamente
Fases
FASE 1 — Preparación del entorno VirtualBox
Estado: ✅ Completada
Objetivo: Tener una VM Linux operativa con disco configurado para simular
un equipo real con espacio libre disponible para crear la partición MULTIBOOT.
Especificaciones de la VM — valores reales aplicados
| Parámetro | Valor planificado | Valor aplicado |
|---|---|---|
| Nombre | rm-multiboot-test | rm-multiboot-test ✓ |
| SO base | Debian 12 o Ubuntu 24.04 | Debian 13.5.0 (versión actual) |
| RAM | 2048 MB | 2048 MB ✓ |
| CPU | 2 núcleos | 2 núcleos ✓ |
| Disco principal | 40 GB | 40 GB dinámico VDI ✓ |
| Red | NAT | NAT ✓ |
| Modo firmware | BIOS Legacy | BIOS Legacy ✓ |
| ISO instalación | Debian 12 netinstall | Debian 13.5.0 netinstall (755 MB) |
Tareas
- 1.1 Crear la VM en VirtualBox con las especificaciones indicadas
- 1.2 Instalar el SO base (ver hallazgo #2 — disco usado al 100%, sin espacio libre)
- 1.3 Verificar con
lsblk -f— sda1 ext4 40GB al 3%, sda5 swap, sin espacio sin particionar - 1.4 Instalar dependencias: git, curl, wget, parted, e2fsprogs ✓
- 1.5 Acceso a internet desde la VM:
HTTP/2 301✓ - 1.6 Tomar snapshot de VirtualBox con nombre
00-base-limpia - 1.7 Repositorio clonado en
/root/rm-MULTIBOOT✓ - 1.8 SSH habilitado via VirtualBox Guest Additions + guestcontrol (ver hallazgo #5)
Notas de ejecución
2026-06-06 — Ejecución automatizada con VBoxManage
- VirtualBox 7.1.12 ya instalado en el host
- VM "rm-multiboot-test" creada (UUID: 62cec506-d91a-4ab4-91c7-dbf6e6216e72)
- Disco VDI 40 GB dinámico creado y conectado al controlador SATA
- Controlador IDE agregado para DVD
- ISO Debian 13.5.0 netinstall descargada (755 MB) y conectada al DVD
- Snapshot "00-base-limpia" tomado antes de iniciar la instalación
(UUID snapshot: 7d07296a-707f-44b3-ada9-5eb9c42b1a69)
HALLAZGO: La URL de Debian en isos.conf estaba desactualizada (12.9.0 → 13.5.0).
Debian ya publicó la versión 13 (Trixie). Requiere actualizar isos.conf.
--- Primera instalación (fallida) ---
- Se instaló Debian 13.5.0 desde la GUI de VirtualBox
- Al reiniciar: pantalla negra con cursor parpadeante = GRUB no instalado en MBR
- Intento de SSH para rescue → sin respuesta (VM no arrancaba)
- Diagnóstico: el instalador probablemente no instaló GRUB correctamente
--- Reinstalación limpia ---
- Se conectó la ISO al DVD y se reinició la VM
- Reinstalación con opción "usar todo el disco" (sin espacio libre)
- GRUB instalado correctamente en /dev/sda
- VM arranca y login funciona: usuario rmonla / Debian 13 (Trixie)
--- Intento de SSH (fallido) ---
- Port forwarding host:2222 → VM:22 configurado y activo
- SSH falla con "Permission denied" — Debian deshabilita PasswordAuthentication por defecto
- Requiere habilitación manual desde consola de la VM (tarea 1.8)
--- Instalación de VirtualBox Guest Additions ---
- ISO /usr/share/virtualbox/VBoxGuestAdditions.iso conectada al DVD via VBoxManage
- Montaje del DVD: mount /dev/cdrom /mnt (ejecutado via scancodes directos)
- Instalador ejecutado: sh /mnt/VBoxLinuxAdditions.run
- Resultado: instalación parcial — faltan linux-headers del kernel
(kernel 6.12.90+deb13.1-amd64 sin headers instalados)
- A pesar de la instalación parcial, VBoxManage guestcontrol funcionó
--- Habilitación de SSH via guestcontrol ---
- Problema con keymap: VM tiene layout 'es' (España), host tiene 'latam'
Efecto: '/' → '-', "'" → '{', '-' → "'"
- Solución: crear scripts en el host, copiarlos con 'guestcontrol copyto'
y ejecutarlos con 'guestcontrol run --exe /usr/bin/sh -- /tmp/script.sh'
- SSH configurado: PasswordAuthentication yes + PermitRootLogin yes
- Conexión SSH verificada: root@127.0.0.1:2222 ✓
--- Estado final del disco (lsblk -f) ---
NAME FSTYPE LABEL FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 34.1G 3% /
├─sda2 (extendida)
└─sda5 swap [SWAP]
HALLAZGO: Disco 100% particionado — el script debe manejar este escenario real.
Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| 1 | URLs de Debian en isos.conf desactualizadas (v12 → v13) |
Actualizar catálogo antes de Fase 3 |
| 2 | Instalación con "todo el disco" no deja espacio libre — este es el escenario real más común | El script debe detectar disco lleno y actuar: redimensionar partición existente o pedir al usuario que libere espacio. La Fase 2 prueba justamente eso |
| 3 | Debian deshabilita SSH PasswordAuthentication por defecto |
En producción no afecta al script; para pruebas se resolvió con guestcontrol |
| 4 | Primera instalación de Debian no instaló GRUB en MBR → pantalla negra | En netinstall hay que confirmar el paso de instalación de GRUB explícitamente |
| 5 | keyboardputstring de VBoxManage no maneja diferencia de keymaps (host:latam / VM:es) — chars especiales (/, ', -) llegan incorrectos |
Solución definitiva: usar Guest Additions + guestcontrol copyto + guestcontrol run para automatización; keyboardputscancode con KP_Divide para rutas en último recurso |
¿Se ajusta el plan de la Fase 2? ✅ Sí
Ajustes realizados: La Fase 2 debe probarse con disco 100% particionado (sin espacio libre). El script debe detectar esta situación y ofrecer opciones al usuario (reducir partición existente, o usar disco secundario). Esto es el escenario real más común.
FASE 2 — Ejecución del setup inicial
Estado: ✅ Completada
Prerequisito: Fase 1 completada y hallazgos revisados.
Objetivo: Verificar que el wizard de setup detecta correctamente el sistema
y maneja todos los escenarios de disco reales — incluyendo disco 100% particionado.
Ajuste post-Fase 1: La Fase 2 amplía su alcance para incluir la implementación y prueba del motor de detección de espacio ampliado (Escenarios 1–4).
Escenarios de disco que el script debe cubrir
| # | Escenario | Acción del script |
|---|---|---|
| 1 | Espacio libre sin particionar ≥ 10 GB | Crear partición directamente |
| 2 | Segundo disco virgen disponible | Crear MULTIBOOT en ese disco |
| 3 | Partición no-raíz con filesystem con espacio libre | Redimensionar en caliente (stub pendiente) |
| 4 | Solo espacio en filesystem raíz, disco 100% particionado | Instalar hook en initramfs para resize automático en el próximo boot — sin Live CD |
Tareas
- 2.1 Ejecutar el script v2.3.2 y registrar la salida de detección
- 2.2 Verificar detección del sistema:
- Modo de arranque: BIOS Legacy ✓
- SO detectado: Debian GNU/Linux 13 (trixie) ✓
- Disco principal: /dev/sda (40G) ✓
- Espacio libre: no encontrado → error registrado en log ✓
- 2.3 Agregar sistema de log al script →
/var/log/rm-multiboot.log(v2.4.0) - 2.4 Implementar motor de detección de espacio ampliado (Escenarios 1–4) (v2.5.0)
- 2.5 Implementar Escenario 4: instalar hook de initramfs para resize automático sin Live CD (v2.6.0)
- 2.6 Probar flujo del Escenario 4 en la VM: ejecutar rm-multiboot.sh → instalar hook → reiniciar → verificar resize automático vía initramfs
- 2.7 Verificar resultado post-setup:
lsblk -f grep MULTIBOOT /etc/fstab ls /mnt/multiboot/ cat /etc/grub.d/41_multiboot - 2.8 Verificar que GRUB fue actualizado sin errores:
grep -i multiboot /boot/grub/grub.cfg - 2.9 Tomar snapshot:
01-post-setup(UUID: 43d76b0d-7d27-43cf-912f-bd1542740d4c)
Notas de ejecución
2026-06-06 — Ejecución del script v2.3.2 en la VM via SSH
Salida real del script:
✓ Modo de arranque: BIOS Legacy
✓ Sistema operativo: Debian GNU/Linux 13 (trixie)
✓ Disco principal: /dev/sda ( 40G)
⚠ Partición MULTIBOOT: no encontrada
→ Opción 1: Preparar este equipo para multiboot
✗ No se encontró espacio libre ≥ 10 GB sin asignar en /dev/sda
Para continuar necesitás liberar espacio con GParted u otra herramienta.
La detección del sistema funciona perfectamente.
El error de espacio libre es correcto — el disco está 100% particionado.
El mensaje al usuario es claro pero la acción siguiente no está implementada en el script.
--- Implementación motor de espacio (v2.4.0 → v2.5.0) ---
- Sistema de log en /var/log/rm-multiboot.log
- Motor de 4 escenarios: libre sin particionar / disco virgen / partición no-raíz / raíz
--- Escenario 4 vía initramfs (v2.6.0) ---
- El script instaló hooks en /etc/initramfs-tools/ + regeneró el initramfs
- Al reiniciar, el initramfs ejecutó: e2fsck + resize2fs + parted + mkfs.ext4
- Problemas encontrados y resueltos durante la prueba:
* /tmp no existe en el initramfs de Debian 13 → usar /run/
* local-premount corre antes de wait_for_root: dispositivo no disponible → loop de espera 30s
* parted -s falla con "partition in use" → usar printf "Yes\n" | parted ---pretend-input-tty
* Descalce de 1 MiB entre filesystem y partición (parted alinea antes del límite) → +1 MiB extra
* mkfs.ext4: applet not found en busybox → usar mke2fs -t ext4 como fallback
* mkpart falla por partición extendida adyacente → printf "Yes\n" para aceptar "closest location"
* Cleanup del local-bottom no borró los archivos (path rootmnt no funcionó como esperado)
--- Estado post-Escenario 4 (verificado con SSH) ---
lsblk -f:
sda1 ext4 23552MiB 20G free /
sda2 (extendida)
sda3 ext4 LABEL=MULTIBOOT UUID=8b8a9497 13.9G free /mnt/multiboot
sda5 swap
/etc/fstab: UUID=8b8a9497... /mnt/multiboot ext4 defaults,noatime 0 2 ✓
/etc/grub.d/41_multiboot: instalado y ejecutable ✓
/boot/grub/grub.cfg: ### BEGIN/END /etc/grub.d/41_multiboot ### ✓
/mnt/multiboot/isos/ y grub/entries/ creados ✓
--- Arreglos posteriores (v2.7.0) ---
- _complete_setup_if_needed(): completa fstab + grub hook post-reboot + limpia hooks residuales
- local-bottom cleanup mejorado: busca mountpoint correcto, agrega logging detallado
Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| 1 | El script solo maneja espacio libre sin particionar. Con disco 100% usado sale con error y deriva al usuario a GParted. Falta implementar la lógica de redimensionamiento automático. | Antes de continuar la Fase 2, hay que agregar esta funcionalidad al script |
| 2 | La detección del sistema (BIOS/UEFI, OS, disco) funciona correctamente en la VM | Sin impacto negativo |
| 3 | El script no tiene sistema de log — toda la información se pierde al cerrar | Agregar log a /var/log/rm-multiboot.log en la próxima versión del script |
¿Se ajusta el plan de la Fase 3? ✅ Sí
Ajustes realizados: Actualizar isos.conf (URLs Debian v12 → v13) antes de ejecutar la Fase 3. El catálogo en GitHub usa la URL de descarga de Debian 13.5.0 que ya fue verificada.
FASE 3 — Prueba de catálogo y descarga de ISOs
Estado: 🔲 Pendiente
Prerequisito: Fase 2 completada y hallazgos revisados.
Objetivo: Verificar la descarga desde el catálogo (GitHub), el progreso en
pantalla (barra, %, MB/s, ETA) y la generación correcta de entradas GRUB.
Estrategia: Empezar con una ISO pequeña (Alpine ~200 MB) para ciclar rápido. Agregar una ISO mediana (Debian netinstall ~700 MB) en segunda instancia.
Tareas
- 3.1 Desde el menú → Agregar ISO → Descargar desde catálogo
- 3.2 Verificar que el catálogo se carga desde GitHub (mensaje "GitHub — actualizado")
- 3.3 Seleccionar Alpine Linux (ISO pequeña para prueba rápida)
- 3.4 Verificar que se muestran correctamente durante la descarga:
- Barra de progreso
[####----] - Porcentaje
% - MB actuales / MB totales
- Velocidad en MB/s
- ETA en
mm:ss
- Barra de progreso
- 3.5 Verificar post-descarga:
ls -lh /mnt/multiboot/isos/ cat /mnt/multiboot/grub/entries/*.cfg grep -i alpine /boot/grub/grub.cfg - 3.6 Repetir descarga con Debian 12 Netinstall
- 3.7 Probar descarga de la ISO de Google Drive (Linux Mint desde Drive)
- 3.8 Verificar que "ya descargada" aparece si se intenta descargar de nuevo
- 3.9 Tomar snapshot:
02-post-descargas
Notas de ejecución
[ espacio para registrar lo que ocurrió ]
Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| — | (pendiente) | — |
¿Se ajusta el plan de la Fase 4? 🔲 Sí / 🔲 No
Ajustes realizados: (ninguno hasta completar esta fase)
FASE 4 — Prueba de arranque desde GRUB
Estado: 🔲 Pendiente
Prerequisito: Fase 3 completada y hallazgos revisados.
Objetivo: Reiniciar la VM y verificar que el menú GRUB muestra las ISOs
y que al menos una arranca correctamente en modo live.
Tareas
- 4.1 Reiniciar la VM
- 4.2 Verificar que el menú GRUB aparece con las entradas de las ISOs descargadas
- 4.3 Bootear Alpine Linux desde el menú GRUB
- Carga el kernel sin error
- Llega al prompt de login live
- 4.4 Reiniciar y bootear Debian Netinstall desde el menú GRUB
- Aparece el instalador de Debian
- 4.5 Documentar cualquier error de GRUB (mensajes, pantalla negra, kernel panic)
- 4.6 Si alguna ISO falla, registrar el mensaje de error exacto y la entrada
.cfggenerada - 4.7 Tomar snapshot:
03-post-boot-test
Notas de ejecución
[ espacio para registrar lo que ocurrió ]
Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| — | (pendiente) | — |
¿Se ajusta el plan de la Fase 5? 🔲 Sí / 🔲 No
Ajustes realizados: (ninguno hasta completar esta fase)
FASE 5 — Prueba de escenarios avanzados y condiciones adversas
Estado: 🔲 Pendiente
Prerequisito: Fase 4 completada y hallazgos revisados.
Objetivo: Validar el comportamiento del script ante escenarios reales de mayor
complejidad: sin red, múltiples discos, tabla GPT, modo UEFI, segunda ejecución.
Ajuste post-Fase 2: "Disco sin espacio libre" ya NO es caso borde — es el escenario base implementado en Fase 2. Esta fase prueba escenarios adicionales no cubiertos en fases anteriores.
Tareas — Sin conexión a internet
- 5.1 Deshabilitar la red de la VM en VirtualBox
- 5.2 Ejecutar el script y elegir "Descargar desde catálogo"
- 5.3 Verificar que cae al fallback local (
isos.confjunto al script) - 5.4 Rehabilitar la red
Tareas — Gestión de ISOs
- 5.5 Probar "Ver ISOs disponibles" y verificar que muestra estado correcto
- 5.6 Eliminar una ISO desde el menú y verificar:
ls /mnt/multiboot/isos/ ls /mnt/multiboot/grub/entries/ grep -c menuentry /boot/grub/grub.cfg - 5.7 Reiniciar y verificar que la ISO eliminada ya no aparece en GRUB
Tareas — Segundo disco (Escenario 2)
- 5.8 Agregar un segundo disco VDI a la VM desde el host
- 5.9 Verificar que el script detecta el segundo disco y lo ofrece como destino
- 5.10 Completar el setup usando el segundo disco
Tareas — Modo UEFI
- 5.11 Restaurar snapshot
00-base-limpia - 5.12 Cambiar la VM a modo EFI en VirtualBox (Configuración → Sistema → Habilitar EFI)
- 5.13 Reinstalar el SO base en modo UEFI
- 5.14 Repetir el setup con
rm-multiboot.shy verificar detección UEFI - 5.15 Verificar que el hook de GRUB funciona igual en UEFI
Notas de ejecución
[ espacio para registrar lo que ocurrió ]
Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| — | (pendiente) | — |
¿Se ajusta el plan de la Fase 6? 🔲 Sí / 🔲 No
Ajustes realizados: (ninguno hasta completar esta fase)
FASE 6 — Correcciones, optimizaciones y cierre
Estado: 🔲 Pendiente
Prerequisito: Fases 1–5 completadas y hallazgos consolidados.
Objetivo: Aplicar todos los fixes identificados, re-validar los casos que
fallaron y documentar el estado final del script para uso en producción.
Tareas
- 6.1 Consolidar todos los bugs encontrados en las fases anteriores
- 6.2 Priorizar fixes por impacto (bloqueante / menor / cosmético)
- 6.3 Implementar y commitear cada fix por separado con mensaje descriptivo
- 6.4 Re-ejecutar los casos que fallaron en las fases anteriores
- 6.5 Actualizar
isos.confsi se detectaron URLs rotas o desactualizadas - 6.6 Actualizar versión del script según la magnitud de los cambios
- 6.7 Hacer push final al repositorio
- 6.8 Documentar el estado "apto para uso en equipos reales" o las condiciones pendientes
Notas de ejecución
[ espacio para registrar lo que ocurrió ]
Conclusión y hallazgos — Cierre del plan
| # | Hallazgo / Resultado | Acción tomada |
|---|---|---|
| — | (pendiente) | — |
Bugs encontrados: 0 (actualizar)
Bugs resueltos: 0 (actualizar)
Pendientes para próximo ciclo: (ninguno hasta completar)
Registro de versiones del script durante las pruebas
| Fase | Versión del script | Cambios relevantes |
|---|---|---|
| Inicio | 2.3.2 | Versión inicial de pruebas |
| Fase 2 | 2.4.0 | Sistema de log en /var/log/rm-multiboot.log |
| Fase 2 | 2.5.0 | Motor de detección de 4 escenarios de disco |
| Fase 2 | 2.6.0 | Escenario 4: resize vía initramfs, sin Live CD |
| Fase 2 | 2.7.0 | _complete_setup_if_needed() + cleanup robusto del local-bottom |
Checklist general de avance
- Fase 1 — Entorno VirtualBox preparado
- Fase 2 — Setup inicial validado
- Fase 3 — Descargas y catálogo validados
- Fase 4 — Arranque GRUB validado
- Fase 5 — Casos borde validados
- Fase 6 — Correcciones aplicadas y plan cerrado