instalador: TUI interactivo (disco/identidad/locale/tamaños) sobre el autoinstalador

hammer-install crece una cara humana sin tocar la mecánica EFI/BIOS validada:
- sin device + TTY ⇒ interactive_setup: detecta discos (/sys/block, marca el
  montado como posible medio live), el usuario elige + confirma escribiendo el
  nombre del disco, y recoge hostname / credencial de root (contraseña vía
  cryptpw o authorized_keys) / zona horaria (best-effort si hay tzdata) /
  teclado / tamaños de / y /store.
- apply_post_install_config escribe hostname+hosts, reemplaza el hash de root en
  /etc/shadow, instala authorized_keys, symlinkea localtime y deja install.conf;
  se llama tras la copia en AMBAS ramas (EFI y BIOS).
- con device ⇒ autoinstalador de siempre (iso/efi-install-test intactos); la
  config sale de env (HAMMER_HOSTNAME/ROOT_PW/ROOT_AUTHKEYS/TZ/KEYMAP).
- iso-image.sh: ISO instalador sin AUTO_INSTALL ahora recibe con la TUI en la
  consola (INSTALLER_INTERACTIVE, default on) y ofrece reiniciar/caer al live.

Verificado: scripts/install-tui-test.sh (4/4, dry-run con sysfs+rootfs falsos)
+ iso-install-test.sh VERDE end-to-end en QEMU (autoinstalador con la config
nueva bajo busybox real → disco bootea solo y sirve SSH).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 22:22:21 -04:00
co-authored by Claude Opus 4.8
parent 494d3fd615
commit 9305bb16e9
3 changed files with 359 additions and 5 deletions
+9
View File
@@ -77,6 +77,15 @@ cp -al "$ROOTFS" "$RFS/root"
echo "if /usr/bin/hammer-install '${AUTO_INSTALL}'; then echo 'HAMMER-INSTALL-OK'; else echo 'HAMMER-INSTALL-FAIL'; fi"
echo '/bin/busybox sync'
echo '/bin/busybox poweroff -f'
elif [ "${INSTALLER:-0}" = 1 ] && [ "${INSTALLER_INTERACTIVE:-1}" = 1 ]; then
# ISO instalador SIN AUTO_INSTALL ⇒ recibir al usuario con la TUI del instalador en la consola.
# Tras instalar (o cancelar) ofrece reiniciar o caer al live. HAMMER_INSTALL_INTERACTIVE fuerza el
# modo aunque /dev/console no pase el test -t (a esta altura stdin puede no ser un tty).
echo '[ -e /dev/console ] && exec 0</dev/console 1>/dev/console 2>/dev/console'
echo 'HAMMER_INSTALL_INTERACTIVE=1 /usr/bin/hammer-install || true'
echo 'echo; echo "Instalación finalizada. [r] reiniciar · [Enter] shell en vivo"'
echo 'read -r _a || _a=""'
echo 'case "$_a" in r|R) /bin/busybox reboot -f ;; *) exec /sbin/init ;; esac'
else
echo 'exec /sbin/init'
fi