banger/internal/daemon
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
..
dmsnap Extract opstate and dmsnap into subpackages 2026-04-15 16:02:43 -03:00
fcproc Extract fcproc subpackage for firecracker process helpers 2026-04-15 16:11:39 -03:00
imagemgr Phase 2: daemon PullImage orchestration 2026-04-16 17:27:32 -03:00
opstate Extract opstate and dmsnap into subpackages 2026-04-15 16:02:43 -03:00
session Add lint targets, fix gofmt drift, broaden Makefile build inputs 2026-04-16 16:49:17 -03:00
workspace Extract workspace subpackage with pure repo helpers 2026-04-15 16:37:19 -03:00
ARCHITECTURE.md Refresh daemon docs and mark web UI experimental 2026-04-15 16:44:11 -03:00
capabilities.go Add guest sessions and agent VM defaults 2026-04-12 23:48:42 -03:00
capabilities_test.go Manage image artifacts and show VM create progress 2026-03-21 14:48:01 -03:00
daemon.go Phase B-2: pre-inject banger guest agents into pulled rootfs 2026-04-16 18:08:56 -03:00
daemon_test.go Rename experimental Void image to void 2026-04-01 20:15:28 -03:00
dashboard.go Serve a local web UI from bangerd 2026-03-21 16:47:47 -03:00
dns_routing.go Route .vm DNS through systemd-resolved 2026-03-22 15:07:22 -03:00
dns_routing_test.go Route .vm DNS through systemd-resolved 2026-03-22 15:07:22 -03:00
doc.go Refresh daemon docs and mark web UI experimental 2026-04-15 16:44:11 -03:00
doctor.go Remove runtime-bundle image dependencies 2026-03-21 18:34:53 -03:00
fastpath_test.go Manage image artifacts and show VM create progress 2026-03-21 14:48:01 -03:00
guest_sessions.go Extract workspace subpackage with pure repo helpers 2026-04-15 16:37:19 -03:00
guest_sessions_test.go Extract session subpackage with pure guest-session helpers 2026-04-15 16:33:12 -03:00
image_build_ops.go Extract opstate and dmsnap into subpackages 2026-04-15 16:02:43 -03:00
image_seed.go Manage image artifacts and show VM create progress 2026-03-21 14:48:01 -03:00
imagebuild.go Extract imagemgr subpackage with pure image helpers 2026-04-15 16:24:22 -03:00
imagebuild_test.go Extract imagemgr subpackage with pure image helpers 2026-04-15 16:24:22 -03:00
images.go Phase 2: daemon PullImage orchestration 2026-04-16 17:27:32 -03:00
images_pull.go Phase B-2: pre-inject banger guest agents into pulled rootfs 2026-04-16 18:08:56 -03:00
images_pull_test.go Phase B-2: pre-inject banger guest agents into pulled rootfs 2026-04-16 18:08:56 -03:00
kernels.go Phase 4: remote catalog + banger kernel pull 2026-04-16 15:05:42 -03:00
kernels_test.go Phase 4: remote catalog + banger kernel pull 2026-04-16 15:05:42 -03:00
logger.go Speed up VM create with work seeds 2026-03-18 21:22:12 -03:00
logger_test.go Remove runtime-bundle image dependencies 2026-03-21 18:34:53 -03:00
nat.go Move helper NAT management into Go 2026-03-17 15:07:49 -03:00
nat_test.go Move helper NAT management into Go 2026-03-17 15:07:49 -03:00
opencode.go Manage image artifacts and show VM create progress 2026-03-21 14:48:01 -03:00
ports.go Refine vm ports output 2026-03-19 18:21:04 -03:00
preflight.go Remove runtime-bundle image dependencies 2026-03-21 18:34:53 -03:00
runtime_assets.go Remove runtime-bundle image dependencies 2026-03-21 18:34:53 -03:00
session_attach.go Extract session subpackage with pure guest-session helpers 2026-04-15 16:33:12 -03:00
session_controller.go Extract session subpackage with pure guest-session helpers 2026-04-15 16:33:12 -03:00
session_lifecycle.go Extract session subpackage with pure guest-session helpers 2026-04-15 16:33:12 -03:00
session_stream.go Extract session subpackage with pure guest-session helpers 2026-04-15 16:33:12 -03:00
snapshot.go Extract opstate and dmsnap into subpackages 2026-04-15 16:02:43 -03:00
snapshot_test.go Harden VM stop cleanup for stale snapshots 2026-03-18 12:28:15 -03:00
ssh_client_config.go Configure direct SSH access for .vm hosts 2026-03-22 16:48:42 -03:00
ssh_client_config_test.go Configure direct SSH access for .vm hosts 2026-03-22 16:48:42 -03:00
tap_pool.go Move subsystem state/locks off Daemon into owning types 2026-04-15 15:58:33 -03:00
vm.go Extract fcproc subpackage for firecracker process helpers 2026-04-15 16:11:39 -03:00
vm_authsync.go Split internal/daemon vm.go and guest_sessions.go by concern 2026-04-15 15:47:08 -03:00
vm_create.go Move subsystem state/locks off Daemon into owning types 2026-04-15 15:58:33 -03:00
vm_create_ops.go Add lint targets, fix gofmt drift, broaden Makefile build inputs 2026-04-16 16:49:17 -03:00
vm_disk.go Split internal/daemon vm.go and guest_sessions.go by concern 2026-04-15 15:47:08 -03:00
vm_lifecycle.go Split internal/daemon vm.go and guest_sessions.go by concern 2026-04-15 15:47:08 -03:00
vm_locks.go Move subsystem state/locks off Daemon into owning types 2026-04-15 15:58:33 -03:00
vm_set.go Split internal/daemon vm.go and guest_sessions.go by concern 2026-04-15 15:47:08 -03:00
vm_stats.go Split internal/daemon vm.go and guest_sessions.go by concern 2026-04-15 15:47:08 -03:00
vm_test.go Add guest sessions and agent VM defaults 2026-04-12 23:48:42 -03:00
web.go Serve a local web UI from bangerd 2026-03-21 16:47:47 -03:00
workspace.go Extract workspace subpackage with pure repo helpers 2026-04-15 16:37:19 -03:00
workspace_test.go workspace.export: add base_commit to capture worker git commits 2026-04-14 16:13:05 -03:00