Skip to content

Provide a verified signed APT repository - #45

Open
dskvr wants to merge 6 commits into
masterfrom
feature/35-signed-apt
Open

Provide a verified signed APT repository#45
dskvr wants to merge 6 commits into
masterfrom
feature/35-signed-apt

Conversation

@dskvr

@dskvr dskvr commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Ubuntu 24.04 and Debian 13 users currently need several direct-download and verification commands before installing a native package. This adds the complete development surface for a project-owned signed APT channel: authenticated repository generation, guarded publication, repeat-safe client bootstrap, lifecycle proof, protected automation, and gated website integration.

packaging/repositories/apt-channel.json remains pending. Existing homepage installation works unchanged until a maintainer provisions the production origin/signing identity, completes the first public run, and commits its reviewed verification record. That record switches only the Ubuntu and Debian panels to sudo apt install loopwire and links the one-time setup separately.

resolves #35

Architecture and behavior

  • Builds separate ubuntu-24.04 and debian-13 main/binary-amd64 suites from the exact OpenSSL-authenticated GitHub Release debs. OpenPGP-signed InRelease metadata binds by-hash indexes and package hashes.
  • Publishes to a project-owned POSIX HTTPS origin over authenticated SSH. Revision CAS, exclusive locking, immutable collisions, private retained snapshots, durable recovery, metadata refresh, and explicit rollback fail closed. Each suite commits through atomic InRelease replacement.
  • Adds a repository-scoped Signed-By bootstrap/removal helper; it pins the full fingerprint and preserves unrelated APT configuration.
  • Adds a protected packages-production workflow for stable release publication, manual publish/refresh/rollback, and weekly metadata refresh. Public activation records require exact HTTPS byte verification.
  • Updates homepage, user/install/support/release docs, and maintainer operations. The automatic installer and signed direct downloads remain available.

No audio/backend behavior or application dependencies changed. The development toolchain uses Python/Bash/Node standard libraries plus distro APT, GnuPG, OpenSSL, OpenSSH, and dpkg tools. A checksum-pinned Debian 13 container provides reproducible tooling off Debian-family hosts.

Validation

  • Final pnpm check passed: all verification gates, typechecks, 295 workspace tests, 22 Rust tests, package builds, production web/docs builds, and static-site verification.
  • Final pnpm verify:apt passed: 13 generator, 22 publisher, 11 bootstrap, 9 public HTTPS, 5 workflow preflight, 17 proof-verifier, and 4 channel-gating cases. Publisher coverage includes actual SSH, all interruption checkpoints, restrictive umask permissions, CAS/locking, expiry recovery, and immutable collision handling.
  • Real APT rejected wrong signers, unsigned/tampered metadata, and modified packages. Generator tests passed on both Ubuntu 24.04 and Debian 13.
  • Clean checksum-pinned Ubuntu 24.04 and Debian 13 KVM guests installed through the scoped HTTPS repository, then exercised reinstall, synthetic fixture upgrade, explicit downgrade/rollback, removal, and source removal. Final verification binds package origin/version/hashes, every installed /usr file, provider commands, backend JSON, GUI linkage, and a real X11 application window.
  • Pending and activated-fixture Chromium checks passed installer behavior, keyboard/copy/no-JavaScript/responsive/motion paths. The activated fixture also proved both short install commands, separate setup links, and the rendered URL/fingerprint command; pending state was restored.
  • Workflow contracts, actionlint, ShellCheck, Python/Node/Ruby/Bash syntax, docs checks, and whitespace checks passed. Final review approved the dpkg-deb --fsys-tarfile fix for Zstandard payload portability.

Human operations remaining

The issue’s five Human operational tasks remain unchecked: select/provision the HTTPS origin, create and safeguard the APT signing identity, configure the protected GitHub environment, and perform the first public publication plus clean-client verification. No production account, key, secret, host, DNS/TLS, repository, deployment, or website activation was changed by this PR.

Power-loss behavior and network filesystems were not exercised; production requires local POSIX lock/fsync/atomic-rename semantics. Guest keys, CAs, and +aptfixture1 versions are disposable development evidence, not public release material.

Detailed requirement mapping and evidence

Track the issue 35 development slice, artifact trust model, publication contract,
guest lifecycle evidence, and explicit human production activation boundary.

Constraint: Keep Ubuntu and Debian package identity separate and preserve native release bytes
Directive: Do not advertise repository installation before public verification and activation
Scope-risk: narrow
Tested: Plan mapped to all eight development requirements in issue 35
Generate and verify signed Ubuntu and Debian suites from existing release
packages. Retain immutable package and by-hash objects, serialize publication
over authenticated SSH, and atomically replace each suite's InRelease file.
Add expiry refresh, recoverable promotion and explicit rollback, while keeping
the public channel pending until operator verification activates its setup.

Provide a scoped bootstrap, protected release integration, matching-guest
lifecycle harness, and homepage/documentation support for the activated channel.

Constraint: Initial native repository targets are Ubuntu 24.04 and Debian 13 amd64
Constraint: OpenPGP repository trust is separate from the OpenSSL release checksum key
Rejected: Reuse Bunny storage PUT as atomic publication | documented overwrite guarantees are insufficient
Confidence: high
Scope-risk: moderate
Directive: Preserve old immutable URLs and require expected-revision checks during publication
Directive: Fixture credentials and synthetic package revisions are not production release proof
Tested: Repository tests on Ubuntu 24.04 and Debian 13; real APT trust and tamper checks
Tested: Full APT suite including real SSH, interruption recovery, bootstrap, HTTPS and proof validation
Tested: Pending and activated-fixture browser flows, docs build and static site verification
Tested: Workflow contracts, actionlint, Node/Python/Bash checks and ShellCheck
Not-tested: Fresh KVM lifecycle execution and full workspace checks run after this reproducible commit
Not-tested: Production hosting, credentials and public channel activation remain operator tasks
Debian installs GnuPG without the standalone gpgv verifier, while Ubuntu made
it available transitively. Declare the verifier explicitly so both clean guest
runs exercise the same signed repository checks. Keep the project validation
contract synchronized with the new dedicated APT gate.

Constraint: Guest proof must use clean distribution package state
Confidence: high
Scope-risk: narrow
Tested: Requirements contract, Bash syntax, ShellCheck and whitespace checks
Not-tested: Fresh Ubuntu and Debian KVM lifecycle reruns follow this commit
Compare the served repository manifest as well as every indexed file before
emitting an activation record, and prevent custom test trust roots from
producing production activation data. Make the disposable HTTPS server send a
proper TLS shutdown so Debian's stricter APT client verifies the same fixture
as Ubuntu. Correct the operator guide to match the publication protocol.

Constraint: Fixture CA verification may prove behavior but cannot activate the public channel
Confidence: high
Scope-risk: narrow
Tested: 9 public HTTPS verification cases and 16 APT VM proof-verifier cases
Tested: Dedicated APT suite, workflow contracts, docs/site build, actionlint, Bash/Node/Python syntax and ShellCheck
Not-tested: Fresh matching-guest lifecycle reruns follow this commit
Normalize compressed deb payloads through dpkg-deb before hashing their tar
contents. This avoids relying on Python 3.14's Zstandard support when Ubuntu
24.04 and Debian 13 use older runtimes. Align HTTPS proof counts with the
served manifest and correct the operator runbook.

Constraint: Verification must work with the documented Ubuntu 24.04 and Debian 13 toolchains
Confidence: high
Scope-risk: narrow
Directive: Keep real Zstandard package coverage in the pinned APT tools suite
Tested: Real -Zzstd package regression and 17 APT proof-verifier cases
Tested: Debian 13 clean-guest lifecycle passed at parent implementation commit 7849a1b
Not-tested: Full suite and Ubuntu evidence revalidation follow this commit
Map every issue 35 development task to its delivered files and fresh checks,
including both clean-guest lifecycles. Keep production provisioning and public
activation explicit as the remaining human-owned work.

Constraint: Fixture trust and synthetic upgrades are development proof only
Confidence: high
Scope-risk: narrow
Tested: pnpm check; Ubuntu and Debian KVM lifecycle evidence reverified
Not-tested: Production publication and public client installation await operator provisioning
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Provide a signed APT repository for one-command native installation

1 participant