Skip to content

feat(signing): minisign content verification + KATELLO_PASSWORD_FILE#37

Merged
mdheller merged 1 commit into
mainfrom
feat/content-signing
Jun 16, 2026
Merged

feat(signing): minisign content verification + KATELLO_PASSWORD_FILE#37
mdheller merged 1 commit into
mainfrom
feat/content-signing

Conversation

@mdheller

Copy link
Copy Markdown
Contributor

Summary

  • Minisign content verification: ContentViewSyncer now accepts a signing_public_key (minisign RWS... string). When set, the plan prepends three steps before nix copy: curl nix-cache-info, curl nix-cache-info.minisig, minisign -V. Prevents an unauthenticated Katello from delivering arbitrary closures — the key is baked into the NixOS image.
  • KATELLO_PASSWORD_FILE: _resolve_password() reads the password from a file path before env var. Supports the systemd LoadCredential pattern the NixOS module uses.
  • SyncDaemon: wires signing_public_key through to ContentViewSyncer on each poll. daemon_from_env() reads SOURCEOS_SIGNING_PUBLIC_KEY.
  • CLI: --signing-public-key added to sync plan, sync apply, and sync daemon.

Test plan

  • python3 -m pytest tests/ -q → 95 passed
  • sync plan --signing-public-key RWS... shows minisign steps in plan output
  • sync apply with KATELLO_PASSWORD_FILE=/path/to/file resolves password from file

ContentViewSyncer: when signing_public_key is set, prepends three steps
before nix copy — curl nix-cache-info, curl .minisig, minisign -V. The
public key is embedded in the NixOS image so an unauthenticated Katello
cannot deliver arbitrary closures.

SyncDaemon: accepts signing_public_key constructor arg; wired through
to ContentViewSyncer on each poll. daemon_from_env() reads
SOURCEOS_SIGNING_PUBLIC_KEY.

_resolve_password(): reads KATELLO_PASSWORD_FILE before KATELLO_PASSWORD,
supporting systemd LoadCredential pattern used by the NixOS module.

95 tests passing.
@mdheller mdheller merged commit 8f845b7 into main Jun 16, 2026
4 checks passed
@mdheller mdheller deleted the feat/content-signing branch June 16, 2026 16:38
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.

1 participant