feat(build): ship netprobe eBPF object in the bundle + load it from the unit (#3425) #3486
No reviewers
Labels
No labels
1week
2weeks
Failed compliance check
IP cameras
NATS
Possible security concern
Review effort 1/5
Review effort 2/5
Review effort 3/5
Review effort 4/5
Review effort 5/5
UI
aardvark
accessibility
amd64
api
arm64
auth
back-end
bgp
blog
bug
build
checkers
ci-cd
cleanup
cnpg
codex
core
dependencies
device-management
documentation
duplicate
dusk
ebpf
enhancement
eta 1d
eta 1hr
eta 3d
eta 3hr
feature
fieldsurvey
github_actions
go
good first issue
help wanted
invalid
javascript
k8s
log-collector
mapper
mtr
needs-triage
netflow
network-sweep
observability
oracle
otel
plug-in
proton
python
question
reddit
redhat
research
rperf
rperf-checker
rust
sdk
security
serviceradar-agent
serviceradar-agent-gateway
serviceradar-web
serviceradar-web-ng
siem
snmp
sysmon
topology
ubiquiti
wasm
wontfix
zen-engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
carverauto/serviceradar!3486
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/netprobe-ebpf-object-delivery"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The missing piece for netprobe to actually capture as a delivered add-on. After the "Phase 3 eBPF cutover",
rust/netprobe/src/main.rsrefuses to start continuous capture without--ebpf-object, and IPC config can't enable it afterward — but neither the base-agent launch path nor the add-on bundle provisioned the object, so a delivered netprobe would boot inDisabledmode and never do flow→process attribution.This ships the eBPF object with the bundle so it travels to the agent, and loads it from the unit.
Changes
defs.bzl: bundles now ship optionaldata_entries(runtime data files) flat next to the binary — same plumbing as manifest/unit entries.addon_inventory.bzl: the netprobe bundle ships//rust/netprobe/ebpf:netprobe_ebpf_objectasnetprobe_ebpf.o(arch-independent CO-RE BPF bytecode — one object for both linux arches).serviceradar-netprobe.service:ExecStartnow passes--config(the agent-written bootstrap carrying the capture interfaces the eBPF runtime attaches to at startup, persisted across systemd restarts) and--ebpf-objectpointing at the stagedcurrent/netprobe_ebpf.o.netprobe_systemd_unit_test.go: pins the staged eBPF-object path to the verbatim-install staging layout alongside the binary.Validation
darwin: Go contract test + gofmt clean;
bazel queryshows the netprobe bundle now depends on//rust/netprobe/ebpf:netprobe_ebpf_object+ the unit; the assembler shipsnetprobe_ebpf.oflat at 0644 in the per-arch tarball next to the 0755 binary.Linux box (
sr-test-pve04, kernel 6.8, a live agent host): confirmed the real agent release-root is/var/lib/serviceradar/agent— matching the unit's hardcoded staging base. (An eBPF-object compile on the box is running as an extra check; the cross-compile + full bundle build are otherwise CI's job.)Critical-path context
This unblocks capture. Remaining to actually run the eBPF flow→process test end-to-end: publish the netprobe bundle on Linux CI (the lane auto-includes it —
push_all_native_addonspicks up the auto-generatednetprobe_addon_bundle_push, and the eBPF object builds as a bundle dependency) → import → approve → assign to a scratch agent rolled to a build that includes the §2.2 cutover (#3482/#3483) → it fetches/stages/setcaps/enables the unit → netprobe loads the object + captures.sr-test-pve04is the natural scratch agent for that e2e.🤖 Generated with Claude Code
lgtm