1.7 KiB
Automatic Citizen Launcher updates
Native mutable packages install citizen-launcher-self-update.timer. It checks after boot and roughly every six hours.
The release source is read from /etc/citizen-launcher/release-repo. Supported formats are:
github:owner/repository(legacyowner/repositoryis also accepted)gitea:https://gitea.example/api/v1/repos/owner/repository
For privileged system updates, Gitea sources intentionally require HTTPS and the root-owned config file must not be group/world writable. Gitea workflow builds inject their own ${{ gitea.api_url }} and repository automatically.
Every privileged update follows the same fail-closed chain:
- read and validate the trusted release source;
- resolve the newest stable release;
- select only the package format matching the installed package database;
- require SHA-256 metadata (GitHub API digest or the Gitea release
SHA256SUMS.txt); - download to
/var/cache/citizen-launcher; - verify SHA-256;
- inspect package name, upstream version and x86-64 architecture;
- install through the native package database;
- verify that the installed version actually advanced.
Native modes:
- Debian/Ubuntu/Mint:
.deb→ APT - Fedora/openSUSE/RHEL family:
.rpm→ RPM database - Arch family:
.pkg.tar.zst→ pacman - generic
~/.local: verified tarball → atomic user-binary replacement
Immutable OSTree/transactional/SteamOS-style base systems are never modified by the automatic system updater. Their host image owns /usr; user-mode Citizen Launcher remains self-updateable.
An update never forcibly kills the running GUI. The old process detects that the on-disk/package version is newer and offers a controlled restart.