Docs / Reference
Update channels
Only the edge channel exists today. What the channel design is, what each rime channel command does, and why nothing is sent.
On this page 7 sections
Where things stand
Every Rime machine is on edge, and edge is the only channel that exists.
The image tags in use (rime, apex, daily, gaming-mesa, gaming-nvidia
and edge, under both ghcr.io/andrenijman/rime-os and the old
ghcr.io/andrenijman/apex-os) all point at one image. CI moves all of them on
every successful build of main, and a weekly scheduled build republishes
main as well. They are names for the same thing, not editions. A machine
reports whichever of these tags it follows as “edge under an older name”.
The beta, candidate and stable tags have never been published: the
workflow that creates them has never run. sudo rime channel set refuses to
move a machine to any of them, because a tag the registry does not serve would
leave the machine with nothing to update to.
The client side of the design is built and tested. The rest of this page describes it, so you know what the commands say and what they will do once the other channels are published.
The design
| Channel | What arrives |
|---|---|
edge |
every successful build of main, as soon as it is published |
beta |
a build that has been on edge and looks sound |
candidate |
a build being considered for stable |
stable |
only builds that have been through the other three |
A channel is only which tag bootc upgrade follows. The promotion workflow is
written to refuse a digest that is not already on the channel above, and one
that this repository’s build workflow on main has not signed.
The commands
rime channel status # which channel, and how the last update went
rime channel list # the four channels and which one you are on
sudo rime channel set beta --dry-run
sudo rime channel set beta # refused today: the tag does not exist
rime channel report # the health report, and whether anything is sent
rime channel rollout # whether a staged rollout is holding this machine
rime channel rollout --offline # decide on the last rollout document accepted, contact nothing
status, list, report and rollout need no root. status reads the
image’s origin file and /etc/machine-id and contacts nothing. rollout is the
one verb that contacts the registry, unless you add --offline. status,
report and rollout take --json.
set needs root, because it runs bootc switch. It checks that the target tag
resolves first and refuses if the registry says it does not exist. --force
switches anyway; --dry-run prints what it would run. If the registry cannot be
reached at all, set switches without the check and says so.
Moving toward stable
Moving toward stable usually deploys an older image, so set pins the current
image first (ostree admin pin 0) and does not switch if the pin fails. It also
prints what your saved state will do: the switch replaces /usr and leaves
/etc, /var and your home directory as they are. rime schema status says
which stores that affects. See Rollback.
Staged rollout
Every machine has a rollout slot from 0 to 99, derived from /etc/machine-id.
It stays the same across reboots and is never sent anywhere.
The rollout percentage lives in a signed document the publisher would put at
ghcr.io/andrenijman/rime-os:rollout, in the same registry as the image. Your
machine verifies its signature under a different signer from the image’s
(the promotion workflow), and only then reads it. It refuses a document that has
expired, was issued more than 30 days ago or more than an hour in the future,
has a lower serial than one it already accepted, names another repository, or
uses a newer schema than it reads. It caches the last accepted document at
/var/lib/rime/channel/rollout.json, so blocking the tag cannot undo a halt.
A held machine skips the image and still updates its packages, Flatpaks and
firmware, and rime update exits 0. sudo rime update --force takes the held
release anyway.
No rollout document has ever been published, so nothing is held today. No mechanism halts a release on its own either: a person would publish the halt.
The health stop
This part works today, on every machine. If a machine comes back from an update
with a problem the image could have caused (the GPU driver, Rime Shell, the
filesystem or the package extension), the next rime update refuses and points
at sudo rime rollback. Network trouble does not count. See
Updating.
What is sent
Nothing. Rime operates no telemetry service.
rime channel report prints the five fields a health report would contain
(channel, tag, digest, healthy, reasons) and says nothing was sent. It leaves out
the machine id, the rollout slot, the hostname, the hardware, your packages, you
and your network.
Reporting is off by default. The opt-in is ~/.config/rime/channel.toml:
report = true
endpoint = "https://example.invalid/rime-health"
Even with both set, this build sends nothing: it has no code that transmits a report, and Rime runs no endpoint to receive one. A file that cannot be read counts as off.
On a machine installed from the v2.1.0 ISO
This page describes current Rime images. A machine installed from the v2.1.0
ISO runs an older APEX-OS image, with the apex command, until its first
update. See Install Rime.