docs: documentar el instalador de Windows y corregir lo que contradecía al código
README afirmaba que la app no puede correr como servicio de Windows y sugería NSSM, contradiciendo a install.ps1 desde que existe. LEEME.txt solo documentaba el camino manual para Windows, mientras que para Linux ya traía el instalador. BUILD.md gana -UpdateInPlace, las tres garantías al reemplazar el binario y el remedio del token filtrado por UAC. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
31
BUILD.md
31
BUILD.md
@@ -194,9 +194,10 @@ sudo systemctl restart cloudrestoreas # tras editar config/.env
|
||||
Expand-Archive CloudRestoreAS-<version>-win-x86_64.zip -DestinationPath .
|
||||
cd CloudRestoreAS
|
||||
|
||||
.\install.ps1 -Service # tarea programada ONSTART como SYSTEM (24/7 headless)
|
||||
.\install.ps1 -Desktop # arranque al iniciar sesión (tarea ONLOGON de la app)
|
||||
.\install.ps1 # solo instala + bootstrap
|
||||
.\install.ps1 -Service # tarea programada ONSTART como SYSTEM (24/7 headless)
|
||||
.\install.ps1 -Desktop # arranque al iniciar sesión (tarea ONLOGON de la app)
|
||||
.\install.ps1 -UpdateInPlace # actualiza una instalación existente, conservando su tarea
|
||||
.\install.ps1 # solo instala + bootstrap
|
||||
Get-Help .\install.ps1 -Detailed
|
||||
```
|
||||
Parámetros: `-Prefix` (default `C:\Aduanasoft\CloudRestoreAS`), `-PanelEnvFile`.
|
||||
@@ -205,6 +206,30 @@ Parámetros: `-Prefix` (default `C:\Aduanasoft\CloudRestoreAS`), `-PanelEnvFile`
|
||||
arranque 24/7 se resuelve con una tarea programada, no con NSSM: descargarlo violaría la
|
||||
regla de que en el servidor destino no se instala ni se baja nada.
|
||||
|
||||
Si la cuenta pertenece a Administradores y aun así se rechaza, el mensaje lo dice explícitamente:
|
||||
es el **token filtrado por UAC**, que es lo que recibe una sesión de OpenSSH. No se arregla
|
||||
cambiando de cuenta sino con `LocalAccountTokenFilterPolicy=1` (DWORD) en
|
||||
`HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System`.
|
||||
|
||||
### Garantías al reemplazar el binario (las mismas en los dos instaladores)
|
||||
|
||||
Reemplazar el binario de un servidor en producción no puede dejarlo sin restaurador:
|
||||
|
||||
1. **No se actúa si hay una restauración en curso** (`Temp\` no vacío): se sale con **75**
|
||||
(`EX_TEMPFAIL`), que el PANEL traduce a "reintenta luego" y no a "falló la instalación".
|
||||
Interrumpirla dejaría ese respaldo vetado en cada escaneo posterior y la base en `SINGLE_USER`.
|
||||
2. **Se respalda el binario anterior** antes de pisarlo (`.CloudRestoreAS.exe.prev`).
|
||||
3. **Se confirma que el agente volvió a arrancar** y, si no, se **revierte** al binario anterior.
|
||||
El respaldo solo se descarta tras esa confirmación.
|
||||
|
||||
`-UpdateInPlace` además no vuelve a registrar la tarea (así no pisa ajustes hechos sobre ella) y
|
||||
se salta el bootstrap: una segunda instancia purgaría el `Temp\` de la que está viva. Es el modo
|
||||
que usa el PANEL para actualizar.
|
||||
|
||||
El arranque headless no depende del entorno de la tarea: `--headless` hace que el binario elija
|
||||
el plugin Qt `offscreen` en cualquier plataforma, que es lo que le permite correr como SYSTEM en
|
||||
la sesión 0, donde no hay escritorio interactivo.
|
||||
|
||||
> `scripts/dev-setup.ps1` es otra cosa: prepara el entorno de **desarrollo** (Python, venv,
|
||||
> `requirements.txt`) para correr `python runner.py`. No sirve para desplegar el binario.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user