This commit is contained in:
2026-08-31 20:38:41 +02:00
parent 129fbe485b
commit eefada36e9
26 changed files with 710 additions and 26 deletions
+40
View File
@@ -0,0 +1,40 @@
# Automatic launcher updates
## Debian / Ubuntu / Mint
The `.deb` installs a root systemd timer:
- `citizen-launcher-self-update.timer`
- checks on boot and every six hours
- reads the latest GitHub Release from the configured repository
- accepts only a newer `citizen-launcher_<version>_amd64.deb`
- requires GitHub's `sha256:` release asset digest
- verifies the downloaded package name, version, and architecture with `dpkg-deb`
- installs via `apt-get` with the dpkg lock timeout enabled
The release repository is stored in:
```text
/etc/citizen-launcher/release-repo
```
Default for this project:
```text
sendnwv/omarchy-sc
```
A package update does not forcibly terminate a running GUI. The existing GUI detects
that `/usr/bin/citizen-launcher` is newer and offers **Launcher neu starten**.
## Generic user install
The Autopilot user timer checks GitHub releases. For a `~/.local` installation it
can replace the launcher binary atomically from the verified Linux tarball without
root privileges.
## Release publishing
`.github/workflows/release.yml` builds and publishes the `.deb`, generic tarball and
SHA256SUMS whenever a `v<VERSION>` tag is pushed. GitHub computes an immutable asset
digest that the Debian self-updater verifies before installation.
+10 -3
View File
@@ -1,10 +1,17 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
VERSION="0.9.1"; ARCH="amd64"; WORK="$(mktemp -d)"; trap 'rm -rf "$WORK"' EXIT
VERSION="$(tr -d '[:space:]' < "$ROOT/VERSION")"; ARCH="amd64"; WORK="$(mktemp -d)"; trap 'rm -rf "$WORK"' EXIT
PKG="$WORK/citizen-launcher_${VERSION}_${ARCH}"
mkdir -p "$PKG/DEBIAN" "$PKG/usr/bin" "$PKG/usr/share/applications"
mkdir -p "$PKG/DEBIAN" "$PKG/usr/bin" "$PKG/usr/share/applications" "$PKG/usr/lib/systemd/system" "$PKG/etc/citizen-launcher"
install -m755 "$ROOT/backend/bin/citizen-launcher" "$PKG/usr/bin/citizen-launcher"
install -m644 "$ROOT/packaging/systemd/citizen-launcher-self-update.service" "$PKG/usr/lib/systemd/system/citizen-launcher-self-update.service"
install -m644 "$ROOT/packaging/systemd/citizen-launcher-self-update.timer" "$PKG/usr/lib/systemd/system/citizen-launcher-self-update.timer"
printf '%s\n' "${CITIZEN_LAUNCHER_RELEASE_REPO:-sendnwv/omarchy-sc}" > "$PKG/etc/citizen-launcher/release-repo"
install -m755 "$ROOT/packaging/postinst" "$PKG/DEBIAN/postinst"
install -m755 "$ROOT/packaging/prerm" "$PKG/DEBIAN/prerm"
install -m755 "$ROOT/packaging/postrm" "$PKG/DEBIAN/postrm"
cat > "$PKG/DEBIAN/control" <<EOF
Package: citizen-launcher
Version: $VERSION
@@ -12,7 +19,7 @@ Section: games
Priority: optional
Architecture: $ARCH
Maintainer: Citizen Launcher Project
Depends: ca-certificates, tar, xdg-utils, curl, cabextract, unzip, xz-utils
Depends: ca-certificates, tar, xdg-utils, curl, cabextract, unzip, xz-utils, apt
Recommends: pciutils, vulkan-tools
Description: Star Citizen setup, launcher and self-maintaining gaming stack for Linux
Distro-neutral Citizen Launcher with Wine/DXVK/RSI management and local GUI.
+2 -1
View File
@@ -2,4 +2,5 @@
set -euo pipefail
ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
mkdir -p "$ROOT/dist"
tar -C "$ROOT/backend/bin" -czf "$ROOT/dist/citizen-launcher-0.9.1-linux-amd64.tar.gz" citizen-launcher
VERSION="$(tr -d '[:space:]' < "$ROOT/VERSION")"
tar -C "$ROOT/backend/bin" -czf "$ROOT/dist/citizen-launcher-${VERSION}-linux-amd64.tar.gz" citizen-launcher
+1 -1
View File
@@ -1,5 +1,5 @@
Name: citizen-launcher
Version: 0.9.1
Version: 0.9.2
Release: 1%{?dist}
Summary: Star Citizen launcher and self-maintaining Wine stack for Linux
License: MIT
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
set -e
if command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload >/dev/null 2>&1 || true
systemctl enable --now citizen-launcher-self-update.timer >/dev/null 2>&1 || true
fi
exit 0
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
set -e
if command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload >/dev/null 2>&1 || true
fi
exit 0
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
if [ "$1" = remove ] || [ "$1" = deconfigure ]; then
if command -v systemctl >/dev/null 2>&1; then
systemctl disable --now citizen-launcher-self-update.timer >/dev/null 2>&1 || true
fi
fi
exit 0
@@ -0,0 +1,16 @@
[Unit]
Description=Citizen Launcher automatic package update
Documentation=https://github.com/sendnwv/omarchy-sc
After=network-online.target
Wants=network-online.target
ConditionPathExists=/usr/bin/citizen-launcher
[Service]
Type=oneshot
ExecStart=/usr/bin/citizen-launcher self-update apply --system --quiet
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
PrivateTmp=true
ProtectHome=true
UMask=0022
@@ -0,0 +1,12 @@
[Unit]
Description=Check Citizen Launcher package updates automatically
[Timer]
OnBootSec=5min
OnUnitActiveSec=6h
RandomizedDelaySec=20min
Persistent=true
Unit=citizen-launcher-self-update.service
[Install]
WantedBy=timers.target