CreaRack-SL

Auto-update por paquete firmado — Primera validación E2E (2.14.1)

Descripción

Release 2.14.1 del Agente entregada como paquete firmado (app-2.14.1.zip ~200 KB, firma Ed25519) sin recompilar ni tocar el .exe. Primer validación E2E del Lanzador Estable F2.

Flujo: descarga → verifica firma Ed25519 → actualiza puntero current → relanza en 2.14.1.

Validación E2E (07-07, máquina de Edu)

  • Máquina de producción: publicó release de prueba 2.14.1 (paquete firmado).
  • Resultado: el .exe quedó byte-idéntico antes/después.
  • Carrera antivirus eliminada por construcción: sin nuevo binario, el AV no tiene momento donde bloquear la extracción de un onefile sin reputación.

Implementación

Lado server

  • core/views.download_agent: sirve el instalador.
  • core/agent_release.py: gestiona las releases (manifest v2 con campos package_*).
  • /api/agent/manifest: publica package_url, package_hash, package_signature.

Lado Agente (bootstrap)

  • terminal/agent/bootstrap.py: descarga, verifica SHA-256 + Ed25519, swap de puntero atómico.
  • core/pkg_updater.py (nuevo, viaja en el paquete): updater que se actualiza a sí mismo, regresa a bootstrap con funciones de verificación (cero duplicación).
  • pkg-watchdog con rollback de puntero: sin AV en la ecuación, fallo = bug real → rollback certero.

Clave privada Ed25519

  • Ubicación: fuera del repo y servidor (~/.crearack/keys/agent_signing.key).
  • Generación: scripts/agent/generate_signing_key.py.
  • Rotación: script disponible.
  • Ventaja de seguridad: un SaaS comprometido ya no puede empujar código a máquinas de clientes (antes sí: SHA desde el propio server).

Testing

  • 19 tests nuevos en tests/agent/test_agent_launcher.py:
    • Verificación SHA-256 y Ed25519.
    • Fallback current → previous → embebido.
    • Markers de extracción, gates, punteros atómicos.
    • Pruning, payload del servidor.
  • Suite: agente 83/83 ✅ + servidor 12/12 ✅.

Limitaciones (para F3)

  • Bootstrap 2.14.0 aún es onefile → re-extrae .pyd en cada arranque.
  • AV puede morder un .pyd en esa extracción (raíz del traceback pydantic_core, hermano de _overlapped).
  • Fix F3: pasar bootstrap a --onedir (los .pyd viven en _internal, se escanean una vez).

Cambios en .gitignore

  • static/downloads/*.exe: todos los executables de agente.
  • static/downloads/app-*.zip: paquetes de código (artefactos de build).
  • static/downloads/app-*.meta.json: metadatos de paquetes.

Véase también

  • [[feature—agent-lanzador—bootstrap-zip]]
  • [[concept—agent-lanzador—bootstrap-y-pkg-updater]]
  • [[decision—20260707—netbird-ssh-apex]]
  • [[feature—agent-lanzador—onedir-f3]]
  • [[incident—20260707—bootstrap-2-14-0-roto]]