diff --git a/docs/plan/01_pruebas-vm-virtualbox.md b/docs/plan/01_pruebas-vm-virtualbox.md index dae270d..d42537b 100644 --- a/docs/plan/01_pruebas-vm-virtualbox.md +++ b/docs/plan/01_pruebas-vm-virtualbox.md @@ -3,7 +3,7 @@ **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) +**Estado general:** 🔄 En progreso — Fases 1 y 2 completadas, Fase 3 en progreso (v2.11.0) --- @@ -255,73 +255,148 @@ El mensaje al usuario es claro pero la acción siguiente no está implementada e ### FASE 3 — Prueba de catálogo y descarga de ISOs -**Estado:** 🔲 Pendiente +**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 (GitHub), el progreso en +**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. -> **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. +> **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 -- [ ] **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` -- [ ] **3.5** Verificar post-descarga: - ```bash - 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) +- [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** Tomar snapshot: `02-post-descargas` +- [ ] **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 ``` -[ espacio para registrar lo que ocurrió ] +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 | |---|---|---| -| — | *(pendiente)* | — | +| 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í / 🔲 No -**Ajustes realizados:** *(ninguno hasta completar esta fase)* +**¿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 y hallazgos revisados. +**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** Reiniciar la VM -- [ ] **4.2** Verificar que el menú GRUB muestra la entrada `rm-MULTIBOOT [N ISOs]` y que al seleccionarla aparece el submenú con las ISOs descargadas -- [ ] **4.3** Bootear **Alpine Linux** desde el menú GRUB +- [ ] **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 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 `.cfg` generada -- [ ] **4.7** Tomar snapshot: `03-post-boot-test` + - [ ] 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 @@ -445,6 +520,10 @@ fallaron y documentar el estado final del script para uso en producción. | 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 | --- @@ -452,7 +531,7 @@ fallaron y documentar el estado final del script para uso en producción. - [x] Fase 1 — Entorno VirtualBox preparado - [x] Fase 2 — Setup inicial validado -- [ ] Fase 3 — Descargas y catálogo validados +- [~] 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 diff --git a/isos.conf b/isos.conf index f55915c..ca8e825 100644 --- a/isos.conf +++ b/isos.conf @@ -16,6 +16,9 @@ # ============================================================================= # ── rm-ISOs ─────────────────────────────────────────────────────────────────── +# NOTA: Debian Netinstall NO es apta para loopback en ext4 — el initramfs del +# instalador no incluye driver ext4, iso-scan no puede encontrar la ISO. +# Usar ISOs Live de Debian en su lugar (tienen loopback.cfg real y casper con ext4). Debian 13.5 Netinstall | https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-13.5.0-amd64-netinst.iso Kubuntu 24.04 LTS | https://cdimage.ubuntu.com/kubuntu/releases/24.04/release/kubuntu-24.04.1-desktop-amd64.iso Linux Mint 22.1 Cinnamon | https://mirrors.edge.kernel.org/linuxmint/stable/22.1/linuxmint-22.1-cinnamon-64bit.iso