-
26.13-alpha
Pre-releaseAll checks were successfulBuild ISO / build-iso (push) Successful in 17m28sCI / lint (push) Successful in 27sCI / test (push) Successful in 59sCI / validate-json (push) Successful in 23sCI / markdown-links (push) Successful in 15sRelease / release (push) Successful in 11m38sreleased this
2026-04-21 17:03:28 +02:00 | 7 commits to main since this releaseFixed
- Upgrade path from pre-auth releases actually works. 26.11-alpha
introducedfrom werkzeug.security import ...infurtka/auth.py,
but werkzeug isn't installed on the target system — core runs as
system Python with stdlib only, andflask>=3.0inpyproject.toml
is never pip-installed on the box. Fresh boxes from the 26.11/26.12
ISO without a manually-installed werkzeug crashed on import; boxes
upgrading from pre-26.11 got double-broken by that plus the health
check below. Replaced the werkzeug dependency with a stdlib-only
furtka/passwd.pythat useshashlib.pbkdf2_hmacfor new hashes
and parses werkzeug'sscrypt:N:r:p$salt$hexformat for backward
compatibility — existingusers.jsonfiles created on the rare
boxes that did have werkzeug keep working after this upgrade, no
re-setup needed.from werkzeug.security import ...is gone from
the import chain entirely;pyproject.toml's flask dep stays only
for the live-ISO webinstaller. - Self-update no longer auto-rolls-back when crossing the auth
boundary.updater._health_checkpinged/api/appsand demanded
a 200, which meant every 26.10 → 26.11+ upgrade hit the post-restart
check, got a 401 (auth guard), and treated that as "server dead"
→ rollback. Now any 2xx–4xx response counts as "server alive"; only
connection-level failures or 5xx fail the check. 5xx still fails
rollback because that means the new process is up but broken. - Install lock closes its race window.
POST /api/apps/install
used to release the fcntl lock immediately after the sync
pre-validation so the systemd-run child could re-acquire it —
leaving a tiny gap where a second POST could slip in, pass the lock
check, and return 202. Both child processes would start, one would
win the in-child lock, the other would die silently. Now the API
also readsinstall-state.jsonand refuses with 409 if the stage
is non-terminal (pulling_image,creating_volumes,
starting_container). The fcntl lock stays as belt-and-suspenders.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Upgrade path from pre-auth releases actually works. 26.11-alpha