← DUK

DUK parašyti anglų ir nyderlandų kalbomis; rodomi anglų kalba.

DUK

Updates (planned)

FAQ › EUZOS Desktop › Updates · Nederlands

Status: planned. Automatic version updates are a design (docs/UPDATES.md, 27-10-2026), not built yet. Nothing on a PC or server asks for or installs a new OS release by itself today. The commands, files and endpoints on this page marked planned do not exist in the code yet. What already works is the manual trial/commit cycle (see Boot).

What is it?

The plan describes how a running EUZOS PC (Desktop) or server (Server) learns about a newer release, downloads it, and installs it without the risk of a machine that no longer boots. It reuses parts that already exist: the trial kernel (try/commit), signed files and anti-rollback (FETCH.TXT), the signed release manifest, the download server with download tokens, and the app catalogue.

How do I…?

How do I update EUZOS today?

By hand, with parts that exist now:

  • New kernel: put it on the boot volume as \EOS\KX64TRY.ELF, run try, check it, then commit (the Mac script tools/trial.sh automates this over SSH). See Boot.
  • A signed file: fetch <url> <path>.
  • Everything: reinstall with the Installer (this wipes the disk, including the profiles).
  • Chromium: apps install chromium by hand fetches a newer version from the catalogue (see Desktop and apps).

How will a PC learn about an update? (planned)

A desktop asks the profile server right after a successful login (it needs the PC token), then every 4 hours plus a random 0–30 minutes while someone is logged in; never more than once per 15 minutes. The channel follows the build type: a production build only takes production builds, a test build only test builds.

What will the user see? (planned)

  • A yellow label "Update available" next to the taskbar, on every desktop screen; tapping it opens the update card with the release notes, Restart now and Tonight.
  • Tonight: at 03:00 local time if the PC is on, idle for 15 minutes and on mains power or above 40% battery; if the PC is off, the next shutdown arms the update ("Update and shut down").
  • Security updates: "Required before <date>"; after the deadline a 15-minute countdown, then the restart. The deadline counts from when this device first saw the offer.
  • Afterwards one notification: "EUZOS was updated to 240", or after a rollback "The update could not be installed; EUZOS kept version 239".

The owner's decision: on the desktop, download and staging are automatic; an organisation can choose "ask" as policy.

(The screen texts above come from the design; they are not in the translation files yet.)

How will it install safely? (planned)

  1. Check the signed release descriptor and the manifest (signature, edition, build type, build higher than the running one, version not lower than in FETCH.TXT, not revoked).
  2. Stage: only changed files (delta by SHA-256) go to \EOS\UPD\; the new kernel straight to \EOS\KX64TRY.ELF.
  3. Restart into the trial (write TRY.TXT).
  4. Health check in the trial kernel (within 5 minutes): a network link with an address, and TLS to the environment's profile server returning the built-in server key.
  5. Pass: automatic commit, then the staged files into place (old ones kept in \EOS\PREV\), the new manifest, FETCH.TXT, config migrations.
  6. Fail: the trial kernel reboots by itself; the committed kernel comes back, sees the failed trial, and gives up on that release after 2 attempts.
  7. Report the result to the profile server.

Only the kernel is trial-booted. A release that changes the boot loader is never installed automatically in phase 1. Development kernels (build ID not starting with release-) and stick-booted systems only show the offer.

Can I go back after an update? (planned)

update rollback will swap KX64OLD.ELF back (a local swap, no download).

What about EUZOS Server? (planned)

A server never reboots on its own. Download and staging happen automatically; Server Admin gets the actions update-status, update-now and update-window <day hh:mm-hh:mm>|off. An overdue server shows red in Server Admin and on the admin page. See Server Admin.

What happens offline? (planned)

No offer and no download without the profile server. A staged release is not trial-booted while the profile server is unreachable. Over a metered (mobile) connection the PC checks but does not download ("Waiting for Wi-Fi or cable"). Offline login is not affected.

Details

Parts that already exist

PartWhere
Trial kernel and commitboot/src/main.rs (try_once), kernel::boot_volume (prepare_try, commit), tools/trial.sh
Self-recovery of a trial kernelpanic handler, fatal exception, kernel::watchdog (HANG.TXT)
Signed files, anti-rollbacktools/sign, kernel::fetch, \EOS\FW\SIGNPUB.TXT, \EOS\FW\FETCH.TXT
Release manifestlibs/manifest, tools/release.sh, tools/stickrelease.sh
Build numbersOS_BUILD (Desktop), SERVER_BUILD (Server), the edition mark EUZOS-EDITION: in the kernel file
Download server and tokensserver/download, POST /api/apps/token, POST /api/workplace/v1/download-token
App catalogueserver/profile/src/apps.rs, kernel/src/app_store.rs

Build plan (from docs/UPDATES.md)

PhaseWhat
U1release format (DESKTOP.REL/SERVER.REL, .RVK), libs/release, release.sh per edition
U2profile server: schema 19, offer/token/report, rings, CLI
U3kernel engine kernel/src/update.rs, console update
U4desktop UX (label, card, tonight, deadline)
U5server (update-* actions, signed window)
U6admin page "Releases"
U7apps: minimum version, automatic app updates
U8later: key roll, A/B boot loader, release cache, Secure Boot track

Reference

Console commands

CommandArgumentsWhat it doesStatus
try, commit–trial kernel once, then make it permanentexists (Boot)
fetch<url> <path>signed file to the boot volumeexists
apps install chromium–fetch Chromium (newer version) from the catalogueexists (Desktop and apps)
update–statusplanned
update check–ask for an offer nowplanned
update now–install now (restart into the trial)planned
update tonight–install tonightplanned
update rollback–swap KX64OLD.ELF backplanned

The planned update command is English only (no Dutch alias).

Functions and modules

ModuleRoleStatus
kernel::boot_volume::prepare_try, committrial and commitexists
kernel::fetch::fetch_manifest, fetch_entryfetch and check a manifest and its filesexists
kernel/src/update.rsupdate engineplanned
libs/releasedescriptor and revocation list parsingplanned

Config files (planned)

FileKeyValuesMeaning
\EOS\FW\UPDATE.TXTdevice32 hexrandom device id, made once
stateidle, downloading, staged, trial, failedupdate state
release<edition> <build> <signature version>release being installed
staged-atUnix time
attemptsnumbertrial attempts
applynow, tonight, next-start, windowwhen to install
deadlineUnix time or -security deadline
last-resulte.g. installed 240 <unix>
config-schemanumberconfig migration level
window (server)e.g. sun 02:00-04:00maintenance window; the file is then signed with the server's own key
\EOS\UPD\, \EOS\PREV\––staged files, previous files

API endpoints (planned)

Line format (key=value) like the existing EUZOS API.

Method and pathRequestAnswer
GET /api/update/v1/offertoken, edition, build, version, arch, device, langnone, or available + edition=, build=, version=, descriptor=, size=, security=, deadline=, minimum=, note= lines, revoked=
POST /api/update/v1/tokentoken; body edition=, version=an ezdl1 download token (token=, expires=, duration=)
POST /api/update/v1/reporttoken; body device=, edition=, from=, to=, result=installed|rolled-back|failed|deferred, reason=, detail=ok
GET /api/workplace/v1/update-offerworkplace tokenas offer, edition server
POST /api/workplace/v1/update-reportworkplace tokenas report

Protocol messages and formats (planned)

Release descriptor DESKTOP.REL / SERVER.REL (signed with tools/sign under exactly that name):

EUZOS-RELEASE 1
edition=desktop
build=240
build-type=production
arch=x86_64
arch=aarch64
manifest-sha256=<64 hex>
manifest-version=<signature version of MANIFEST.TXT>
minimum-from=232
config-schema=3
bootloader=unchanged
security=0

Download layout (content-addressed): download.euzos.eu/<edition>/<signature version>/ with DESKTOP.REL(.sig), MANIFEST.TXT(.sig) and one file per SHA-256. A revocation list DESKTOP.RVK / SERVER.RVK is signed by the owner.

See also