One Dockerfile, four named --target stages: rutster-engine (FOB), rutster-brain (brain), rutster-edge (custom xcaddy + curated DNS plugins cloudflare/route53/porkbun/hetzner/desec, duckdns excluded per spec §3.2), rutster-allinone (s6-overlay v3 supervising caddy + FOB + brain + valkey-server). Builder pins rust:1.85-slim-bookworm (matches rust-toolchain.toml). libopus-dev in builder, libopus0 in runtime (matches dev — spec §6.1 distro-over-static-bundled). Brain image gets libopus0 too: although the brain never calls an opus symbol, the linker records NEEDED:libopus.so.0 because rutster-brain-realtime depends on rutster-media (spec ambiguity resolved in this slice's plan README). All-in-one vendors s6-overlay v3.2.0.0 (ISC) + uses upstream valkey/valkey binary (COPY --from pattern, BSD-3). Bundled-binary licenses aggregation-clean vs GPL-3 (Caddy Apache-2.0). No Rust crates touched; cargo-deny unaffected. s6-rc service definitions land in this commit (caddy/engine/brain/ valkey-database run scripts + dependency edges). The Caddyfile lands in Task 3 (same PR); the image-build CI job (Task 7) runs after both. Signed-off-by: Aaron D. Lee <himself@adlee.work>
6.6 KiB
6.6 KiB