Instalación desatendida de Arch Linux por red (iPXE), con portal web responsive que genera URLs únicas de configuración.
Versión: 1.0.0 · Arquitectura: x86_64 · Sistema base: Arch Linux (rolling release) · Licencia: GPL-3.0
NEUBAT permite desplegar un Arch Linux completo, preconfigurado y funcional desde Internet, sin medios físicos (USB/CD). El usuario define su instalación desde un portal web (móvil o escritorio), obtiene una URL/token único, y la máquina destino arranca por red (iPXE), descarga esa configuración e instala el sistema sin intervención.
Principios:
- Zero-touch deployment — cero intervención tras la selección inicial.
- Infrastructure as Code — toda la configuración versionada y reproducible (JSON + scripts).
- Rolling release — sistema siempre actualizado, sin migraciones traumáticas.
- Monolito recortado — sistema mínimo, sin bloatware, optimizado para su propósito.
| # | Objetivo | Métrica de éxito |
|---|---|---|
| 1 | Portal de usuarios responsive | Accesible desde móvil/desktop, carga < 2 s |
| 2 | URL generada post-instalación | URL única funcional en < 5 min desde el arranque |
| 3 | Instalación desatendida | 0 intervenciones tras la selección inicial |
- Portal web responsive (React + shadcn/ui) para crear instalaciones y obtener URLs únicas de arranque.
- Arranque por red (iPXE) o ISO híbrida autoinstalable sin USB.
- Particionado automático GPT/UEFI con btrfs, swap y soporte NVMe.
- Cifrado de disco LUKS2 opcional para
/y/home, con arranque desatendido vía keyfile o passphrase interactivo. - Snapshots btrfs automáticos con snapper + snap-pac (pre/post actualizaciones de pacman).
- Firma HMAC-SHA256 de configuraciones para detectar manipulación en tránsito.
- Métricas de instalación y panel de administración (
/admin). - Post-instalación con Ansible (first-boot) y portal local en el sistema instalado.
neubat/
├── portal/ # Portal web (Node.js + Express)
│ ├── server.js # Servidor principal
│ ├── package.json
│ ├── Dockerfile # Imagen de producción del portal
│ ├── lib/db.js # Persistencia JSON y utilidades
│ ├── routes/install.js # API: creación y entrega de configs, boot iPXE
│ ├── routes/admin.js # API de administración
│ ├── routes/status.js # API: health y listado de instalaciones
│ ├── frontend/ # SPA React + Vite + shadcn/ui
│ │ ├── src/pages/ # HomePage y AdminPage
│ │ ├── src/components/ui/ # Componentes shadcn/ui
│ │ └── package.json
│ └── public/ # Build estático del frontend + wiki.html
├── netboot/
│ ├── ipxe/neubat.ipxe # Menú de arranque por red
│ └── grub/loopback.cfg # Fallback: arranque de ISO desde disco (GRUB loopback)
├── scripts/
│ ├── neubat-install.sh # Script maestro (orquestador)
│ ├── build-iso.sh # Generador de ISO híbrida (Docker + archiso)
│ ├── build-iso-inner.sh # Script interno de construcción de la ISO
│ ├── 00-preinstall.sh # Validaciones previas
│ ├── 10-partition.sh # Particionado automático (GPT/UEFI/btrfs, NVMe-safe)
│ ├── 20-archinstall.sh # Config remota + sistema base (pacstrap)
│ ├── 30-postinstall.sh # Configuración en chroot + aplicaciones
│ ├── 40-portal-deploy.sh # Despliegue del portal local + URL única
│ └── validate-install.sh # Checklist de validación post-instalación
├── configs/
│ ├── base.json # Perfil mínimo (sin GUI)
│ ├── production.json # Perfil producción (KDE + servicios)
│ └── developer.json # Perfil desarrollo (GNOME + toolchains)
├── iso/ # Overlay del live ISO (servicio de autoinstalación)
│ └── airootfs/
├── deploy/
│ └── pacman-cache/ # Proxy caché nginx de paquetes pacman (opcional)
├── tests/
│ └── vm/ # Prueba end-to-end QEMU/NVMe (neubat_vm_test.py)
└── docs/
├── INSTALL.md # Documento maestro de instalación y despliegue
├── ARCHITECTURE.md # Arquitectura técnica y diagrama de flujo
├── ROADMAP.md # Próximos pasos
├── RELEASE-v1.0.0.md # Notas de la release v1.0.0
└── assets/ # Capturas de pantalla
docker compose up -d
# http://localhost:3000O en local con Node.js:
cd portal/frontend && npm install && npm run build
cd ..
npm install
npm start # http://localhost:3000Desde el portal se crea una instalación (POST /api/install), que devuelve un token y una boot_url (/boot/<token>) con el script iPXE personalizado.
Encadena iPXE a:
http://<servidor-portal>/boot/<token>
o usa netboot/ipxe/neubat.ipxe para el menú interactivo.
Construye la ISO (requiere Docker):
make build-iso
# out/neubat-1.0.0-x86_64.isoArranca una máquina con la ISO y pasa el token por kernel cmdline:
neubat_token=<token> neubat_profile=production neubat_portal_url=http://<portal>:3000
El instalador se ejecuta de forma desatendida y notifica al portal al finalizar.
export NEUBAT_PORTAL_URL="http://<servidor-portal>"
bash scripts/neubat-install.sh <token> [perfil]AVISO: el instalador destruye todos los datos del disco objetivo. Usar solo en máquinas destinadas a ello.
Tras el primer arranque:
bash scripts/validate-install.sh- docs/INSTALL.md — documento maestro completo
- docs/ARCHITECTURE.md — diagrama de flujo y componentes
- docs/ROADMAP.md — próximos pasos
La release v1.0.0 incluye la ISO híbrida lista para arrancar:
Verifica:
sha256sum -c neubat-1.0.0-x86_64.iso.sha256El portal incluye un panel en /admin protegido por ADMIN_TOKEN. Permite listar, filtrar, resetear, marcar como completadas y eliminar instalaciones.
ADMIN_TOKEN=tu-token-seguro docker compose up -dAccede a http://localhost:3000/admin e introduce el token.
- Las contraseñas iniciales son parametrizables vía JSON; el valor por defecto (
neubat) debe cambiarse en el primer acceso. - HMAC-SHA256: configura
NEUBAT_HMAC_SECRETen el portal y en el entorno live para firmar y verificar las configuraciones. - LUKS2: cifrado opcional de raíz y home; el método
keyfilepermite arranque desatendido y debe rotarse tras la instalación en entornos sensibles. - El portal aplica rate-limiting básico en
/api/*. Para exposición pública, despliega detrás de un reverse proxy con TLS.
