A Tour of My Homelab, Part The First: Why It Exists and What It’s Built On

It all started in 2009, when I bought a Drobo.

The Drobo was connected to my definitely-not-a-Hackintosh and contained a carefully curated collection of completely legitimate media filesLinux ISOs, which were being delivered by Serviio to my Panasonic Smart TV. It wasn’t elegant, but it worked. Mostly.

That was the whole setup: one slightly cursed desktop, one weird little storage cube, one TV, and some media server software that I am fairly sure was held together with good vibes and Java.

At the time, that felt like the dream. I could put files in one place and watch them somewhere else. Incredible. The future had arrived, and it was buffering in 720p.

Since then, things have spiralled a little. The Drobo became a dedicated NAS. The media server became Plex plus all the relevant *arrs. The standalone desktop became actual repurposed small form factor PCsdedicated servers. Then, blink and I almost missed it, the network became something that needed a diagram.

At some point there was internal DNS, certificates, and VLANs. Then monitoring, because apparently it is not enough for things to break. I needed a dashboard to tell me something was broken.

Eventually, the lab stopped being just the stuff in my house. Throw in an IRC bouncer, an application server, and a web server as well, because apparently the monster needed external limbs.

That is where the homelab became less of a cupboard full of computers and more of a demonic creature with multiple tentacles.

None of this was planned. There was no grand architecture. No design document. No carefully staged roadmap from “watching TV shows on an early 21st century flat screen” to “maintaining a distributed private infrastructure environment with identity, naming, trust, reverse proxies, backups, telephony, databases, and custom monitoring.”

It just happened. One server became several. One “the Wi-Fi is down” became “have you tried restarting the management plane?”

Snow Leopard in UTM on an Apple Silicon Mac

In 2021, I posted about getting Snow Leopard installed in UTM. Unfortunately, at that time I didn’t have a Apple Silicon Mac to test on. In 2023, when I got my hands on one, I found that Snow Leopard doesn’t really like QEMU’s TCG emulation, resulting in a commpage no match for last kernel panic on boot.

I thought it was my white whale, but 2025 was the year in which I would it it done.

So, I kicked off the year by doing some digging in the UTM issues and Discord, as well as various other QEMU / KVM-related Github projects until I found royalgraphx/LegacyOSXKVM project, which provides instructions to get legacy versions of Mac OS X up and running on QEMU via KVM. They had a particularly interesting guide on how to get Snow Leopard running on QEMU under Apple Silicon. Their findings are:

For now though, all I really need to explain is that for some reason the various KP’s that users experience when attempting to first boot or install Mac OS X Snow Leopard on M-Series Macs such as the Commpage or Installer KP are results of some weird TCG/32-Bit emulation errors. As well as OS X itself having trouble with the emulated TCG from ARM64 hosts. I’ve observed that x86_64 hosts using TCG (or commonly known as simply using emulation and not virtualizing) do not experience such errors. Leads me to believe that the installer uses various older parts for 32-Bit cryptography while installing, and the commpage error mainly being the CPU being weird, as in, how it appears to the guest machine.

I was able to get it up and running with no problems at all in Qemu upstream installed via Homebrew. But I still couldn’t get it to boot in UTM – I was getting general protection kernel panics. I did some deep dives, looking at the parameters that was working in Qemu but failing with UTM.

I took a closer look at the QEMU arguments being passed by LegacyOSXKVM and what was being passed by UTM. And, I was able to get Snow Leopard working on UTM.

To Izzy

Seventeen years, a life well spent,
In every home where Adam went.
From place to place, she made it clear,
Izzy’s heart was always near.

With shoes to sniff, and sun to chase,
Her favorite spots, her special place.
A sip of milk, a treat or two,
Her simple joys, forever true.

Through quiet nights and busy days,
She followed life’s most winding ways.
In Carindale, she settled in,
A loyal friend through thick and thin.

But time, it whispered, soft and slow,
It’s time to let the old cat go.
So, on the grass, beneath the sky,
Adam whispered his goodbye.

One last sunbeam, warm and bright,
A gentle purr, a peaceful light.
Now raise a glass, in memory—
To Izzy’s life and legacy.

Single-Team AFL Calendar Generator

One of the feature requests for the AFL Calendar Generator I received from @joshgelfand on Mastodon was to only show a single team’s games, rather than all games.

So I implemented it.

BIND Secondary for Active Directory DNS on Red Hat-compatible Linux

My DNS is hosted locally, on-prem, behind a consumer-grade internet connection. When my internet connection at home goes down, my off-prem cloud-hosted servers that rely on my Active Directory DNS can’t communicate with eachother.

Rather than having a cloud-hosted Windows Server installation primarily to host DNS, why not create a BIND secondary that replicates from AD DNS?

AFL Calendar Generator

Do you get frustrated having to go to the AFL app or the TV guide to work out when the footy is on? Every year are you manually entering footy games in to your phone calendar?

Why not do it automatically?

Remember when I was in the App Store?

The Apple App Store turned 15 this week, and I just happened to come across some screenshots of when an app I built was featured in the Australian store.

Moving (back) to Grav

So I used to use Grav on my website a handful of years ago, but I gave it up because I percieved it to be “too slow”. To be honest, that was me just not really understanding how it works. So, when I gave it up I went back to MovableType (yeah–2005 called!).

My MovableType installation is currently running in my home lab, on Windows Server behind IIS, authenticating against my Active Directory and writing to my clustered Microsoft SQL Server database.

Why? Because I could dammit.

But, MovableType is actually a bit shit, and hasn’t really kept up with modern expectations.

10 April 2022: Oops – it looks like commenting was a bit broken thanks to CORS and friends. Commenting is now working again, as expected.

How to create Mac OS X 10.6 Snow Leopard virtual machine in UTM

UTM is a frontend for QEMU that works on Mac and iOS.

I’ve been working to get Snow Leopard running in UTM (by extension, it would probably also work in QEMU, too). Here’s how to do it.

Updates

7 March 2023: This is confirmed broken on M1 or M2 Apple Silicon Macs, exhibiting a commpage no match for last kernel panic. I just got an M2 MacBook Pro, so stand by while I test. See updates on the comments.

18 January 2025: Snow Leopard is now booting in UTM on Apple Silicon Macs! I wrote up a guide.

Transition complete!

Over the past few months I’ve been working to start self-hosting more of my stuff at home. I’ve got myself going with kind of a mini-home lab–more about that in another post.

Anyway, I’ve finally changed CMS, changed web server platform and this site is officially hosted by a computer in my cupboa...