Docs / Use
Updating
What sudo rime update does, in order, every flag it takes, and what can stop it.
On this page 9 sections
The short version
sudo rime update # download and stage the newest image, then packages, Flatpaks, firmware
sudo systemctl reboot # start the new image
sudo rime rollback # if something broke: go back to the previous image at the next boot
Rime is one signed system image. An update downloads the new image beside the one you are running and stages it; you use it after a restart. Nothing updates on its own: the image masks the automatic update timer it inherits from Fedora, so every update is one you started.
The OS, the kernel, the graphics drivers, Rime Shell, the login screen and the boot splash all ship in that image, so they update together and roll back together. Rime Shell has no updater of its own.
On a machine installed from the v2.1.0 ISO that has not taken its first update
yet, the command is apex, and that first update needs extra steps. See
Install Rime. apex keeps working on Rime as another name for
rime, and prints a one-line note when you use it.
Before you update
sudo rime update --check # is there an update? downloads nothing
rime trust --gate # would the signature check accept it? no root, stages nothing
--check asks bootc whether a newer image exists and asks fwupd about firmware.
It does not run the signature check. rime trust --gate does: it resolves the
tag your machine follows, fetches the signature for whatever that tag points at
now, and prints the decision rime update would reach. It exits 1 if the update
would be refused.
What sudo rime update does, in order
- Checks the last update. If the machine came back from its previous update with a regression, it stops here. See The regression stop below.
- Checks the signature of the image it is about to deploy: the one the registry serves now, not the one you booted. See The signature check below.
- Checks the staged rollout. A signed rollout document can hold a machine back for a while. None has been published, so today this never holds anything. See Update channels.
- Records what is running, so the next update can tell whether this one caused a problem.
- Tries to move the boot path. Installs from the published ISO boot GRUB.
If the machine passes a safety precheck, the update converts it in place to
systemd-boot, keeps GRUB as a fallback, and changes nothing else in the image
on that run. The precheck refuses with Secure Boot on, on a disk whose boot
partition belongs to Windows, when space is short, when an update is already
staged, or after a previous attempt failed. A refusal is not an error: the
machine stays on GRUB.
rime boot statussays which path this machine is on. - Stages the new image with
bootc upgrade. A machine still following anapex-ostag moves to therime-osname instead (see below). - Updates the rest: the packages you added with
rime install, then Flatpak applications, then firmware through fwupd. A Flathub outage never fails an OS update.
If rpm-ostree layered packages block the image step, the update says so and
points at sudo rime pkg adopt. See Installing software.
Flags
| Flag | What it does |
|---|---|
--check |
Report what is available. Downloads and stages nothing. |
--skip-firmware |
Skip the fwupd pass. |
--firmware-only |
Run only the firmware pass and leave the OS image alone. Cannot be combined with --skip-firmware. |
--skip-packages |
Skip refreshing the packages you installed with rime install. |
--skip-flatpak |
Skip updating Flatpak applications. |
--force |
Update even though the last update left this machine with a regression. It also takes a release a staged rollout is holding back. It does not skip the signature check. |
--allow-unverified |
Deploy once even though the image’s signature does not verify. It prints the full refusal first. |
--fsync |
Keep ostree’s per-object fsync on during the download. About half the speed (8 MiB/s against 14.6 MiB/s, measured), in exchange for durability if power fails mid-update. |
After the update
Restart to use the new image:
sudo systemctl reboot
Until you restart, the running system is unchanged. /etc, /var and your
home directory carry over into the new image as they are.
To see what you are running:
rime changelog
It prints bootc status, then the image reference your machine follows and that
image’s labels, such as the source revision and the Rime Shell revision it was
built from. The labels are read from the registry, so they describe what the tag
points to now; after a newer build that is not the image you booted. It prints
no written changelog; the release notes are on /updates. If
bootc status cannot run, for example without root, it prints
rpm-ostree status instead.
The signature check
rime update refuses to deploy an image whose signature does not verify. What
it checks, and what it leaves out, is on Verify what you run.
The defaults are:
signature=enforce
provenance=warn
provenance is the signed SBOM attestation. To change either on your machine,
write only the keys you want to /etc/rime/trust.conf; it wins per key over the
image’s defaults. Each key takes enforce, warn or off:
enforce |
warn |
off |
|
|---|---|---|---|
| verified | deploy | deploy | deploy |
| fails to verify | refuse | refuse | warn, deploy |
| none published | refuse | warn, deploy | warn, deploy |
| could not be checked | refuse | warn, deploy | warn, deploy |
Things worth knowing:
- Offline, under
enforce, the update is refused. Nothing can be verified without the registry. - “Does not verify” and “could not be checked” are different messages. The first says the image is not what it claims to be. The second says your machine could not find out, for example because the registry was unreachable.
--allow-unverifiedand--forceare separate. Getting past the regression stop never turns off the signature check.- Running
bootc upgradeyourself skips the check. Onlyrime updateapplies it. The containers policy that bootc reads accepts any image.
The regression stop
If the machine came back from its last update with a problem the image could
have caused, the next rime update refuses:
rime: this machine came back from its last update with a problem, so the next
one is being held.
gpu-driver: no driver is bound to the discrete GPU
systemd unit failed: rime-shell.service
Go back with `sudo rime rollback`, then reboot.
Take it anyway with `sudo rime update --force`.
Four things count: the GPU driver, Rime Shell, the filesystem and the package extension. Network problems do not count, because an update did not cause them and refusing the next one would strand you on the release that broke you. The check runs on your machine only, and nothing is reported anywhere.
Moving from apex-os to rime-os
Every build is published under both ghcr.io/andrenijman/rime-os and the old
name, ghcr.io/andrenijman/apex-os, with the same digest, the same tags and a
signature under each name. A machine that follows a tag of the old name checks
whether the new name serves the same tag. If it does, the update verifies it and
runs bootc switch to it. If the switch fails, the update checks the old name
and upgrades under it instead.
The tag name stays the same: a machine on apex-os:apex moves to
rime-os:apex. Every tag in use today points at the same image. A machine
pinned to a digest, or following a fork’s image, never moves.
How much it downloads
The image is built in four layers (kernel, core, base, image), so an ordinary release moves only the thin top layers. A release that rebuilds the kernel or core layer is a larger download for every machine.