Watch
1
0
Fork
You've already forked souveraine
0
Commit graph souveraine/packaging
Author SHA1 Message Date
Fimeg
4a4f0a5a27 package the sessiond pam file
/etc/pam.d/souveraine-sessiond arrived by hand on 2026-07-16 and is owned
by no package on either device — root-owned config can only arrive by
package. Same rail as souveraine-stepup, plus a bsdtar assertion so a
future drop fails the build instead of shipping quietly. TASK-76.
2026-08-15 09:53:26 -04:00
Fimeg
5cc7a90f44 packaging: the FPC pam module is pam_souveraine_fpc.so
blueline-fingerprintd installs /usr/lib/security/pam_souveraine_fpc.so
(PKGBUILD:48). cc541d1 named pam_fpc_polkit.so, which exists nowhere.

The leading '-' means a missing module is skipped without complaint, so
a wrong name here fails silently and permanently: the finger does
nothing and no log says why.

The module returns PAM_IGNORE outside PAM_SERVICE=polkit-1
(fpc-polkit-pam.c:86), so step-up falls through to the password stack
until that allowlist widens.
2026-08-12 10:50:12 -04:00
Fimeg
cc541d1eaa packaging: ship the step-up PAM stack and polkit fallback
SESSION-AUTHORITY-DOCTRINE §3 names /etc/pam.d/souveraine-stepup by path.
Root-owned config can only arrive by package: rootfs-overlay/ reaches a
device on flash and the phone does not flash.

auth_self, never auth_admin — step-up re-proves the user to themselves, it
does not escalate. The leading '-' on pam_fpc_polkit.so loads the fingerprint
factor only where it is installed, so one file serves phone and laptop.

Inert until a consumer calls it; no src/ path does yet.
2026-08-12 10:39:47 -04:00
Fimeg
c802f7db48 packaging: sessiond ships on both arches, enabled on neither
CI already built the x86_64 daemon and then threw it away — the binary and
its user unit were copied into the package only under aarch64, so the
laptop could never receive the thing every lock, blank and button report
assumes is running.

Both now ship, and the package still neither enables nor starts the unit.
Phone-only reporters and surfaces stay aarch64.
2026-08-09 19:31:33 -04:00
Fimeg
8cd2adb828 usb: build the full KVM composite surface 2026-08-07 14:48:07 -04:00
Fimeg
269c151899 the wry host is optional through the whole pipeline; it must not block sessiond 2026-08-05 21:29:24 -04:00
Fimeg
9ec031c8a8 wry host: sites as apps, the rig as a face; join loads the expression skill 2026-08-05 19:39:50 -04:00
Fimeg
a89556aef7 packaging: ship souveraine-button, the reporter that replaces the policy script
Reports down/up edges to sessiond and decides nothing. Wire it in
hyprland.lua as a bind/bindr pair — reporting only the press leaves the
machine believing the button is held forever.
2026-07-31 21:48:08 -04:00
Fimeg
3d9340057f sessiond: an expected source that never reports is Absent, not silent
sensord hung off graphical-session.target, which nothing on this device
starts, so it was enabled and dead from every boot. Down starts from a
last-seen stamp and structurally cannot see that. Bind the reporter to
sessiond and make the machine say so.
2026-07-27 15:34:09 -04:00
Fimeg
25d1e19246 upower: var/ is a legitimate prefix, not a leak
Run 1234 failed because the new stray check omitted var/lib/upower.
2026-07-27 13:46:48 -04:00
Fimeg
7eb2135906 upower: relocate the cross-install udev leak, and assert it stays gone
udev rules and hwdb installed under the sysroot prefix, so none of the
fork's quirks were ever active on the phone.
2026-07-27 10:11:14 -04:00
Fimeg
83fab1a1b6 sensord: one reporter for every sensor, replacing the per-sensor scripts
blueline-proximity-lock is 113 lines of shell implementing a subtle contract
(heartbeat inside SOURCE_DOWN_AFTER, seed from the probe banner, report both
edges) that would have been hand-copied for light and again for accel. One
binary, one contract, shipped in the package instead of the rootfs overlay.
2026-07-26 18:46:27 -04:00
Fimeg
c9e11a54f7 upower: bump to aeeb107 (charge thresholds via the supplier walk) 2026-07-26 17:06:00 -04:00
Fimeg
3174e7813c ship souveraine-verify-trail in the package that writes the trail 2026-07-26 14:58:48 -04:00
Fimeg
6eb87a542d publish-edge: ship the bare .files names too
pacman -Fy asks for souveraine-<arch>.files, not .files.tar.zst, so it 404'd.
2026-07-25 18:45:02 -04:00
Fimeg
044c373cad ci: publish into edge additively
edge is a shared archive but ci.yml deleted and recreated it each push, erasing
other producers. publish-edge.sh merges into the live db under a flock and
removes only its own superseded builds. Verifies the merge kept every foreign
entry, and reads the db back before trusting it.
2026-07-25 17:50:30 -04:00
Fimeg
91c0cf800b upower: fix percentage-trusted on real batteries
The heuristic tested charge_full, which qcom-battery lacks and which upower
never uses for the percentage anyway - it reads capacity directly. And like
charge-type it was only set in UpDeviceSupply, so a battery got the FALSE
default. Verified: charge-type now reads fast against the charger's Fast.
2026-07-25 07:49:20 -04:00
Fimeg
bcf4bf2f09 upower: set charge-type on UpDeviceSupplyBattery
Real batteries are backed by UpDeviceSupplyBattery, which never ran the
refresh that set charge-type, so it stayed at the UNKNOWN default.
2026-07-25 07:30:16 -04:00
Fimeg
16aa469505 upower: read charge_type from the supplying charger
SDM845 splits fuel gauge and charger; qcom-battery has no charge_type at
all, so the battery-only read returned UNKNOWN regardless of the N/A
spelling fix. Follows the kernel's device links to the charger instead.
2026-07-25 06:51:34 -04:00
Fimeg
62a3f0b0a8 don't claim gnome-keyring's dbus file; version upower from upstream
Two install blockers found on the phone:
- the package shipped org.freedesktop.secrets.service, which gnome-keyring
  owns. souveraine-secrets holds the bus name at runtime already.
- upower reused souveraine's 0.1.rN version, which sorts below the
  hand-built 1.91.3+sha, so -Syu saw a downgrade and skipped it. Now
  built from upstream version + fork sha (verified vercmp = 1).
2026-07-24 21:56:43 -04:00
Fimeg
07d45c10bc package secrets and machined too
All four repo binaries were hand-copied to the phone and owned by no
package. secrets/machined ship on both arches; sessiond stays aarch64.
secrets unit repointed /usr/local/bin -> /usr/bin.
2026-07-24 21:36:31 -04:00
Fimeg
261d74672f package sessiond (aarch64 only)
It was hand-copied to /usr/local/bin, owned by no package, so it never
updated. Not built for x86_64 — the laptop hits lock-screen errors with
it. Verified both packages assemble correctly.
2026-07-24 21:31:14 -04:00
Fimeg
336dadf006 upower: bump to 628283f (kernel spells CHARGE_TYPE_NONE as N/A)
The submodule was pinned one commit behind the fix, so every CI-built
upower-souveraine fell through to the warning path and reported
charge-type unknown while discharging.
2026-07-24 19:51:33 -04:00
Fimeg
d824ca7f81 secrets: at-rest encryption, passphrase wrap, phone packaging
Seal items AES-256-GCM under a random store key (item id as AAD).
Machine wrap: HKDF over a deterministic machined signature (domain
secrets-store-key, socket /run/souveraine/machined.sock; legacy
seed-id fallback, same framing) — private key never enters the daemon.
Argon2id passphrase wrap slot (64MiB/3, HKDF-mixed with the machine
signature) managed via org.souveraine.Secrets.Manage: SetPassphrase /
VerifyPassphrase / HasPassphrase; rotation re-wraps only.

Client-found spec fixes: DH prime was the 2048-bit group-14 constant,
not the 1024-bit Second Oakley group libsecret uses (pinned by test);
item ids now simple UUIDs (hyphens illegal in object paths); collection
also served at /aliases/default; interfaces registered before name
claim. Added spec signals, real timestamps, content types, atomic 0600
store writes.

packaging: systemd user unit, D-Bus activation shadow, idempotent
phone deploy script (masks gnome-keyring, verifies round-trip).
2026-07-20 21:16:32 -04:00
Fimeg
5cb1be06cd lock primitives: power-from-lock, login1 polkit rule, gesture rail progress
seat0-active polkit rule so power off/reboot/suspend stop returning
challenge into a session with no polkit agent on the lock surface.
Lock-surface buttons stay gated behind allowPowerFromLock (opt-in) and
requirePasswordToPower. SystemGestureRail progressive gesture + mission
control nav flag.
2026-07-19 22:13:08 -04:00
Fimeg
63a39ab5d0 upower fork: submodule, prebuilt packaging, CI build, lock-surface charge state
- packaging/upower-souveraine submodule pinned at fork head (f18b1a4,
  souveraine/charge-type): ChargeType + PercentageTrusted on Device
- PKGBUILD.upower.prebuilt: prebuilt meson install tree, provides/
  conflicts upower, replaces stock (IgnorePkg=upower on the phone)
- ci.yml: build the fork per-arch against the aarch64 sysroot, assert
  binary arch, fold into the souveraine-{arch} pacman db
- LockSurfaceHost: charge line driven by device state, not onBattery —
  no more eternal 'Charging N%' on a topped-off pack
- docs/tasks/power-indication.md force-added past the docs/ gitignore
2026-07-17 16:33:37 -04:00
Fimeg
5039163a52 machined: system-tier machine identity daemon
The machine seed moves out of the user session: souveraine-machined owns
/var/lib/souveraine/seed-id as the souveraine system user and serves
pubkey/sign over /run/souveraine/machined.sock (SO_PEERCRED logged,
domain-separated signatures, group-gated socket). Seed is a precondition
- provision via 'souveraine machine init --fresh|--migrate-from', the
daemon never generates. reach/consult now resolves the machine key
through the daemon with a loud legacy fallback. Hardened system unit +
sysusers shipped in the Arch package.
2026-07-16 10:08:33 -04:00
Fimeg
048f180105 docs: bootstrap private pacman archive securely 2026-07-12 22:46:37 -04:00
Fimeg
c8c72ecbf2 ci: split signed pacman databases by architecture 2026-07-12 22:19:44 -04:00
Fimeg
16ba8cfbf4 docs: bootstrap pacman from local Gitea 2026-07-12 21:58:02 -04:00
Fimeg
3a83666ef5 ci: sign multi-architecture package repository 2026-07-12 21:11:34 -04:00
Fimeg
e0c8128832 ci: publish aarch64 pacman package artifacts 2026-07-12 20:57:00 -04:00
Fimeg
2c14da0dbe federation: document node enrolment trust boundary 2026-07-12 15:34:41 -04:00
Fimeg
ad56206294 track cross-build cargo config + souveraine user unit
.cargo/config.toml + aarch64-pkg-config wrapper are load-bearing for the
cross build (CI artifact job + local build-cross.sh both depend on them);
were gitignored before. souveraine.service is the systemd user unit the
packaging/deploy scripts template.
2026-07-12 14:57:19 -04:00
Fimeg
2c218fb075 packaging: adopt the phone deploy script and Arch PKGBUILD
Both were stranded untracked in the Pixel3Arch tree; they source from
this repo, so they live here. deploy-phone.sh ships the cross-built
binary + user unit (seed-id excluded, machine binding stays doctrine);
PKGBUILD builds from a synced local checkout, no network fetch.
2026-07-12 09:01:13 -04:00