Identity and host-key slot for the template's bitcoin-node #45

Closed
opened 2026-10-11 16:54:00 +01:00 by vnprc-agent · 2 comments

Give the template's bitcoin-node machine its identity so the framework's machine-key assertion accepts the inventory entry and a fork's bootstrap keys the VM like every other guest. Part of allod/strategy#68.

Primary goals:

  • A privacy identity — privacyVMs.bitcoin-node = { username = "bitcoin"; } and an sshHosts entry at the machine's inventory address, the same shape as privacy-1.
  • A host-key slot — a machine-host-keys.json entry with a synthetic public key and the shared placeholder ciphertext at secrets/vm-host-keys/bitcoin-node-ssh.age, which getting-started.sh replaces with a real key on a fresh install as it does for the others.
  • Recipients by the existing rule — secrets.nix's per-VM host-key rule picks the new entry up with no code change.

Current state and specifics

forge was added the same way (the commit "identity: give forge a service identity and host key"): identity entry, host-key entry, placeholder blob, and an inventory lock bump once the machine existed there. This repository's checks read inventory.lib.machines, so until the inventory entry lands they run with --override-input inventory pointing at that branch.

Scope

In: identity.nix, machine-host-keys.json, the placeholder ciphertext, and the inventory lock bump once allod/inventory carries the machine. Out: the machine facts (allod/inventory), the profile, forge access (a privacy VM has none).

Give the template's `bitcoin-node` machine its identity so the framework's machine-key assertion accepts the inventory entry and a fork's bootstrap keys the VM like every other guest. Part of allod/strategy#68. Primary goals: - **A privacy identity** — `privacyVMs.bitcoin-node = { username = "bitcoin"; }` and an `sshHosts` entry at the machine's inventory address, the same shape as `privacy-1`. - **A host-key slot** — a `machine-host-keys.json` entry with a synthetic public key and the shared placeholder ciphertext at `secrets/vm-host-keys/bitcoin-node-ssh.age`, which `getting-started.sh` replaces with a real key on a fresh install as it does for the others. - **Recipients by the existing rule** — `secrets.nix`'s per-VM host-key rule picks the new entry up with no code change. ### Current state and specifics `forge` was added the same way (the commit "identity: give forge a service identity and host key"): identity entry, host-key entry, placeholder blob, and an inventory lock bump once the machine existed there. This repository's checks read `inventory.lib.machines`, so until the inventory entry lands they run with `--override-input inventory` pointing at that branch. ### Scope In: `identity.nix`, `machine-host-keys.json`, the placeholder ciphertext, and the inventory lock bump once allod/inventory carries the machine. Out: the machine facts (allod/inventory), the profile, forge access (a privacy VM has none).
Author

Implementation is ready on branch agent/bitcoin-node-identity at e8419c1, one commit, relayed to the owner for the pull request. Proposed PR body follows.


This gives the template's bitcoin-node machine (allod/inventory#26) its identity, so the framework's machine-key assertion accepts the entry and a fork's bootstrap script keys the VM on a fresh install as it does every other guest. Nothing changes for any existing machine or secret: the identity is a bitcoin account and an ssh host at the machine's template address, the host-key slot is a synthetic public key plus the same placeholder ciphertext the other four slots already share, and secrets.nix's existing per-VM rule covers the new slot without a code change. What proves it is this repository's checks run with the inventory branch substituted, and the full composition recorded on allod/strategy#68. If it is wrong, revert the commit.

What changes

  • identity.nix: privacyVMs.bitcoin-node = { username = "bitcoin"; } and sshHosts.bitcoin-node at 192.0.2.13.
  • machine-host-keys.json: a bitcoin-node entry, staged = null. The public key is a throwaway generated for the placeholder; its private half was discarded.
  • secrets/vm-host-keys/bitcoin-node-ssh.age: a byte-for-byte copy of the shared placeholder blob (getting-started.sh replaces it).
  • flake.lock is not bumped here: the inventory entry is on a branch. The owner bumps inventory in this repository once allod/inventory#26 is on master, before this merges.

Risk

R1: synthetic identity data in a template; no real key material. Rollback is a revert.

Validation

Branch agent/bitcoin-node-identity, one commit (e8419c1). Run with --override-input inventory pointing at the allod/inventory#26 branch (1ecbf71), since the lock is not bumped here:

  • nix flake check --override-input inventory <branch> .: all checks passed!.
  • lib.vmHostKeySecretFiles keys: ["allod-dev","bitcoin-node","forge","nexus","privacy-1"]; lib.identity.privacyVMs carries bitcoin-node = { username = "bitcoin"; }.
  • sha256sum secrets/vm-host-keys/*.age: one digest across all five files.
  • Leak scan over the diff: only the pre-existing public forge host as context lines.
  • The template deploy flake with this branch, the inventory branch and the profiles branch (allod/profiles#14, d03e92a) all substituted: allod check passes All 8 steps, and machine bitcoin-node instantiates to a toplevel derivation, which is the first time the node profile has composed through the public privacy builder.
  • No external reviewer (R1).

Part of allod/strategy#68. Closes allod/secrets#45.

Implementation is ready on branch `agent/bitcoin-node-identity` at `e8419c1`, one commit, relayed to the owner for the pull request. Proposed PR body follows. --- This gives the template's `bitcoin-node` machine (allod/inventory#26) its identity, so the framework's machine-key assertion accepts the entry and a fork's bootstrap script keys the VM on a fresh install as it does every other guest. Nothing changes for any existing machine or secret: the identity is a `bitcoin` account and an ssh host at the machine's template address, the host-key slot is a synthetic public key plus the same placeholder ciphertext the other four slots already share, and `secrets.nix`'s existing per-VM rule covers the new slot without a code change. What proves it is this repository's checks run with the inventory branch substituted, and the full composition recorded on allod/strategy#68. If it is wrong, revert the commit. ## What changes - `identity.nix`: `privacyVMs.bitcoin-node = { username = "bitcoin"; }` and `sshHosts.bitcoin-node` at `192.0.2.13`. - `machine-host-keys.json`: a `bitcoin-node` entry, `staged = null`. The public key is a throwaway generated for the placeholder; its private half was discarded. - `secrets/vm-host-keys/bitcoin-node-ssh.age`: a byte-for-byte copy of the shared placeholder blob (`getting-started.sh` replaces it). - `flake.lock` is not bumped here: the inventory entry is on a branch. The owner bumps `inventory` in this repository once allod/inventory#26 is on master, before this merges. ## Risk R1: synthetic identity data in a template; no real key material. Rollback is a revert. ## Validation Branch `agent/bitcoin-node-identity`, one commit (`e8419c1`). Run with `--override-input inventory` pointing at the allod/inventory#26 branch (`1ecbf71`), since the lock is not bumped here: - `nix flake check --override-input inventory <branch> .`: `all checks passed!`. - `lib.vmHostKeySecretFiles` keys: `["allod-dev","bitcoin-node","forge","nexus","privacy-1"]`; `lib.identity.privacyVMs` carries `bitcoin-node = { username = "bitcoin"; }`. - `sha256sum secrets/vm-host-keys/*.age`: one digest across all five files. - Leak scan over the diff: only the pre-existing public forge host as context lines. - The template deploy flake with this branch, the inventory branch and the profiles branch (allod/profiles#14, `d03e92a`) all substituted: `allod check` passes `All 8 steps`, and `machine bitcoin-node` instantiates to a toplevel derivation, which is the first time the node profile has composed through the public privacy builder. - No external reviewer (R1). Part of allod/strategy#68. Closes allod/secrets#45.
Member

Landed on master in commit 60fa5af: the bitcoin-node identity, host-key slot and placeholder blob; the inventory lock now pins the machine commit. Verified against the files on master today; closing as completed.

Landed on master in commit 60fa5af: the bitcoin-node identity, host-key slot and placeholder blob; the inventory lock now pins the machine commit. Verified against the files on master today; closing as completed.
allod-agent 2026-10-21 23:32:37 +01:00
  • closed this issue
  • removed the
    landed?
    label
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
allod/secrets#45
No description provided.