banger/internal
Thales Maciel 491c8e1ebb
Phase B-2: pre-inject banger guest agents into pulled rootfs
New imagepull.InjectGuestAgents writes banger's guest-side assets
straight into the pulled ext4 so systemd will start them at first boot:

  /usr/local/bin/banger-vsock-agent             (binary, 0755)
  /usr/local/libexec/banger-network-bootstrap   (script, 0755)
  /etc/systemd/system/banger-network.service    (unit, 0644)
  /etc/systemd/system/banger-vsock-agent.service (unit, 0644)
  /etc/modules-load.d/banger-vsock.conf         (modules, 0644)

  plus enable-at-boot symlinks under
  /etc/systemd/system/multi-user.target.wants/

All writes + ownership + symlinks go through one `debugfs -w -f -`
invocation. No sudo required because the caller owns the ext4 file.
Script is deterministic: shallow-first mkdir, then write, then sif,
then symlink. "File exists" errors from mkdir on already-present
dirs are tolerated (debugfs keeps going past them with -f, and we
filter them out of the output scan).

Asset content reuses the existing guestnet.BootstrapScript /
SystemdServiceUnit / ConfigPath and vsockagent.ServiceUnit /
ModulesLoadConfig / GuestInstallPath — one source of truth, no
duplicated systemd unit strings.

Daemon wiring: new d.finalizePulledRootfs seam runs both
ApplyOwnership (B-1) and InjectGuestAgents as one phase between
BuildExt4 and StageBootArtifacts. The companion vsock-agent binary
is resolved via paths.CompanionBinaryPath. Existing daemon tests
stub the seam with a no-op to avoid needing a real companion
binary + debugfs in the test harness.

Tests: real-ext4 round-trip that builds a minimal ext4, runs
InjectGuestAgents, then verifies every expected path is present
via `debugfs stat`, plus uid=0 and mode 0755 on the vsock-agent
binary. Also: missing-binary rejection, ancestor-collection order
test. debugfs/mkfs.ext4 tests skip on hosts without the binaries.

After B-1+B-2, any OCI image that already ships sshd boots with
banger-network and banger-vsock-agent running; image pull is
one step from "useful rootfs primitive". B-3 (first-boot sshd
install) unlocks images that don't ship sshd.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 18:08:56 -03:00
..
api Phase 2: daemon PullImage orchestration 2026-04-16 17:27:32 -03:00
buildinfo Stamp shared build metadata into banger binaries 2026-03-22 17:14:06 -03:00
cli Phase 3: CLI banger image pull 2026-04-16 17:29:06 -03:00
config Rename experimental Void image to void 2026-04-01 20:15:28 -03:00
daemon Phase B-2: pre-inject banger guest agents into pulled rootfs 2026-04-16 18:08:56 -03:00
firecracker Add experimental Void guest workflow and vsock agent 2026-03-19 14:51:25 -03:00
guest Add guest.session.send and vm.workspace.export RPCs 2026-04-14 15:21:50 -03:00
guestconfig Refactor VM lifecycle around capabilities 2026-03-18 19:28:26 -03:00
guestnet Stop using kernel IP autoconfig for runtime VMs 2026-03-21 21:54:18 -03:00
hostnat Move helper NAT management into Go 2026-03-17 15:07:49 -03:00
imagepreset Add an experimental Alpine image flow 2026-03-21 20:25:55 -03:00
imagepull Phase B-2: pre-inject banger guest agents into pulled rootfs 2026-04-16 18:08:56 -03:00
kernelcat imagepull + kernelcat: allow absolute symlink targets 2026-04-16 17:33:16 -03:00
model Add guest sessions and agent VM defaults 2026-04-12 23:48:42 -03:00
namegen Remove runtime-bundle image dependencies 2026-03-21 18:34:53 -03:00
opencode Wait for real guest vsock health before opencode 2026-03-21 21:14:22 -03:00
paths Phase 1: imagepull package — pull, flatten, ext4 2026-04-16 17:22:13 -03:00
policy Add vsock-backed VM port inspection 2026-03-19 15:52:11 -03:00
rpc Propagate RPC cancellation to daemon requests 2026-03-16 18:28:33 -03:00
sessionstream Add guest sessions and agent VM defaults 2026-04-12 23:48:42 -03:00
store Add guest sessions and agent VM defaults 2026-04-12 23:48:42 -03:00
system Phase B-1: ownership fixup via debugfs pass 2026-04-16 18:04:22 -03:00
toolingplan Bootstrap vm run tooling before attach 2026-03-29 11:38:05 -03:00
vmdns Replace mapdns with daemon DNS 2026-03-17 15:49:35 -03:00
vsockagent Add vsock-backed VM port inspection 2026-03-19 15:52:11 -03:00
webui Rename experimental Void image to void 2026-04-01 20:15:28 -03:00