Volver a la wiki

Lanzador Estable F3 — Auto-update desatendido transparente (onedir + setup stub)

Descripción

Plan F3 del Lanzador Estable es eliminar la carrera del antivirus contra la re-extracción de .pyd nativos en cada arranque del Agente.

Cambios:

  1. Bootstrap de --onefile → --onedir (los .pyd viven en _internal, sin re-extracción en cada arranque).
  2. Setup stub (CreaRackAgent-Setup.exe, scripts/agent/setup_stub.py): un onefile stdlib-only que despliega el onedir en %APPDATA% una sola vez.
  3. Rollback silencioso mejorado: si un paquete falla, reintenta y luego cae al embebido.

Problema que resuelve

Raíz del bug pydantic_core / _overlapped

El bootstrap en onefile se re-extrae a un directorio temporal _MEIxxxx en cada arranque. Durante esa extracción:

Síntomas

Solución F3

Con --onedir:

Arquitectura F3

1. Bootstrap en --onedir

2. Setup stub (CreaRackAgent-Setup.exe)

3. Vista de descarga (core/views.download_agent)

4. Agente simplificado

Validación E2E

Status: Pendiente en VM limpia con Defender real (task #187).

Prueba en vivo (07-07, Agent 2.15.0 beta)

Notas de implementación

  1. Hallazgo 1 (documentado para futuro): El onefile re-extrae .pyd en cada relanzamiento → AV puede morder uno.

    • Solución: --onedir (aplicada en F3).
  2. Hallazgo 2 (arreglado en 2.14.1): Al transicionar de embebido a primer paquete, previous.txt vacío → watchdog se perdía.

    • Solución: _watchdog_script borrador de current.txt, caída al embebido (aplicada en feature—agent-lanzador—rollback-silencioso-infalible).

Migración de flota legacy

Antes de tocar el sidecar de versión (que ordena updates):

  1. Reinstalar con el nuevo instalador (onedir).
  2. El bootstrap onedir es un binario nuevo (diferente hash que onefile).
  3. Una máquina sin bootstrap recibiría url=Setup.exe → intentaría swap del instalador (inválido).

Plan de flujos

  1. Instalación fresca: User descarga CreaRackAgent-Setup.exe → setup despliega onedir en %APPDATA% → Agente corre.
  2. Auto-update: Agente descarga paquete → verifica → swap de current.txt → relanza.
  3. Rollback: Paquete falla → reintenta → cae al embebido (o previous.txt si existe).

Tests nuevos

Véase también

Subir