From a45d39154c985aa99685342094fcdd19357d9874 Mon Sep 17 00:00:00 2001 From: RViktor <120401244+v1k70rk4@users.noreply.github.com> Date: Thu, 16 Jul 2026 21:33:59 +0200 Subject: [PATCH] Release 2.0.0: survive a blip, a lost report, and the server's own OS Unifies every component at 2.0.0.0 and documents what landed since 1.9.0. No database schema change since 1.9.0. - Fleet-identity backup/restore (deploy/backup.sh + restore.sh, and the same from the console under Server settings -> Backup, always passphrase-encrypted): an OS swap under the server no longer means re-enrolling every device. - VNC survives a network blip: bastion keepalive now mirrors the agent (15x3), the agent retries the reverse-forward bind across the window, and the console waits for the RFB greeting instead of launching a viewer at a dead tunnel. - The VNC-secret report retries until the server confirms receipt. - "Restart RACD" command: VNC -> Helper -> agent, verifying the Helper is alive before the agent goes down. - Expired sessions return to sign-in instead of surfacing a raw 401. - Dependency bumps (NuGet + Actions, Avalonia 12.1); warning-free build. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 39 ++++++++++++++++++- .../RemoteAgent.Updater.csproj | 2 +- src/RemoteAgent/RemoteAgent.csproj | 2 +- .../RemoteClient.Linux.csproj | 2 +- .../RemoteClient.Lite.csproj | 2 +- src/RemoteClient/RemoteClient.csproj | 2 +- src/RemoteServer/RemoteServer.csproj | 2 +- 7 files changed, 44 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6b99f21..74f58e7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ .NET 10 Windows agent Linux server - version 1.9.0 + version 2.0.0 MaterialSkin website

@@ -39,6 +39,7 @@ Use this only on systems you own or are explicitly authorized to administer. ## Contents +- [What's New in 2.0.0](#whats-new-in-200) - [What's New in 1.9.0](#whats-new-in-190) - [What's New in 1.8.5](#whats-new-in-185) - [What's New in 1.8.0](#whats-new-in-180) @@ -59,6 +60,42 @@ Use this only on systems you own or are explicitly authorized to administer. --- +## What's New in 2.0.0 + +A **survivability** release: the fleet now rides out the things that used to need a human — a network +blip, a lost report, an expired session — and, for the first time, an **OS swap under the server**. +**No database schema change since 1.9.0.** + +**Surviving the server's own OS** +- `deploy/backup.sh` + `deploy/restore.sh` capture and re-adopt the **fleet's identity**: the CA that + issued every client certificate, the command-signing key, the bastion SSH host key each agent pins, and + the database. Devices are never "imported" — their identity lives on the device; restore these and an OS + swap is invisible to all of them. Miss the SSH host key and every tunnel breaks: `04-server` rebuilds + `bastion.env` from whatever key is present, so the restore goes **first**, and the installer (which only + generates secrets that are *missing*) then adopts the fleet instead of locking it out. +- The same backup from the console: **Server settings → Backup**. A root helper does the privileged part + (the server cannot read the host key), and the archive is **always passphrase-encrypted** — it leaves + the box through an 8-hour admin session, and the keys inside cannot be revoked. The server keeps no copy + of the passphrase and drops the archive as it hands it over. + +**VNC that comes back on its own** +- **A network blip no longer kills VNC for ~6 minutes.** The bastion released a dropped session's reverse + port only after a 120s×3 keepalive, while the agent gave up in 45s — so a returning agent could not + rebind its own (deterministic) port and `ExitOnForwardFailure` killed the tunnel. The bastion now + mirrors the agent (15×3), the agent **retries** across the window, and the console **waits for the RFB + greeting** instead of launching a viewer at a tunnel that isn't there. +- The **VNC-secret report retries until the server confirms it**. A lost one-shot report used to leave a + device with no server-side password until someone restarted the agent — the failure mode of fresh + installs on mobile / CG-NAT links. + +**Fewer dead ends** +- **Restart RACD** (Devices → Commands): restarts VNC → Helper → agent, in that order, and **verifies the + Helper is alive before the agent goes down** — it is the only thing that can revive a stopped agent. +- An **expired session** now says so and returns to sign-in, instead of surfacing a raw `401`. +- Dependency bumps (NuGet + Actions, Avalonia 12.1) and a warning-free Linux console build. + +--- + ## What's New in 1.9.0 A **client redesign and power-telemetry** release. This is the first release to **change the database schema diff --git a/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj b/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj index 9df7244..f6baf32 100644 --- a/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj +++ b/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj @@ -7,7 +7,7 @@ RemoteAgent.Updater RemoteAgent.Updater Exe - 1.9.0.0 + 2.0.0.0 ..\..\icon\app.ico diff --git a/src/RemoteAgent/RemoteAgent.csproj b/src/RemoteAgent/RemoteAgent.csproj index 6f535ad..1572489 100644 --- a/src/RemoteAgent/RemoteAgent.csproj +++ b/src/RemoteAgent/RemoteAgent.csproj @@ -7,7 +7,7 @@ enable RemoteAgent RemoteAgent - 1.9.3.0 + 2.0.0.0 ..\..\icon\app.ico diff --git a/src/RemoteClient.Linux/RemoteClient.Linux.csproj b/src/RemoteClient.Linux/RemoteClient.Linux.csproj index 9e53f1e..a900e5c 100644 --- a/src/RemoteClient.Linux/RemoteClient.Linux.csproj +++ b/src/RemoteClient.Linux/RemoteClient.Linux.csproj @@ -12,7 +12,7 @@ false RemoteClient.Linux RemoteClient.Linux - 1.9.1.0 + 2.0.0.0 diff --git a/src/RemoteClient.Lite/RemoteClient.Lite.csproj b/src/RemoteClient.Lite/RemoteClient.Lite.csproj index 24cd66d..83cb0d8 100644 --- a/src/RemoteClient.Lite/RemoteClient.Lite.csproj +++ b/src/RemoteClient.Lite/RemoteClient.Lite.csproj @@ -14,7 +14,7 @@ RemoteClient.Lite RemoteClient.Lite ..\..\icon\app.ico - 1.9.0.0 + 2.0.0.0 win-x64 true true diff --git a/src/RemoteClient/RemoteClient.csproj b/src/RemoteClient/RemoteClient.csproj index 8d7d909..7e1fad0 100644 --- a/src/RemoteClient/RemoteClient.csproj +++ b/src/RemoteClient/RemoteClient.csproj @@ -17,7 +17,7 @@ ..\..\icon\app.ico - 1.9.3.0 + 2.0.0.0 diff --git a/src/RemoteServer/RemoteServer.csproj b/src/RemoteServer/RemoteServer.csproj index 036a690..5398b31 100644 --- a/src/RemoteServer/RemoteServer.csproj +++ b/src/RemoteServer/RemoteServer.csproj @@ -26,7 +26,7 @@ net10.0 enable enable - 1.9.2.0 + 2.0.0.0