Watch
0
0
Fork
You've already forked hyperhive
0
Commit graph hyperhive/hive-priv
Author SHA1 Message Date
atlas
49266e4410 remove what no longer has a reader: build-log store, dashboard sent/delivered events, graph resource dep 2026-11-13 10:58:49 +01:00
atlas
712dcf2b25 squid intercepts restricted and log agents' web traffic, named from the bound source address 2026-11-13 09:47:09 +01:00
atlas
70179b6c1f egress anti-spoofing: keep established bindings, load tables with bindings and leases in one transaction 2026-11-13 08:53:23 +01:00
atlas
c3f1ef6eb2 hive-priv: egress-pin and egress-lease sub-commands that bind bridge ports to MACs and load leases 2026-11-13 08:53:23 +01:00
atlas
11393bc538 budgeted agents throttle at 90% of the cap; alert on repeated oom kills 2026-11-11 02:38:53 +01:00
atlas
4eb27046a0 budgeted agent containers get no swap; export oom kills and swap use 2026-11-11 02:38:53 +01:00
atlas
418b50980c hive-priv: drop the descriptor-taking snapshot send and its fd-receiving loop 2026-11-10 06:48:54 +01:00
atlas
20d286f06a remove the old snapshot store; tombstone its options 2026-11-10 06:48:54 +01:00
damocles
24c5c02942 hive-priv: never leave an agent dir or the agents root root-owned on a fresh host 2026-11-09 14:19:31 +01:00
atlas
c25cf3d48a hive-priv: fetch the swarm signature from attic before verifying a locally valid closure 2026-11-08 11:49:51 +01:00
atlas
ef68baa00f pull swarm closures through the nix daemon: substituters in the fragment, merged root-only netrc 2026-11-08 11:06:28 +01:00
atlas
dab7768869 scope the cache access to hive-core: client-side nix copy, daemon trusts only the key 2026-11-08 01:56:55 +01:00
atlas
ecd4445680 hive-c0re pulls closures through the nix daemon; hive-priv verifies the swarm signature before applying 2026-11-08 01:56:55 +01:00
atlas
78b0451ed1 hive-priv: overlay the knowledge .git only when the clone has one, so agents start before the first clone 2026-11-07 15:13:35 +01:00
iris
0e84fe8bc4 docs: the handbook follows the three layers: swarm, hives, agents
The handbook's sections were agent-lifecycle, integrations, swarm, tools,
trust-boundary and web-ui, which do not follow how the system is built, so a
reader could not tell which layer a page is about. Its pages now sit in
swarm/, hives/ and agents/, with the accounts an agent can hold outside the
system in external-accounts/.

- swarm/: forge, matrix and the knowledge repo join the swarm pages, and so
  does the swarmctl reference.
- hives/: the dashboard, hivectl and its reference, and the operator/agent
  boundary, with a README that takes over the old web-ui and tools pages.
- agents/: the roster, persistence, config changes, the agent's own web page
  (was web-ui/agent) and the security model, with a README.
- external-accounts/: GitHub and GitLab.

Pages are moved whole; none is split yet. Every reference follows: relative
links in the docs, `docs/2-handbook/...` paths in code comments, the nix
checks that regenerate the CLI references and the ignore list, and docs/README.md,
whose handbook section is now by layer.
2026-11-07 12:19:36 +01:00
iris
30a8f71bb5 docs: the trust-boundary pages keep the operator guidance, the mechanism moves to implementation
boundary.md keeps the model, the design rule, why network isolation
matters and host admin socket access; the hive-priv socket activation and
the per-agent socket directory move to 4-implementation/trust-boundary.
security.md keeps the agent trust model and the path-name rule; the nix
builds mode with its threat model, and the hive-c0re privilege separation,
move to their own pages there. Headings and text move as they were, with
one level shaved off the heading depth. Links, code and nix pointers, and
the docs index follow the moves.
2026-11-06 19:45:11 +01:00
iris
6739bb903d docs: sort the top-level directories into five sections by what the reader wants
Every docs directory moves under 1-getting-started, 2-handbook,
4-implementation or 5-project; the options reference (section 3) comes from
the website and has no directory here. trust-boundary stays whole under the
handbook for now. web-ui, swarm and tools split between handbook and
implementation, and the command-line references move to
2-handbook/reference. Links, path references in code and nix, and the docs
index follow the moves; no page content changes.
2026-11-06 18:46:57 +01:00
atlas
a71e7cea75 allow erofs as the idmapped store filesystem
nspawn idmaps the store on erofs, which the VM test's store uses; the
allowlist from the store check refused it and failed the namespaced-agent
subtest in vm-nightly #7084. vm-nightly #7030 ran the same agent on the
same erofs store green. The magic is EROFS_SUPER_MAGIC_V1 from the
kernel's linux/magic.h; libc has no constant.

Refs #5888
2026-11-06 17:02:44 +01:00
atlas
419d087702 say the store check is an allowlist: only ext4, btrfs and xfs pass 2026-11-06 12:37:04 +01:00
atlas
af739dc8ea refuse a namespaced agent whose /nix/store cannot be idmapped
Refs #5888
2026-11-06 12:37:03 +01:00
atlas
cd1b77b078 pin state as the first data dir with a comment and a test 2026-11-06 11:36:17 +01:00
atlas
76f5ede645 make a userns data move resumable and refuse before the first chown 2026-11-06 11:36:17 +01:00
atlas
18e4f195e5 hive-priv: refuse injecting strings in the limits drop-in and the container conf
memory_max and cpu_quota are checked against the shapes systemd takes
before write_resource_limits makes any file. validate_bind_path also
refuses whitespace, control bytes, backslash, dollar and backtick, which
the start script expands unquoted in EXTRA_NSPAWN_FLAGS. bridge must be
an interface name and gateway_ip an IPv4 literal. Each refusal names its
field.

Closes #6086
2026-11-06 10:06:11 +01:00
atlas
5485151ba6 add a per-agent nix builds mode, host or none, carried like privateUsers 2026-11-06 09:18:42 +01:00
atlas
b0a6a28d10 tests use mockall for expectation-style doubles, starting with the builder and hive-priv seams 2026-11-03 14:16:01 +01:00
atlas
6a1e47532d hive-priv: test main.rs's request dispatch and validation, and infra.rs
check_socket_activation and response_of are extracted from socket_listener
and dispatch unchanged, and infra.rs takes a &impl Spawn, so tests run
stand-ins instead of systemctl.
2026-11-03 10:27:47 +01:00
atlas
6d04be6c62 hive-priv: test seams are traits, not closure bags 2026-11-03 08:31:12 +01:00
atlas
666f8975a2 hive-priv: stop streaming spin after stderr closes 2026-11-02 22:49:26 +01:00
atlas
18dd5535de hive-priv: test container.rs's start, stop and config decisions 2026-11-02 21:11:22 +01:00
atlas
fd5e9c74e8 hive-priv: test storage.rs's path, name and ownership decisions 2026-11-02 20:55:36 +01:00
atlas
9a773349a8 a failed container start shows the unit's own journal lines in the op output 2026-11-01 17:06:36 +01:00
atlas
f5a609911c read privateUsers from the closure record at start, and move the data owner option under hive-controller 2026-11-01 17:06:18 +01:00
atlas
7412a0f1bd walk an agent's dirs by fd when moving them, and refuse a gid that differs from the uid 2026-11-01 17:06:18 +01:00
atlas
bfdf603d12 run opted-in agents in a user namespace with a dedicated data owner 2026-11-01 17:06:18 +01:00
damocles
3c09e14a76 drop the config and /applied mounts: an agent reads its config by cloning agent-configs, and the prompt says so 2026-11-01 17:02:12 +01:00
atlas
35a49aaf42 keep the knowledge .git overlay unconditional 2026-11-01 14:06:19 +01:00
atlas
23b0c4cd55 overlay config .git only when the source has one; record a failed start in the op output 2026-11-01 14:06:19 +01:00
atlas
6b800600e2 bind a container apply to the closure realised for the agent, and record the deployed pins on drift
hive-priv applies only the path its last RealiseClosure returned for that agent. On drift the swap and create record the pins of the commit the closure was built from.
2026-10-29 22:36:58 +01:00
atlas
4590b04cac remove the hive's local build of agent closures
A rebuild or create downloads the closure the swarm built and applies it; with none to deploy it fails and changes nothing. hive-priv takes a store path instead of an internal/meta commit and builds nothing.
2026-10-29 22:17:07 +01:00
atlas
74f463c40e move the c0re host options to deploy.hive-controller 2026-10-29 01:08:41 +01:00
atlas
24afc89ab3 run the root check warn-only on hyperhive's own containers, per unit, not on the container@ template 2026-10-28 23:50:58 +01:00
atlas
c191975aab check every container's root before its start, through the container@ template 2026-10-28 23:50:58 +01:00
atlas
86e80250bb remove the partial salvage dir when a salvage fails
- a failure between creating the dir and the rename removes that dir only
- give the ephemeral-rootfs vm test a 4 GiB disk so the space check passes
2026-10-28 23:01:04 +01:00
atlas
836b15a46e harden the ephemeral-root salvage: clone, check space, lock
- clone each file with FICLONE, copy the data only where that fails
- skip the salvage when the copy would leave too little free space
- hold a per-container flock and one copy at a time across containers
- run WriteNspawnFlags on the blocking pool
2026-10-28 23:01:04 +01:00
atlas
6708ef804f root the build the pre-start check names 2026-10-28 21:59:43 +01:00
atlas
a44a7256a7 check the container root before each start 2026-10-28 21:59:43 +01:00
atlas
81439fa710 run agent containers on an ephemeral root, salvaging the old one first
hive-priv copies a stopped container's root to the agent's work dir and
renames it aside before passing nspawn --ephemeral; the agent's nix state
moves to the persistent profiles bind. Adds the agent-ephemeral-rootfs vm
test and a module-eval case for the nix state redirect.
2026-10-28 20:00:12 +01:00
atlas
b551eb02ff send agent traffic through squid once its hive announces it 2026-10-28 17:24:34 +01:00
atlas
c16cf1756f download an agent's cached closure in prebuild, building locally when that fails 2026-10-28 10:23:45 +01:00
atlas
11914e3e9a use a neutral path in the non-repo mount test 2026-10-26 22:06:51 +01:00