- Decision: The sidecar binary must be built
CGO_ENABLED=0 (static); the sidecar container needs CAP_SYS_RESOURCE in addition to CAP_BPF+CAP_NET_ADMIN+CAP_PERFMON, plus --security-opt apparmor=unconfined and --security-opt seccomp=unconfined on this host's podman; /sys/fs/bpf's pin dirs must be pre-created and chowned to UID 1337 by pod-up.sh before the sidecar starts; the app's PID must be resolved from inside the shared pod PID namespace (podman exec ... pgrep), not via podman inspect's host-relative PID.
- Reason: Confirmed empirically by bringing up a real rootful pod: each item is a hard failure otherwise (dynamic linking fails to exec on musl/Alpine;
RLIMIT_MEMLOCK raise needs CAP_SYS_RESOURCE; this host's default AppArmor and seccomp profiles each independently block one step of BPF map create/pin; bpffs's root is 0700 root-owned; the pod's shared PID namespace renumbers PIDs vs the host).
- Trade-off: Disabling AppArmor/seccomp confinement on the sidecar widens its effective attack surface beyond the spec's stated cap list; scoped to only the sidecar container, never the app container.
- Scope: Feature 03 (
deploy/podman/pod-up.sh).
- Date: 2026-09-12
- Status: active, amended by AD-010 — the
CAP_PERFMON requirement and the shared-PID-namespace/podman exec ... pgrep app-PID resolution no longer apply (both were uprobe-attach-only). The live cap set is CAP_BPF+CAP_NET_ADMIN+CAP_SYS_RESOURCE+CAP_NET_RAW; everything else in this decision still holds.