CFG_VER/APP_VER in the env file: invalid configs replaced, updates follow APP_VER (dev/stable/pin)
This commit is contained in:
@@ -158,6 +158,8 @@ override file values. A missing file is fine; a malformed one is fatal.
|
||||
| `UPDATE_INTERVAL` | `6h` | auto-update check interval |
|
||||
| `UPDATE_REPO` | `https://git.rambossek.at/PUBLIC/gpu-turnstile` | repository to check for releases |
|
||||
| `UPDATE_ASSET` | `gpu-turnstile.exe` | release asset to download |
|
||||
| `APP_VER` | `stable` | version to run: `dev` disables updates, `stable` tracks the latest release, or an exact `vX.Y.Z` pin (up- or downgraded to) |
|
||||
| `CFG_VER` | _(installer-managed)_ | config format reference written by `--install-service`; missing = the file is replaced with a fresh sample (backup `.bak`) |
|
||||
|
||||
Startup fails fast on unparsable values and when neither consumer URL is
|
||||
set. Enabled upstreams are probed once at start (`/api/version`,
|
||||
@@ -185,19 +187,18 @@ started again only if it was running before.
|
||||
By default install creates the canonical layout and copies the binary into
|
||||
it (Windows: `%ProgramFiles%\gpu-turnstile\`, plus
|
||||
`%ProgramData%\gpu-turnstile\` for logs; Linux: `/var/lib/gpu-turnstile/`
|
||||
with the config at `/etc/gpu-turnstile.env`). An existing config in the
|
||||
target location is never overwritten. If there is no config at all, install
|
||||
writes a sample env file covering every setting — each with a comment line,
|
||||
everything commented out — except `LOG_FILE`, which is active on Windows
|
||||
with the config at `/etc/gpu-turnstile.env`). If there is no config at all,
|
||||
install writes a sample env file covering every setting — each with a
|
||||
comment line, everything commented out — except the `CFG_VER`/`APP_VER`
|
||||
header and `LOG_FILE`, which is active on Windows
|
||||
(`%ProgramData%\gpu-turnstile\gpu-turnstile.log`) since a service has no
|
||||
console; on Linux it stays commented because stderr goes to the journal.
|
||||
The first line of an installer-written file is a version marker
|
||||
(`# gpu-turnstile version: vX.Y.Z`); when a later version's install finds
|
||||
an older marker, it appends every setting the file does not mention
|
||||
(commented or not) at the end and bumps the marker — hand-written configs
|
||||
without the marker are never touched. An existing config without `LOG_FILE`
|
||||
gets that line appended on Windows. `--no-copy` registers the current
|
||||
executable location as-is and leaves the config untouched.
|
||||
The first line is `CFG_VER=vX.Y.Z`, recording the installer version. When a
|
||||
later version's install finds an older `CFG_VER`, it appends every setting
|
||||
the file does not mention (commented or not) at the end and updates
|
||||
`CFG_VER`; a file without `CFG_VER` is invalid and gets replaced by a fresh
|
||||
sample, with the old content kept as `<file>.bak`. `--no-copy` registers
|
||||
the current executable location as-is and leaves the config untouched.
|
||||
|
||||
### Windows
|
||||
|
||||
@@ -255,14 +256,18 @@ executable location as-is and leaves the config untouched.
|
||||
`RestartSec=5s` brings up the staged binary after the updater exits with
|
||||
code 3.
|
||||
- **Auto-update**: on startup and every `UPDATE_INTERVAL`, the binary
|
||||
checks `UPDATE_REPO`'s latest release; if its tag is a newer `vX.Y.Z`,
|
||||
it downloads `UPDATE_ASSET` plus its `.sig` (and `.sha256` when present)
|
||||
and verifies an Ed25519 signature against the public key embedded in
|
||||
consults `APP_VER`: `dev` disables updates; `stable` (the default)
|
||||
fetches `UPDATE_REPO`'s latest release and applies it when its tag is a
|
||||
newer `vX.Y.Z` (a `dev` binary cannot be compared and is replaced by the
|
||||
latest release); a `vX.Y.Z` pin fetches that exact tag and stages it on
|
||||
any difference, including downgrades. Applying means downloading
|
||||
`UPDATE_ASSET` plus its `.sig` (and `.sha256` when present) and verifying
|
||||
an Ed25519 signature against the public key embedded in
|
||||
`internal/update/pubkey.go`. A verified binary is swapped in next to the
|
||||
running exe (rename-aside, allowed on Windows), and once the GPU lock is
|
||||
idle the process exits with code 3 so the service recovery restarts it
|
||||
on the new version. Interactive runs only log "restart to apply".
|
||||
`dev` builds and builds without an embedded public key never update.
|
||||
Builds without an embedded public key never update.
|
||||
- **`--force-update`** runs the same check immediately, single-shot: one
|
||||
attempt with a 30 s timeout, then exit — "up to date" (exit 0) or the
|
||||
error (exit 1), no retries. When a newer release is found it downloads,
|
||||
@@ -353,7 +358,8 @@ are new.
|
||||
receives the first chunk before the last is sent (no buffering).
|
||||
- `internal/config`: env-file parsing, precedence, fail-fast values.
|
||||
- `internal/update`: fake Gitea releases API; staged update happy path,
|
||||
tampered signature rejected, older versions and dev builds skipped.
|
||||
tampered signature rejected, older versions skipped, APP_VER=dev and
|
||||
pinned releases honored.
|
||||
|
||||
## Build and CI
|
||||
|
||||
|
||||
Reference in New Issue
Block a user