forked from unom/punktfunk
The U2 leg of planning:host-update-from-web-console.md. A new dep-free root helper (crates/pf-update) runs the distro package manager against the INSTALLED punktfunk packages — apt (index refresh scoped to our list when present), dnf, rpm-ostree (single-transaction re-resolve, reported staged), sysext (the proven signed-feed updater), pacman only behind the explicit PACMAN_FULL_SYSUPGRADE opt-in — then the run-the-binary gate, then a root-written result record. Zero attacker-influenceable parameters end to end: fixed ExecStart oneshot (punktfunk-update.service), polkit rule scoped to that one unit's start verb for the shipped-EMPTY punktfunk-update group (joining it is the auditable opt-in; every postinst creates it, none populate it). The host starts the unit, interprets the record (staged / nothing-newer-yet / changed), and crosses its own restart on the same intent/reconcile machinery as the Windows leg. Status now reports staged results and the opt-in hint. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
902 B
TOML
21 lines
902 B
TOML
[package]
|
|
name = "pf-update"
|
|
description = "Root helper for web-console-triggered host updates: runs the distro package manager against the punktfunk packages, gates on the new binary actually running, and reports a result record. Deliberately tiny — root runs these few hundred lines, never the host's dependency tree."
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
repository.workspace = true
|
|
|
|
[[bin]]
|
|
name = "pf-update"
|
|
path = "src/main.rs"
|
|
|
|
# The zero-parameter invariant lives in the DEPENDENCY LIST too: no HTTP client, no TLS, no
|
|
# argument parsing beyond one subcommand — the helper fetches nothing and parses no remote
|
|
# data; the package manager's own signature chain gates every payload.
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|