- _complete_setup_if_needed(): completa fstab + grub hook cuando MULTIBOOT
existe pero el script se corre por primera vez post-reboot (Escenario 4).
También limpia hooks residuales del initramfs si el local-bottom falló y
regenera el initramfs. Se llama desde menu_principal al detectar MULTIBOOT.
- local-bottom: robustecer el script de cleanup para buscar el mountpoint
correcto cuando rootmnt no está en el entorno. Agrega logging detallado.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reemplaza el script de rescue manual (que requería Live CD) por un
mecanismo que instala hooks en initramfs para reducir la partición
raíz y crear MULTIBOOT en el próximo arranque, sin ningún medio externo.
Cambios técnicos:
- _wizard_rescue_root: genera local-premount y local-bottom en initramfs
- Hook de herramientas: copia resize2fs, parted, mkfs.ext4, mke2fs, e2fsck
- parted ---pretend-input-tty con doble Yes: acepta warnings interactivos
- +1 MiB en new_root_end_mib: corrige descalce de alineamiento de parted
- mkpart con Yes: acepta "closest location" cuando hay partición extendida adyacente
- local-bottom cleanup: elimina hooks de la raíz vía ${rootmnt} post-resize
- Condición idempotente: no actúa si el dispositivo destino ya existe
- Plan actualizado: tareas 2.4 y 2.5 completadas, versiones registradas
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Implementa 4 escenarios de disco reales:
Escenario 1: espacio libre sin particionar en cualquier disco (anterior)
Escenario 2: disco secundario vacío disponible
Escenario 3: partición no-raíz con espacio libre (resize en caliente)
Escenario 4: solo espacio en filesystem raíz → genera script rescue para live CD
- Agrega sistema de log en /var/log/rm-multiboot.log con timestamps
- El script rescue generado automatiza e2fsck + resize2fs + parted + mkfs
- Plan de pruebas actualizado: Fase 2 ampliada, Fase 5 ajustada
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
VM rm-multiboot-test creada con VBoxManage:
- 2 CPU, 2 GB RAM, 40 GB disco VDI, NAT, BIOS Legacy
- Debian 13.5.0 netinstall (755 MB) conectado al DVD
- Snapshot 00-base-limpia tomado
Hallazgo registrado: URLs de Debian en isos.conf desactualizadas (v12→v13).
Pendiente: instalación del SO en la VM (tareas 1.2–1.7).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docs/plan/01_pruebas-vm-virtualbox.md — 6 fases con metodología de
mejora continua: cada fase cierra con Conclusión y Hallazgos que
sirven de input para replantear la fase siguiente antes de ejecutarla.
Fases:
1. Preparación del entorno VirtualBox
2. Ejecución del setup inicial
3. Catálogo y descarga de ISOs
4. Arranque desde GRUB
5. Casos borde y condiciones adversas
6. Correcciones, optimizaciones y cierre
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Calcula el tiempo estimado restante usando velocidad promedio desde el
inicio de la descarga (más estable que velocidad instantánea para ETA).
Formato mm:ss para descargas < 1 hora, h:mm:ss para descargas largas.
Muestra "--:--" mientras no hay datos suficientes para estimar.
ETA solo aparece cuando el servidor informa Content-Length.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Calcula delta de bytes entre cada tick del loop (0.3 s) y lo convierte
a MB/s con un decimal via awk. Se muestra en la misma línea de progreso:
→ [########------------] 42% (1823 de 4340 MB) 23.5 MB/s
Sin Content-Length: "1247 MB 23.5 MB/s"
Al completar: muestra tamaño final sin velocidad (limpia la línea).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Nueva función get_remote_size: obtiene Content-Length via HEAD request
- Nueva función download_with_progress: descarga en background y muestra
barra [####----] + porcentaje + MB actuales / MB totales en tiempo real
- gdrive_download simplificada: delega en download_with_progress
- download_from_catalog usa un único punto de descarga para Drive y URLs directas
- Fallback a "X MB descargados..." cuando el servidor no informa Content-Length
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Nuevas funciones: is_gdrive_url, gdrive_file_id, gdrive_real_filename,
gdrive_download — detectan y descargan desde URLs de Google Drive
usando drive.usercontent.google.com con confirm=t (sin redirección)
- El nombre del archivo se obtiene del header Content-Disposition;
si falla, se genera desde el nombre del catálogo
- Agrega ChromeOS Flex (stable) al catálogo con nota de que es imagen
de disco para flashear, no ISO booteable por GRUB loopback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
El catálogo se obtiene en tiempo de ejecución desde:
raw.githubusercontent.com/ricardomonla/rm-MULTIBOOT/main/isos.conf
Flujo: intenta GitHub primero → fallback al archivo local si no hay red.
El archivo temporal se limpia automáticamente tras leer las entradas.
Actualizar el catálogo ahora solo requiere editar isos.conf en GitHub.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Script renombrado a rm-multiboot.sh con header de autor y versión
- Nuevo archivo isos.conf: catálogo NOMBRE|URL con 30+ distros populares
- Nuevo flujo "Agregar ISO": elegir entre descargar del catálogo o ruta local
- Descarga con wget (con fallback a curl) y retoma descargas incompletas (-c)
- El nombre del catálogo se usa como etiqueta GRUB cuando la detección es genérica
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Script interactivo para configurar multiboot desde disco interno.
Auto-detecta sistema, crea partición MULTIBOOT en espacio libre,
gestiona ISOs con entradas GRUB automáticas (loopback + fallback).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>