El run de Windows terminaba en verde sobre un servidor que seguia con la version anterior. La verificacion no podia detectarlo: - El sello config\.version ausente se toleraba SIEMPRE. Los agentes anteriores a 1.1.1 no lo escribian, asi que al actualizar uno de esos `deployed` llegaba vacio y no se comprobaba ninguna version — justo la combinacion que importa. Ahora, en una ACTUALIZACION, un sello ausente es un fallo: el binario nuevo lo escribe en ensure_runtime_layout(), asi que su ausencia significa que lo que corre no es el que se instalo. La tolerancia se queda solo en instalacion nueva. - `Get-Process -Name` responde "hay un proceso con ese nombre", no "corre el binario que instale". Se compara la RUTA del ejecutable; si no es legible no se concluye que sea ajeno, porque un proceso de SYSTEM no la expone sin elevacion. - Se interroga la tarea programada a fondo: su accion dice DONDE arranca el agente de verdad y se asienta en la bitacora (el dato que habria explicado esto en diez segundos), y cuando el agente no reporta su ruta —nada anterior a 1.1.1 lo hace— se usa la de la tarea en vez del default. Y dos correcciones de lo anterior: - needsElevation exigia admin en cuanto la tarea EXISTIA, bloqueando de entrada toda actualizacion sobre un servidor ya instalado. Ahora depende de que la tarea corra como SYSTEM, que es lo que de verdad obliga a elevar; y el token filtrado por UAC deja de rechazarse por adelantado: se intenta y se reporta lo que responda el servidor. - -UpdateInPlace se pasaba siempre, pero solo existe desde 1.1.3 y install.ps1 usa [CmdletBinding()], asi que con un artefacto anterior fallaba con NamedParameterNotFound sin ejecutar una linea. Se le pregunta a PowerShell por el param() del propio artefacto en vez de mantener una tabla de versiones. Verificar comparte las dos sondas nuevas para que no pueda contradecir al instalador, y gana un chequeo de "el arranque apunta a la instalacion". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Panel de Gestión de Bases de Datos (SvelteKit Migration)
Este proyecto es una migración moderna del panel de control legacy TransmitirAS, reconstruido utilizando SvelteKit 2.0 y Svelte 5 (Runes).
Características
- Tech Stack: SvelteKit, TypeScript, Node.js (MSSQL), Bootstrap 5.
- Server-Side Rendering (SSR): Todos los datos se cargan en el servidor para una carga inicial rápida y SEO/Performance óptimo.
- Base de Datos: Conexión a múltiples instancias SQL Server (Local, Remota, Azure).
- Diseño: Interfaz "Glassmorphism" portada fielmente del original.
Requisitos Previos
- Node.js: v18 o superior.
- SQL Server: Acceso a las instancias de base de datos definidas en
.env.
docker build \
-t dev.aduanasoft.com:8443/databases_a24c/frontend:latest \
-f ./Dockerfile \
./
Subirlas a harbor
docker login dev.aduanasoft.com:8443
docker push dev.aduanasoft.com:8443/databases_a24c/frontend:latest
Configuración
-
Instalar dependencias:
npm install -
Variables de Entorno: El archivo
.envya ha sido configurado con las credenciales migradas. Asegúrese de que la máquina donde se ejecuta esto tenga acceso de red a las IPs:- 192.168.1.200 (Primaria)
- 104.192.7.202 (Secundaria)
- aduanasoft.database.windows.net (Azure)
-
Ejecutar en Desarrollo:
npm run devAbrir http://localhost:5173 en el navegador.
-
Construir para Producción:
npm run build npm run preview
Estructura del Proyecto
src/lib/server/db.ts: Lógica de conexión a base de datos (Pools).src/routes/+page.server.ts: Controlador principal. Realiza todas las consultas SQL y lectura de archivos antes de renderizar.src/routes/+page.svelte: Vista principal. Gestiona la navegación por pestañas y tablas.src/lib/components/: Componentes reutilizables (Navbar,Sidebar).src/app.css: Estilos globales y tema Glass.
Integración CloudRestoreAS
- Endpoints servicio-a-servicio bajo
/api/restore/(tokenCLOUDRESTORE_API_TOKENen.env). - Servidores de Restauración (
/servidores-restauracion): admin de Alfa/Omega/Gamma y carpeta de entrada reportada por CloudRestoreAS (solo lectura). - Contrato y prueba local: ver
INTEGRACION_PANEL.mden el repo CloudRecoveryAS (mismo token enCLOUDRESTORE_API_TOKENy en la config PANEL de CloudRestoreAS).
Versiones CRAS (/versiones-cras) — instalación y actualización remota
Distribución de los binarios del agente. Los artefactos se publican en el registro de
paquetes genéricos de Gitea desde el build local del repo CloudRecoveryAS
(build-all.sh --publish); el panel los descubre leyendo esa API y los despliega por SSH.
build local (WSL) → Gitea: ADUANASOFT/generic/cloudrestoreas/<version>
↓ (el panel lee la API y guarda metadatos + sha256)
a24c.cras_releases → caché en CRAS_RELEASES_DIR
↓ (SFTP + exec)
servidor de restauración
Flujo de operación:
- Sincronizar con Gitea — registra las versiones publicadas en
a24c.cras_releases. Nunca activa nada por su cuenta: publicar no debe equivaler a desplegar. - Activar — marca la versión que se instalará, una por plataforma+arquitectura (índice único parcial en la BD, para que Windows y Linux tengan cada una la suya).
- Precargar (opcional) — descarga y verifica el artefacto antes de instalar, para separar el tiempo de descarga del de instalación.
- Instalar / Actualizar por servidor — sube el paquete por SFTP, verifica el sha256 en
el destino, corre el instalador que viene dentro del paquete y siembra
config/.envcon la URL, el token y la instancia: el servidor queda operativo sin configuración manual.
Detalles que importan:
- Los binarios no se guardan en Postgres (pesan ~270 MB); la BD solo tiene metadatos.
- El servidor destino no descarga nada de internet: el binario es autocontenido.
- El token del panel viaja al destino en un archivo
0600por SFTP, nunca como argumento de un comando (sería visible enpsy en el historial del servidor). - Se exige root o
sudo -nen Linux (y cuenta administradora en Windows), validado antes de transferir el artefacto. No se le pasa la contraseña asudo. - El progreso se persiste paso a paso en
a24c.cras_install_runs.steps; la UI lo consulta por polling en/versiones-cras/install-runs. - No hay subida de archivos por el navegador a propósito: la fuente de verdad es Gitea.
Variables nuevas en .env: GITEA_BASE_URL, GITEA_OWNER, GITEA_TOKEN
(scope read:package), CRAS_PACKAGE_NAME, CRAS_RELEASES_DIR,
CRAS_CACHE_KEEP_VERSIONS, PANEL_PUBLIC_URL. Ver .env.example.
Esquema: migración e2f3a4b5c6d7 en el repo a24c (autoritativa), replicada en
database/schema.sql y en el fallback ensureCrasSchema() de cras-releases.ts.
Notas de Migración
- DataTables: Se inicializan en el cliente dentro de
onMountpara mantener la compatibilidad con las tablas interactivas originales. - Sistema de Archivos: La lectura de backups busca en
BACKUP_PATHen el servidor donde corre Node.js (independiente de la carpeta que vigila CloudRestoreAS).