- 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>
538 lines
26 KiB
Markdown
538 lines
26 KiB
Markdown
# 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 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
|
||
|
||
- [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 1–4) (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 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.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
|