Adam Faris

@af9.us

Writing about systems and storage at https://amf3.github.io

I like educational posts, but this includes the challenge of "how fast could I answer"? For just_enough minimal containers, I'd say 3-5 minutes. Long enough for me to either extract the SBOM from the container image or to click the #buildroot project link on gitlab. github.com/amf3/just_en...

Screen shot showing upstream busybox and ca-certificate sources for the just_enough busybox container image.
Docker@docker.com · last mo.

If a critical vulnerability dropped tomorrow, how fast could you answer: where are we exposed? That's the problem SBOMs solve. This guide explains what they are, why they matter, and how teams are using them in practice: https://bit.ly/3SyH53j

Lessons from my software supply chain adventures. * Control the build pipeline, control the artifact. * Declaritive image contents are the goal. Small image sizes are a byproduct. * Stop waiting for vendor patches. Update the base git hash & rebuild. Resulting in a 51MB #Python flask app.

Screen shot of a simple hello-world app running inside a 51MB flask container.

I just found out BusyBox can self generate all its applet links. This could be handy if you want to inject a shell into a #distroless or minimal container image. "/bin/busybox --install -s /bin" Screenshot is an example Dockerfile showing how this is done.

Example Docker file showing how BusyBox can be injected into a shell-less container image.

I'm exploring self-hosted software supply chains and building appliance style containers from #buildroot generated binaries. Today I got OCI image attestation working on an Unbound DNS container build. Seeing provenance attached from build system to container image feels like a big milestone.

Screenshot showing attestation works against my diy unbound dns container.

I'm going to drop this here and see who notices. 👀 Yes it's related to a new article I'm writing. No it doesn't need to be this way.

A Docker command demonstrating the official python container image ships with Perl.

Apparently running “apt autoremove” on Ubuntu 25.10 can remove netplan. Without netplan, networking does not survive the reboot, so fun times. At least I still remember how to bring up an interface manually.

Huh. #podman has a rest API with coarse grained access like #docker. If I can read the Podman socket I can dump secrets within the container. I know the API is disabled by default, but enabling it seems to have similar risk as rootless Docker. I never stop being amazed by marketing.

Will I ever settle on a storage format when writing this app? So far its been SQLite -> Parquet -> NDJSON. I find the JSON part boring. No compression and is it any better than CSV when not using nested fields? Now I'm tempted to try Protobuf to get the compression that I likely don't need.

I use git submodules to pin the Papermod theme version used by my blog. Tonight I realized I can pin the Hugo web framework by using go modules. The pinned Hugo version is ran with "go tool Hugo". One of those things that became obvious to me once it was obvious. Now for some CI pipeline updates 😐

workflow for using go modules with Hugo generated websites.