<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BadgerOps</title><link>https://badgerops.github.io/</link><description>Recent content on BadgerOps</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 28 Oct 2026 12:35:00 +0000</lastBuildDate><atom:link href="https://badgerops.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>People Are Actually Using This Thing</title><link>https://badgerops.github.io/people-are-actually-using-this-thing/</link><pubDate>Wed, 28 Oct 2026 12:35:00 +0000</pubDate><guid>https://badgerops.github.io/people-are-actually-using-this-thing/</guid><description>&lt;p&gt;&lt;em&gt;(Or, how my homelab provider turned into actual open source maintenance)&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Back in May I &lt;a href="https://badgerops.github.io/why-i-wrote-a-new-terraform-provider-for-unifi/"&gt;wrote about shipping a UniFi Terraform provider&lt;/a&gt;. It had been out for about a week and the Terraform Registry showed 153 downloads. I was pretty happy with that. The provider worked against my controller, a couple of folks in Matrix had kicked the tires, and I could finally manage my firewall rules without clicking through the Network UI.&lt;/p&gt;</description></item><item><title>Training a Small Model on My Own Home Network</title><link>https://badgerops.github.io/training-a-small-model-on-my-own-home-network/</link><pubDate>Sun, 04 Oct 2026 16:31:01 +0000</pubDate><guid>https://badgerops.github.io/training-a-small-model-on-my-own-home-network/</guid><description>&lt;p&gt;&lt;em&gt;(Or, me fighting a 0.6B model and my own measurement errors, in that order)&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;I have been using LLMs for a couple of years now - well, since ChatGPT was announced. I have not, until this summer, actually &lt;em&gt;trained&lt;/em&gt; one.&lt;/p&gt;</description></item><item><title>Treating OpenClaw Like a Junior Sysadmin</title><link>https://badgerops.github.io/treating-openclaw-like-a-junior-sysadmin/</link><pubDate>Wed, 20 May 2026 20:10:59 +0000</pubDate><guid>https://badgerops.github.io/treating-openclaw-like-a-junior-sysadmin/</guid><description>&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Edit: &lt;br&gt;As of August 2026 I no longer use OpenClaw, primarily now I use pi.dev, claude code, codex, and Hermes these days. Things move fast, and I didn't really like the amount of time I was doing care and feeding of OpenClaw.&lt;/blockquote&gt;&lt;p&gt;I wanted to kick the tires on &lt;a href="https://openclaw.ai/"&gt;OpenClaw&lt;/a&gt;, but I did not want to install it directly on my primary workstation.&lt;/p&gt;</description></item><item><title>Why I Wrote a New Terraform Provider for UniFi</title><link>https://badgerops.github.io/why-i-wrote-a-new-terraform-provider-for-unifi/</link><pubDate>Mon, 18 May 2026 20:51:00 +0000</pubDate><guid>https://badgerops.github.io/why-i-wrote-a-new-terraform-provider-for-unifi/</guid><description>&lt;p&gt;I have been doing more work around local UniFi management lately, and one thing kept bothering me: there was not a Terraform workflow for UniFi that I actually wanted to use.&lt;/p&gt;&lt;p&gt;(Yes, there are several other UniFi providers out there - but they all basically forked the O.G. provider: &lt;a href="https://github.com/paultyng/terraform-provider-unifi"&gt;https://github.com/paultyng/terraform-provider-unifi&lt;/a&gt;, and provide a small amount of additional feature support on top of that [now archived] provider. Moving on.)&lt;/p&gt;</description></item><item><title>Building an In-App Auto-Updater for a Containerized NixOS Deployment</title><link>https://badgerops.github.io/building-in-app-auto-updater-containerized-nixos-deployment/</link><pubDate>Tue, 10 Feb 2026 16:16:00 +0000</pubDate><guid>https://badgerops.github.io/building-in-app-auto-updater-containerized-nixos-deployment/</guid><description>&lt;p&gt;I've been building &lt;a href="https://github.com/BadgerOps/grapheon"&gt;Grapheon&lt;/a&gt;, a network graph analysis and visualization tool, and deploying it as a pair of Podman containers on NixOS. The stack is pretty straightforward: a FastAPI backend, a React frontend, both published as container images to GitHub Container Registry (GHCR), and wired together with a NixOS module that manages everything through systemd services.&lt;/p&gt;</description></item><item><title>Introducing Graphēon</title><link>https://badgerops.github.io/introducing-grapheon/</link><pubDate>Mon, 09 Feb 2026 15:31:43 +0000</pubDate><guid>https://badgerops.github.io/introducing-grapheon/</guid><description>&lt;hr&gt;&lt;p&gt;Long time, no post! (I know, I know.)&lt;/p&gt;&lt;p&gt;So. You're a blue teamer, or a red teamer, or maybe just the person in the room who got volun-told to "map out the network." You fire up nmap, run some scans, maybe throw in some&amp;nbsp;&lt;code&gt;arp -a&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;netstat&lt;/code&gt;&amp;nbsp;output for good measure. And then... you stare at a wall of XML, CSV, and text output trying to mentally correlate which hosts talk to which other hosts, what services are where, and how it all fits together.&lt;/p&gt;</description></item><item><title>Decoding Kubernetes Secrets with jq</title><link>https://badgerops.github.io/decoding-kubernetes-secrets-with-jq/</link><pubDate>Wed, 08 Jan 2025 03:48:03 +0000</pubDate><guid>https://badgerops.github.io/decoding-kubernetes-secrets-with-jq/</guid><description>&lt;p&gt;It's been a while since I've posted, and I generally post about things I've learned / have helped me in my day to day role. This is a quick blog post about easily decoding base64 encoded secrets in kubernetes, using Kubectl and &lt;a href="https://jqlang.github.io/jq/"&gt;jq&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>CVE's</title><link>https://badgerops.github.io/cves/</link><pubDate>Mon, 22 Apr 2024 18:13:35 +0000</pubDate><guid>https://badgerops.github.io/cves/</guid><description>&lt;p&gt;CVE's. Gamified? Maybe. Useful? Maybe. Fast-becoming-too-complex to manage? I think so.&lt;/p&gt;&lt;p&gt;But. This is &lt;em&gt;currently&lt;/em&gt; one of the best ways of unified reporting &amp;amp; alerting of vulnerabilities to a wide audience. There's certainly room for improvement.&lt;/p&gt;</description></item><item><title>Dachau</title><link>https://badgerops.github.io/dachau/</link><pubDate>Tue, 19 Mar 2024 14:00:47 +0000</pubDate><guid>https://badgerops.github.io/dachau/</guid><description>&lt;p&gt;Last weekend, we traveled to the Alpine town of &lt;a href="https://en.wikipedia.org/wiki/Garmisch-Partenkirchen" rel="noreferrer"&gt;Garmisch&lt;/a&gt;, explored the beautiful &lt;a href="https://www.neuschwanstein.de/" rel="noreferrer"&gt;Neuschwanstein Castle&lt;/a&gt;, and on our return trip to Stuttgart, visited the &lt;a href="https://www.dachau.de/en/tourism/concentration-camp-memorial-site.html" rel="noreferrer"&gt;Dachau&lt;/a&gt; memorial.&lt;/p&gt;&lt;p&gt;Words cannot express what we experienced while walking through the memorial site.&lt;/p&gt;</description></item><item><title>Keycloak &amp; Open Shift</title><link>https://badgerops.github.io/keycloak-open-shift/</link><pubDate>Sat, 03 Feb 2024 15:06:07 +0000</pubDate><guid>https://badgerops.github.io/keycloak-open-shift/</guid><description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;Hi there!&lt;/p&gt;&lt;p&gt;So. You're running Open Shift Container Platform 4.12+ and you're wanting to deploy that shiny new Red Hat Keycloak Operator (v22) and set up Oauth from Keycloak into Open Shift. &lt;/p&gt;&lt;p&gt;How do you deploy Keycloak as an IDP for Open Shift? The magic words being "Configure Keycloak as an IDP for Open Shift" [hashtag seo]. &lt;/p&gt;</description></item><item><title>smtp socket: malformed response on a FIPS 140-2 system</title><link>https://badgerops.github.io/smtp-socket-malformed-response-on-a-fips140-2-sytstem/</link><pubDate>Sat, 06 Jan 2024 16:56:24 +0000</pubDate><guid>https://badgerops.github.io/smtp-socket-malformed-response-on-a-fips140-2-sytstem/</guid><description>&lt;p&gt;Ok, this is a very highly specific post - but I hope it is useful for that sysadmin who's tearing their hair out trying to figure out wtf is going on with smtp failing with a vague error message.&lt;/p&gt;</description></item><item><title>Germany</title><link>https://badgerops.github.io/germany/</link><pubDate>Sat, 06 Jan 2024 10:07:21 +0000</pubDate><guid>https://badgerops.github.io/germany/</guid><description>&lt;p&gt;Those of you who've been following my sporadic social media postings will know that the BadgerFam moved to Germany last summer.&lt;/p&gt;&lt;p&gt;I'm doing some work for some people that involves a lot of yaml, stiggin', bare metal -&amp;gt; openshift, fips, fapolicyd, selinux and much more &lt;em&gt;fun. &lt;/em&gt;I'll let you draw your conclusions on the specifics.&lt;/p&gt;</description></item><item><title>About BadgerOps</title><link>https://badgerops.github.io/about/</link><pubDate>Sun, 22 Oct 2023 11:18:39 +0000</pubDate><guid>https://badgerops.github.io/about/</guid><description>&lt;p&gt;BadgerOps is a public field notebook about infrastructure, security, homelabs, open source, and learning by building.&lt;/p&gt;&#10;&lt;p&gt;The articles here usually begin the same way: something did not work, the obvious answer was incomplete, or a small experiment escaped its original scope. I write the result down for the next operator—and for future me, who is remarkably good at forgetting the one command that fixed everything.&lt;/p&gt;</description></item><item><title>Wigle wardrive from Idaho -&gt; D3F C0N</title><link>https://badgerops.github.io/wigle-wardrive-from-idaho-d3f-c0n/</link><pubDate>Sun, 07 Aug 2022 18:55:54 +0000</pubDate><guid>https://badgerops.github.io/wigle-wardrive-from-idaho-d3f-c0n/</guid><description>&lt;p&gt;Long time, no post! &lt;/p&gt;&lt;p&gt;Driving down from Idaho to Las Vegas for Black Hat, BSidesLV and D3F C0N. Figured, hey, what the heck, let's war drive!&lt;/p&gt;&lt;p&gt;I grabbed my trusty old Alfa USB WiFi card, Garmin eTrex Legend &amp;amp; serial adaptor and a unused Raspberry Pi from the box-o-parts, installed Kismet and tossed it in the back of the car. Fingers crossed, I'll actually get some useful AP's scanned during this trip. Lazy-posting my wigle.net deets below, I'll update this post as we get more info...&lt;/p&gt;</description></item><item><title>Export/Clone Linode VPS to AWS EC2</title><link>https://badgerops.github.io/clone-linode-vm-to-aws-ec2/</link><pubDate>Tue, 10 Mar 2020 12:28:15 +0000</pubDate><guid>https://badgerops.github.io/clone-linode-vm-to-aws-ec2/</guid><description>&lt;p&gt;Today we're looking at two methods of migrating a Linode Linux instance to an AWS EC2 instance. We can use &lt;a href="https://www.linode.com/docs/platform/disk-images/copying-a-disk-image-over-ssh/"&gt;the official Linode disk copy guide&lt;/a&gt; as a starting point, but that doesn't really get us all the way there, as we still need to &lt;em&gt;import&lt;/em&gt; that image. This guide will walk you through the following:&lt;/p&gt;</description></item><item><title>Debugging a PHP app in Kubernetes using Telepresence.io</title><link>https://badgerops.github.io/debugging-a-php-app-in-kubernetes-using-telepresence-io/</link><pubDate>Thu, 03 Oct 2019 19:01:21 +0000</pubDate><guid>https://badgerops.github.io/debugging-a-php-app-in-kubernetes-using-telepresence-io/</guid><description>&lt;!--kg-card-begin: markdown--&gt;&lt;p&gt;Hello folks,&lt;/p&gt;&#10;&lt;p&gt;Today we're going to talk about using &lt;a href="https://www.telepresence.io"&gt;telepresence.io&lt;/a&gt; to debug PHP code running in Kubernetes using Telepresence. I'll refer you to the &lt;a href="https://www.telepresence.io/discussion/overview"&gt;Telepresence Introduction&lt;/a&gt; page for an overview of what Telepresence can do for you, but if you're reading this you probably are already aware and just want the example code. So, let's get to it!&lt;/p&gt;</description></item><item><title>Forcing initramfs to load udev 70-persistent-net.rules</title><link>https://badgerops.github.io/forcing-initramfs-to-load-udev-70-persistent-net-rules/</link><pubDate>Wed, 14 Feb 2018 23:09:10 +0000</pubDate><guid>https://badgerops.github.io/forcing-initramfs-to-load-udev-70-persistent-net-rules/</guid><description>&lt;!--kg-card-begin: markdown--&gt;&lt;p&gt;Hello fine readers,&lt;/p&gt;&#10;&lt;p&gt;Chances are you're scouring the googles much like I was all morning trying to figure out how to get &lt;code&gt;update-initramfs&lt;/code&gt; to pull in the &lt;code&gt;70-persistent-net.rules&lt;/code&gt; udev rule.&lt;/p&gt;&#10;&lt;p&gt;You may have stumbled on &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618420"&gt;this debian bug&lt;/a&gt; or &lt;a href="https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1471391"&gt;this ubuntu bug&lt;/a&gt; which coincidently ties in with my &lt;a href="https://blog.badgerops.net/2018/01/16/using-dropbear-ssh-daemon-to-enable-remote-luks-unlocking/"&gt;remote LUKS unlocking&lt;/a&gt; post.&lt;/p&gt;</description></item><item><title>Using Saltstack salt-mine</title><link>https://badgerops.github.io/using-saltstack-salt-mine/</link><pubDate>Mon, 12 Feb 2018 16:10:54 +0000</pubDate><guid>https://badgerops.github.io/using-saltstack-salt-mine/</guid><description>&lt;!--kg-card-begin: markdown--&gt;&lt;h5 id="editinmarchof2020hellothisisoneofmymorepopularpostsevenin2020butimcuriousifyoucameacrossthispostlookingforslightlydifferentinformationthanispresentedifsoshootmeamessageontwitterbadgeropsorsendanemailtoblogbadgeropsnetwithwhatyourelookingforsoicanupdatethispostthankyou"&gt;Edit in March of 2020: Hello! This is one of my more popular posts even in 2020, but I'm curious if you came across this post looking for slightly different information than is presented. If so, shoot me a message on twitter: &lt;code&gt;@badgerops&lt;/code&gt; or send an email to &lt;code&gt;blog@badgerops.net&lt;/code&gt; with what you're looking for so I can update this post! Thank you.&lt;/h5&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Today we're going to talk about using salt-mine to help gather information from salt minions. This is a sister post to &lt;a href="https://blog.badgerops.net/2018/02/09/using-the-saltstack-pyobjects-renderer/"&gt;Using the #!pyobjects renderer&lt;/a&gt; as we're consuming mine data to create a custom hosts file.&lt;/p&gt;</description></item><item><title>Using the Saltstack pyobjects renderer</title><link>https://badgerops.github.io/using-the-saltstack-pyobjects-renderer/</link><pubDate>Fri, 09 Feb 2018 22:38:11 +0000</pubDate><guid>https://badgerops.github.io/using-the-saltstack-pyobjects-renderer/</guid><description>&lt;!--kg-card-begin: markdown--&gt;&lt;p&gt;I've been using the default yaml/jinja combo for most of the time that I've used Saltstack, which can get really frustrating when you're moving away from simple templating and actually starting to develop code in jinja. The biggest issue here: jinja is a &lt;em&gt;templating&lt;/em&gt; engine, not a programming language. It is not easy to debug, and frankly, it is incredibly ugly!&lt;/p&gt;</description></item><item><title>Using Dropbear ssh daemon to enable remote LUKS unlocking</title><link>https://badgerops.github.io/using-dropbear-ssh-daemon-to-enable-remote-luks-unlocking/</link><pubDate>Tue, 16 Jan 2018 16:13:06 +0000</pubDate><guid>https://badgerops.github.io/using-dropbear-ssh-daemon-to-enable-remote-luks-unlocking/</guid><description>&lt;!--kg-card-begin: markdown--&gt;&lt;p&gt;Wow, that title is a mouthful - but if you're here, chances are you've been scouring the internet trying to figure out how to get remote LUKS unlock enabled, much like I was a few weeks ago. I finally got all the different parts working as expected, so here you go, the definitive guide to getting remote LUKS unlock enabled over SSH. (&lt;em&gt;definitive for my specific circumstances, with Ubuntu servers both on metal, and virtual, YMMV&lt;/em&gt;)&lt;/p&gt;</description></item></channel></rss>