Files
rm-MULTIBOOT/docs/plan/01_pruebas-vm-virtualbox.md
T
Ricardo MonlaandClaude Sonnet 4.6 93ec80b690 docs: actualizar plan Fase 3 con hallazgos y nota sobre Netinstall en isos.conf
- Estado general actualizado a v2.11.0
- Fase 3: en progreso — tareas ejecutadas marcadas, notas detalladas de ejecución
- Hallazgos documentados: Netinstall incompatible con loopback, loopback.cfg falso
  en Linux Mint, initrd.lz, prompts ask/confirm con ANSI literal
- Fase 4 ajustada: elimina Netinstall, agrega ISOs Live y prueba de regenerar entradas
- Registro de versiones: v2.8.0 a v2.11.0 documentadas
- isos.conf: nota de advertencia en Debian Netinstall (no apta para loopback en ext4)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 01:09:09 -03:00

538 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 en progreso (v2.11.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
- [x] **1.1** Crear la VM en VirtualBox con las especificaciones indicadas
- [x] **1.2** Instalar el SO base *(ver hallazgo #2 — disco usado al 100%, sin espacio libre)*
- [x] **1.3** Verificar con `lsblk -f` — sda1 ext4 40GB al 3%, sda5 swap, sin espacio sin particionar
- [x] **1.4** Instalar dependencias: git, curl, wget, parted, e2fsprogs ✓
- [x] **1.5** Acceso a internet desde la VM: `HTTP/2 301`
- [x] **1.6** Tomar snapshot de VirtualBox con nombre `00-base-limpia`
- [x] **1.7** Repositorio clonado en `/root/rm-MULTIBOOT`
- [x] **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
<!-- Se completa al cerrar la fase -->
| # | 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 14).
#### 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
- [x] **2.1** Ejecutar el script v2.3.2 y registrar la salida de detección
- [x] **2.2** Verificar detección del sistema:
- [x] Modo de arranque: **BIOS Legacy**
- [x] SO detectado: **Debian GNU/Linux 13 (trixie)**
- [x] Disco principal: **/dev/sda (40G)** ✓
- [x] Espacio libre: **no encontrado** → error registrado en log ✓
- [x] **2.3** Agregar sistema de log al script → `/var/log/rm-multiboot.log` (v2.4.0)
- [x] **2.4** Implementar motor de detección de espacio ampliado (Escenarios 14) (v2.5.0)
- [x] **2.5** Implementar Escenario 4: instalar hook de initramfs para resize automático sin Live CD (v2.6.0)
- [x] **2.6** Probar flujo del Escenario 4 en la VM: ejecutar rm-multiboot.sh → instalar hook → reiniciar → verificar resize automático vía initramfs
- [x] **2.7** Verificar resultado post-setup:
```bash
lsblk -f
grep MULTIBOOT /etc/fstab
ls /mnt/multiboot/
cat /etc/grub.d/41_multiboot
```
- [x] **2.8** Verificar que GRUB fue actualizado sin errores:
```bash
grep -i multiboot /boot/grub/grub.cfg
```
- [x] **2.9** Tomar snapshot: `01-post-setup` (UUID: 43d76b0d-7d27-43cf-912f-bd1542740d4c)
- [x] **2.10** Implementar submenú `rm-MULTIBOOT` en GRUB (v2.8.0): las ISOs aparecen agrupadas bajo una entrada fija en el arranque, no mezcladas con las entradas del SO
#### 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:** 🔄 En progreso — ISOs descargadas, bugs encontrados y corregidos; pendiente re-test con ISOs Live
**Prerequisito:** Fase 2 completada y hallazgos revisados.
**Objetivo:** Verificar la descarga desde el catálogo (Gitea local), el progreso en
pantalla (barra, %, MB/s, ETA) y la generación correcta de entradas GRUB.
> **Ajuste post-ejecución:** La estrategia original era empezar con Alpine.
> Se cambió a Debian Netinstall (liviana, ~755 MB) + Linux Mint Xfce (Drive).
> HALLAZGO CRÍTICO: Debian Netinstall NO es apta para loopback — ver hallazgos.
> La próxima ronda debe usar ISOs Live (Debian Live Xfce o Kubuntu 24.04).
#### Tareas
- [x] **3.1** Desde el menú → Agregar ISO → Descargar desde catálogo
- [x] **3.2** Verificar que el catálogo se carga desde Gitea local (sin GitHub en la VM)
- [x] **3.3** Implementar menú de catálogo en dos niveles: categoría → ISOs (v2.9.0)
- [x] **3.4** Descargar **Debian 13.5 Netinstall** (~755 MB) desde la categoría `rm-ISOs`
- [x] **3.5** Descargar **Linux Mint 22.1 Xfce** desde Google Drive (categoría `rm-ISOs`)
- [x] **3.6** Verificar que el catálogo se muestra con secciones y la ISO ya descargada aparece marcada
- [ ] **3.7** Verificar barra de progreso: `[####----]`, %, MB, MB/s, ETA *(parcial — visible pero no validado exhaustivamente)*
- [ ] **3.8** Verificar que "ya descargada" aparece si se intenta descargar de nuevo
- [ ] **3.9** Repetir con **Debian Live Xfce** (ISO apta para loopback — pendiente)
- [ ] **3.10** Probar **Regenerar entradas GRUB** desde el menú (opción 4) *(pendiente)*
- [ ] **3.11** Tomar snapshot: `02-post-descargas` *(pendiente — esperar a ISOs Live)*
#### Notas de ejecución
```
2026-06-06 — Ejecución interactiva en la VM (teclado virtual via VBoxManage scancodes)
Estado de la VM al iniciar Fase 3: snapshot 01-post-setup activo (MULTIBOOT configurado,
sin ISOs, GRUB actualizado).
--- Mejoras implementadas antes del test ---
v2.8.0: submenú rm-MULTIBOOT en GRUB — las ISOs se agrupan bajo una entrada fija
"rm-MULTIBOOT [N ISOs]" en lugar de mezclarse con las entradas del SO.
El hook /etc/grub.d/41_multiboot genera el submenu dinámicamente leyendo los .cfg.
v2.9.0: catálogo en dos niveles — primero se elige categoría, luego se eligen ISOs.
Mejora la UX al no mostrar ~30 ISOs en pantalla simultáneamente.
isos.conf parseado por secciones "# ──" para detectar categorías.
Se agregó sección "rm-ISOs" con las ISOs de prueba prioritarias.
Fix ask()/confirm(): los prompts usaban read -rp que NO interpreta ANSI escapes.
Resultado: se mostraban literales "\033[1m" y "\033[0m" en pantalla.
Fix: cambiar a printf "%s" "$prompt" seguido de read -r por separado.
--- Descarga Debian 13.5 Netinstall ---
- Selección: categoría rm-ISOs → Debian 13.5 Netinstall
- Descarga exitosa (~755 MB)
- Entrada GRUB generada con rutas /install.amd/vmlinuz + /install.amd/initrd.gz
BUG ENCONTRADO (v2.10.0): La ISO fue montada e inspeccionada en loopback.
loopback.cfg: NO existe → se usó fallback genérico Debian.
El fallback para *debian* usaba rutas /live/vmlinuz (ISO live).
Para Netinstall las rutas son /install.amd/vmlinuz y /install.amd/initrd.gz.
Fix: agregar regla *netinst*|*netinstall* ANTES de la regla *debian* en el fallback.
--- Arranque Debian Netinstall (FALLIDO — limitación fundamental) ---
- Se reinició la VM y se seleccionó la entrada Netinstall en el submenú rm-MULTIBOOT.
- Error al arrancar: "Detectar y montar el medio de instalación"
El initramfs del instalador Netinstall NO incluye el driver ext4.
iso-scan busca la ISO en dispositivos reconocibles, pero no puede montar
la partición MULTIBOOT (ext4) → nunca encuentra la ISO.
- CONCLUSIÓN: Debian Netinstall es INCOMPATIBLE con el sistema de loopback en ext4.
No hay workaround — es una limitación del initramfs del instalador oficial.
Las ISOs Live de Debian SÍ son compatibles: tienen loopback.cfg real y usan
casper/live que sí incluye soporte ext4 en el initramfs.
- ACCIÓN: marcar Debian Netinstall como "no apta para loopback" en isos.conf.
--- Descarga Linux Mint 22.1 Xfce desde Google Drive ---
- Selección: categoría rm-ISOs → Linux Mint 22.1 Xfce (Drive)
- Descarga vía gdown exitosa.
- Entrada GRUB generada.
BUG ENCONTRADO (v2.10.0) — loopback.cfg FALSO en Linux Mint:
Linux Mint 22.1 incluye /boot/grub/loopback.cfg pero su contenido es:
source /boot/grub/grub.cfg
Esto es un loopback.cfg falso — no contiene entradas reales, solo redirige al GRUB
del host. El script lo detectaba como "tiene loopback.cfg" y generaba una entrada
que invoca configfile, que falla al bootear.
Fix: validar que loopback.cfg tenga contenido real (no solo "source", comentarios
o líneas vacías). Si es falso, usar el fallback.
BUG ENCONTRADO (v2.10.0) — initrd.lz en lugar de initrd:
Linux Mint 22.1 usa /casper/initrd.lz como initramfs (no /casper/initrd ni initrd.img).
El fallback genérico usaba /casper/initrd → entrada GRUB rota.
Fix: al montar la ISO, inspeccionar /casper/ buscando initrd.lz, initrd.img, initrd
en ese orden de prioridad. Pasar el nombre encontrado a generate_grub_entry_fallback().
v2.11.0: opción "Regenerar entradas GRUB" agregada al menú principal (opción 4).
Re-inspecciona todas las ISOs en /mnt/multiboot/isos/ y regenera sus .cfg
aplicando las correcciones actuales. Útil cuando se actualizan las reglas de detección.
--- Estado final de la VM ---
- ISOs en /mnt/multiboot/isos/: debian-13.5.0-netinst.iso, linux-mint-xfce.iso
- Entradas .cfg regeneradas con las correcciones de v2.10.0
- VM: restaurada al snapshot "01-debian-instalado" (sin MULTIBOOT, SSH activo)
Razón: el Netinstall no arrancó, y las ISOs Live apropiadas aún no se descargaron.
La Fase 3 continúa desde este snapshot en la próxima sesión.
```
#### Conclusión y hallazgos
| # | Hallazgo | Impacto en fase siguiente |
|---|---|---|
| 1 | **Debian Netinstall es incompatible con loopback en ext4**: el initramfs del instalador no incluye driver ext4 → iso-scan no puede encontrar la ISO. Limitación fundamental, sin workaround. | Usar únicamente ISOs Live para Debian en Fase 4. Marcar Netinstall como no apta en isos.conf. |
| 2 | **Linux Mint 22.1 tiene loopback.cfg falso**: contiene solo `source /boot/grub/grub.cfg`. El script lo confundía con un loopback válido y generaba una entrada rota. | Fix implementado en v2.10.0: validación real del contenido de loopback.cfg |
| 3 | **Linux Mint 22.1 usa initrd.lz** (no initrd ni initrd.img). El fallback genérico generaba una ruta inexistente `/casper/initrd`. | Fix implementado en v2.10.0: detección dinámica del initrd montando la ISO |
| 4 | **read -rp no interpreta ANSI escapes**: los prompts de `ask()` y `confirm()` mostraban códigos de color como texto literal. | Fix implementado antes del test: `printf` + `read -r` por separado |
| 5 | El menú de catálogo sin categorías es inmanejable con ~30 ISOs. | Fix implementado en v2.9.0: menú de dos niveles categoría → ISOs |
**¿Se ajusta el plan de la Fase 4?** ✅ Sí
**Ajustes realizados:** Eliminar "Debian Netinstall" de la Fase 4 y reemplazar con ISOs Live. Las ISOs a probar son: Debian Live Xfce + Linux Mint Xfce (con entradas GRUB corregidas). Agregar prueba de `regenerar_entradas_grub()` (v2.11.0).
---
### FASE 4 — Prueba de arranque desde GRUB
**Estado:** 🔲 Pendiente
**Prerequisito:** Fase 3 completada (incluyendo re-test con ISOs Live) 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.
> **Ajuste post-Fase 3:** Debian Netinstall queda fuera de scope — es incompatible con
> loopback en ext4 (limitación fundamental del initramfs del instalador). Las ISOs a
> probar son ISOs Live: Debian Live Xfce y Linux Mint 22.1 Xfce.
#### Tareas
- [ ] **4.1** Descargar **Debian Live Xfce** (~3 GB) desde catálogo `rm-ISOs`
- [ ] **4.2** Ejecutar `Regenerar entradas GRUB` (opción 4) para aplicar correcciones v2.10.0 a todas las ISOs
- [ ] **4.3** Reiniciar la VM
- [ ] **4.4** Verificar que el menú GRUB muestra la entrada `rm-MULTIBOOT [N ISOs]` y que al seleccionarla aparece el submenú correcto
- [ ] **4.5** Bootear **Debian Live Xfce** desde el menú GRUB
- [ ] Carga el kernel sin error
- [ ] Llega al entorno live (escritorio o prompt)
- [ ] **4.6** Reiniciar y bootear **Linux Mint 22.1 Xfce** desde el menú GRUB
- [ ] Carga el kernel sin error con initrd.lz detectado correctamente
- [ ] Llega al entorno live
- [ ] **4.7** Documentar cualquier error de GRUB (mensajes, pantalla negra, kernel panic)
- [ ] **4.8** Si alguna ISO falla, registrar el mensaje de error exacto y la entrada `.cfg` generada
- [ ] **4.9** Tomar snapshot: `02-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.conf` junto 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:
```bash
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.sh` y 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 15 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.conf` si 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 |
| Fase 3 | 2.8.0 | Submenú `rm-MULTIBOOT` en GRUB — ISOs agrupadas bajo entrada fija |
| Fase 3 | 2.9.0 | Catálogo en dos niveles: categoría → ISOs; sección `rm-ISOs` en isos.conf |
| Fase 3 | 2.10.0 | Detección dinámica de initrd (initrd.lz/initrd.img/initrd); validación real de loopback.cfg; regla netinstall separada en fallback GRUB |
| Fase 3 | 2.11.0 | Opción `Regenerar entradas GRUB` (menú opción 4): re-inspecciona todas las ISOs y regenera .cfg |
---
## Checklist general de avance
- [x] Fase 1 — Entorno VirtualBox preparado
- [x] Fase 2 — Setup inicial validado
- [~] Fase 3 — Descargas y catálogo (en progreso — ISOs Live pendientes)
- [ ] Fase 4 — Arranque GRUB validado
- [ ] Fase 5 — Casos borde validados
- [ ] Fase 6 — Correcciones aplicadas y plan cerrado