Deep Dive: FreeBSD Podman Networking, Custom CNI, and Resource Accounting

When running native OCI containers on FreeBSD with Podman and ocijail, networking is one of the most interesting—and sometimes confusing—parts of the setup. Because Podman translates container commands into FreeBSD jail(2) system calls, container interfaces aren’t just Linux veth pairs inside network namespaces; they leverage FreeBSD’s VNET (Virtual Network Stack), epair(4) interface pairs, and standard CNI plugins. Here is a practical deep dive into how Podman container networking works on FreeBSD, how to build custom CNI bridge networks for VLANs, how to fix podman stats metric collection with RACCT, and how to structure multi-container Compose setups. ...

August 9, 2026 · 4 min · Michael Johnson

Speeding Up FreeBSD Hosts & Container Builds with a Local pkg Cache

When you run FreeBSD in a homelab across multiple servers, VNET jails, or VMs, routine maintenance quickly reveals a hidden inefficiency. Every time you provision a new jail or update your fleet, each instance independently connects to public pkg.FreeBSD.org mirrors to download identical packages. If you have a dozen jails running services that need Python, SQLite, or FFmpeg, your WAN connection downloads the exact same binary archives a dozen times. ...

July 1, 2026 · 4 min · Michael Johnson

How I Run Containers in My Homelab

I’ve been running containers on FreeBSD for a while now, and I’ve settled into a workflow that just works. Here’s how I manage everything. The Stack Component Choice Host OS FreeBSD 15 Runtime Podman + ocijail Orchestration Ansible Images Daemonless (FreeBSD-native) Storage ZFS (lz4 compression) Networking VNET jails + bridge No Docker daemon. No Linux VMs. Podman talks to ocijail, which runs containers as native FreeBSD jails. Directory Structure Every service gets its config stored in /containers/<service>/. Simple and predictable: ...

January 20, 2026 · 6 min · Michael Johnson

My Homelab Architecture

My homelab has evolved significantly over the years. Currently, it’s a mix of heavy iron and efficient ARM devices, all orchestrated with Ansible. The Fleet Mars (TrueNAS): The primary storage engine. Bulk ZFS datasets, backups, and media library. Saturn (FreeBSD 15): The CI/CD Core. Runs Gitea, Woodpecker, and DNS. Jupiter (FreeBSD 15): The heavy lifter. Runs local storage and media services. OPNsense: The perimeter. Handling the network, firewall rules, and VLANs. Pluto (FreeBSD 14): My dedicated test box. Sunshine (Synology DS418): Secondary backup server to Mars. Venus (Linux/Fedora): For the few things that absolutely refuse to run on FreeBSD (yet). PiAware: ADS-B flight tracker (built following this guide). Pibox (Linux/ARM64): My low-power, always-on utility box. Everything is managed via Ansible stored in a private Gitea repo. Secrets are vaulted. Deployment is a single playbook run.

January 12, 2026 · 1 min · Michael Johnson