Foundations
Set up the disposable Fedora 44 KVM lab, the Grafana/OTel stack, and the Rust + Aya toolchain โ then write and deploy your first eBPF program.
Tutorial outline
What this tutorial covers, how the chapters are grouped, and the order in which they build on each other.
Prerequisites
The hardware floor, the host OS, and the virtualization stack you need before building anything.
Lab setup: the eBPF target VM(s)
Provision a disposable Fedora 44 guest under libvirt with one script, prove you can deploy a binary to it, and add a second guest plus the network between them for two-host tests.
The observability stack
Stand up Grafana + Tempo + Mimir + Loki in one Podman container, run a Python 3.14 OTLP client, and learn how your Rust eBPF programs will report their measurements into it.
The Rust + Aya toolchain
Install Rust 1.96.0 via rustup (not dnf), add the nightly BPF target and bpf-linker, scaffold projects with cargo-generate and the aya-template, and set up RustRover. Plus the background that pays off later: the LLVM/Clang/rustc compiler path that turns code into BPF bytecode, the wider eBPF tooling landscape, and the glibc-vs-musl choice for your loader binary.
eBPF concepts and tools
Programs, maps, the verifier, BTF and CO-RE, program types and attach points โ the mental model you need before writing the first Aya program, and how bpftool and bpftrace fit in.
Hello, eBPF
A first Aya program โ a tracepoint that counts process executions in the kernel and reports to Grafana โ with a short libbpf / libbpf-rs warm-up first, deployed to the target VM.