Curséd Homelab part 1: I never throw away working hardware, but if I call this retrocomputing it'll make my friends feel old
by anne-decusatis
Build log: PiHole on an original Model B Raspberry Pi bridged through a Linksys WRT54GL 1.1
At our house, before we moved, the PiHole setup was relatively simple. My Raspberry Pi (2012) was connected to a Google Home Wifi point (2022) in my office, I set a static IP for it in the Google Home app and also set that IP as our DNS resolution. The Google Home Wifi point (2022) in the dining room was wired into the router provided by CenturyLink in the one corner of the house (1901) that had cable connections. I could even plug in my USB Brother printer (2012) and get wireless printing if I wasn’t printing a PDF too complicated for the Raspberry Pi to process.
In our new apartment (2018), we were provided a Rogers wifi router (2025), which plugs into a modem which is part of the entryway closet. There is not anywhere in the entryway closet where I can plug in my own router, nor anywhere I can reach an ethernet cable to that I can plug in something without tripping on the cable. I guess I could unplug their router to splice in a power strip but there’s still a lot of boxes in the closet and it didn’t seem worth it.
The original Raspberry Pi, which has moved with me from residence to residence 9 times over the last 13 years, doesn’t have a wifi antenna, just ethernet. But what’s a router but a wifi antenna + an ethernet port? Why can’t I go from wifi-in-the-world to ethernet-plugged-into-pi, instead of the other way around?
Now might be a good time to mention that my parents, when I was in my teenage years, spent a lot of time talking about something called “software defined networking.” My dad worked for IBM at the time and had a bunch of patents and stuff, idk, and my mom more or less wrote her doctoral thesis on it in my senior year of high school. Unfortunately since I was a teenager in 2011 I didn’t learn anything beyond a one-sentence summary that “software defined networking is when you use software to determine network structure instead of only plugging things in.” The good news is that that’s actually still true!
Anyway, DD-WRT used to call this Client Bridge but now calls it Station Bridge, for reasons I don’t understand even though I am no longer a teenager. https://wiki.dd-wrt.com/wiki/index.php/Client_Bridge.
This is where the title of the post comes in
We still have our Google Home Wifi points but they’re so user friendly that they need to be plugged into the router to do the initial app setup. As stated above: there is not a way to do this in our apartment.
Amazingly, even though a good chunk of what we own is still in boxes, the box containing a Linksys WRT54GL router (2005ish, but this one was purchased circa 2011) was next to the TV (because it contained some Wii peripherals, stay tuned for Part 2 if I get around to it). You know the Linksys WRT54GL, blue and black plastic, two antennas. Think of a router in your head and if you’re a software person chances are good it’s this one.
I have never actually flashed DD-WRT onto this router but I have wanted to since I was in college, and bought it specifically for its compatibility. It’s obsolete now, of course, it doesn’t support higher frequency bands I think. I didn’t think I needed that for this purpose when I started this project.
The DD-WRT documentation has arguably gotten worse since I last looked it up a decade ago. Links to old wikis, links that lead you in circles. Warnings on some pages not to trust the other pages. Thankfully I have reached a point in my life where even if this doesn’t work I still have internet access.
Hurdle 0: Powering the Raspberry Pi
The Raspberry Pi is powered by micro-USB and I can’t find an old enough cell phone charger to connect my micro-USB to USB-A cable into the wall plug with. I could find a USB-A to USB-C adapter that came with a newer phone, and a USB-C to wall plug that also came with that phone. So it’s daisy chained.
Hurdle 1: The Raspberry Pi can’t be headless right now
The Raspberry Pi connects via HDMI to my television. It takes about 5 minutes to turn on (probably because I have a 40” TV and it has very little brain) and needs a mouse and keyboard attached to use it if it’s not connected to the internet, which, the whole point of this rigamarole is to have it connected to the internet at the end of this, which is to say I can’t SSH in yet.
The keyboard I am using is, I am not joking, the first keyboard I ever owned (1999). It is Barbie themed and came with the first PC I owned Still works great!
I also have a mouse I acquired in 2020, in a work from home induced panic. The AA battery was dead though when I found it with my work stuff (I’m using a Ploopy Adept Trackball for work this past year instead), so I stole one from the wiimote which I replaced the batteries on this past weekend.
Hurdle 2: Transferring files to the Raspberry Pi
To flash DD-WRT onto a router you need a computer with internet to download the firmware, and you need to physically plug it into that computer. My daily driver computer right now is a M1 Mac (2021) which does not have an ethernet port or a USB-A port to plug in a flash drive (see Hurdle 0 for what I’m doing with my adapter). The Raspberry Pi has an SD card, maybe I can download the file on my actual computer and then copy it via the SD card slot?
Bad news, Macs don’t support ext4. I think I set up the pi with a Linux laptop. Only the /boot partition is showing up, not the partition where I keep the files.
Here’s some instructions I found online for getting Mac ext4 support:
brew install macfuse
brew install ext4fuse # does not work!
https://www.jeffgeerling.com/blog/2024/mounting-ext4-linux-usb-drive-on-macos-2024 recommends compiling ext4fuse from source as a workaround, which I have no interest in doing.
The /boot partition is fat32 formatted and has over 1.7MB of space on it left though so I’ll just zip the file and drop it there to transfer it over.
Hurdle 3: USB hub doesn’t work
One of my USB-A out to 4xUSB-A in hub doesn’t work between my keyboard and mouse and the raspberry pi. It worked fine with the Wii the other day… Fine, I’ll plug them in directly and hope I don’t need to plug any other USBs in.
Hurdle 4: Chromium doesn’t work
I copied and unzipped the dd-wrt binary from /boot to the ext4 location in the terminal, but I can’t go to the Web UI for the router in the default web browser because when I open the default web browser it says “Chromium is not supported for the Model B”
Attempted solution 1: Download Epiphany for armhf at http://archive.raspberrypi.org/debian/pool/main/e/epiphany-browser/, delete the dd-wrt binary from /boot to make room, copy Epiphany onto the SD card’s /boot partition. Reboot the pi, open the terminal, move epiphany-browser’s .deb from /boot to ~, sudo apt install ./epiphany.deb
Doesn’t work due to dependency requirements not being met, also it’s trying to pull from sources which isn’t going to work. sudo dpkg -i ./epiphany.deb
is the command I wanted.
Atempted solution 2: Same, but with the dependencies downloaded too. epiphany-browser-data, libavahi-gobject0, libgnome-desktop-3-2, libwebkitgtk-3.0-0 (found in the archive under w for webkit) At this point I got tired of restarting the pi to put things on its SD card and unplugged a second USB-A to USB-C adapter from my wife’s headset to connect a flash drive to my Mac, and unplugged the mouse to plug in the USB.
Attempted solution 3: Give up and install links from https://packages.debian.org/bullseye/armhf/links/download; requires liblz1 too Fails with “Illegal instruction” at runtime; turns out debian armhf is arm7 and the original pi is arm6 https://forums.raspberrypi.com/viewtopic.php?t=163212 dpkg -P can remove
Attempted solution 4: Google web browser for raspbian
Dillo is installed by default and runs when you invoke the terminal command dillo
https://forums.raspberrypi.com/viewtopic.php?t=330164
Interlude: I swear I’m having fun
When I was that teenager in 2010 ignoring my parents’ invaluable software-defined networking knowledge, I handwrote the steps to installing Arch Linux in my composition notebook journal and then used Arch on my Thinkpad T42 (2004) for years. I also tried this with Gentoo but wasn’t as successful. People find all kinds of programmatic things soothing; for some people it’s baking, for some it’s playing Candy Crush, and for me it’s installing Linux.
Hurdle 5: Can’t find the router’s IP
Internet says it should be 192.168.1.1 but that page never loads even after a hard reset of the router, and ping to it reports packet loss.
ifconfig
says eth0 is actually 192.168.5.5. It takes me half an hour of running random commands (and eventually, trying to load 192.168.5.5/admin in the UI) to realize I manually set the raspberry pi to the static IP 192.168.5.5 when I was in the old house, and don’t remember what I did to do that, but it’s probably an issue that it’s .5.5 and trying to access .1.1. Fix: manually change the eth0 settings to .1.5 and the listed router location to .1.1, and reboot the pi. Seven minutes later when the pi reboots and is brought onto the same subnet, it’s working.
Hurdle 6: Linksys config page requires JavaScript to display correctly
…and Dillo doesn’t support JavaScript.
There is another way to do firmware updates for routers, it’s called TFTP, and if you have a TFTP server you can use it to PUT firmware onto an embedded device. Unfortunately this is really difficult to look up since a Raspberry Pi is also an embedded device that can be flashed that way. I downloaded and searched through Package files found in sources.list on my Raspberry Pi install and eventually found a .deb for tftp-hpa that I could install with dpkg.
Hurdle 7: TFTP won’t install
I walked away partway through the dpkg install (it’s slow on this hardware…) and found that my pi was asking me to log in and tftp wasn’t in my path when I returned. So I ran the same install command again. It turns out installing tftp-hpa with dpkg is a reproducible way to make either the entire pi or possibly just Xorg restart. This is concerning, I guess, I don’t think that’s supposed to be possible, but ok whatever. It was running pretty slow after this so I unplugged and replugged it and noticed that it was starting tftpd in the boot services on that full restart, so I guess it made it partway through before crashing.
Next I tried to purge the existing install, swap to a tty that isn’t a terminal app in the UI, and run it again to see if it’s only crashing X or if something else is crashing too. That still crashed to the UI login!
At this point, after three days of effort, it’s time to break out an actual Linux laptop with an ethernet port. I chose the most recent one I had, a Thinkpad T270 (2017). Bonus, I found a USB-C Thinkpad charger in that bag despite not owning a USB-C Thinkpad. Maybe it’s my wife’s? Maybe I stole it from a previous job by mistake???
A digression on DD-WRT vs OpenWRT
There is a large warning on the OpenWRT wiki page for my router that it is not supported on builds past 2022, and my specific model is only proven to work on older versions than that: https://openwrt.org/toh/linksys/wrt54g. They recommend building custom from source if you want features newer than that, which is not what I want to do on my first time flashing a router, but might be fun next time.
Presumably dd-wrt doesn’t have this warning because they are not nearly so good at documentation, and anyway their website doesn’t seem to have been updated since 2022.
Anyway OpenWRT doesn’t have a convenient version that’s small enough to fit on my 4MB router so I went with dd-wrt micro first. It took like 5 minutes to flash from my Linux laptop and once I restarted the router it did the right password-reset prompts.
Hurdle 8: I still can’t reach the internet
Our Rogers router is set up by default on 10.0.0.1 and the default client bridge instructions for dd-wrt assume you’re on 192.168.1.1. So maybe it’s subnets? I tried to change this Rogers-side but the Canada Rogers Xfinity app is not available for my US Google Play account (separate issue that I don’t know how to update the country there, it’s because I’m in a US-based family group that I don’t own) and it seems the admin password was set by the tech who gave us the modem and he didn’t tell it to me, and the physical box with a factory reset button is in a closet that is, unfortunately, still full of boxes.
Hurdle 9: Must move boxes around in the closet to reach the router
We went to Ikea and got some storage….
Hurdle 10: Rogers wifi does not let you set the wifi advanced settings without the app even after a hard reset
I factory reset the wifi and then was able to reset the admin password the way that the internet said I should. Unfortunately the settings are greyed out for the wifi as they are managed “automatically” through the app. I did learn that the Rogers router is broadcasting 2.4ghz, 5ghz, and 6ghz. I also learned that it’s using WPA3 security only, even on the 2.4ghz band that I would need to connect to from the router. So that’s probably why I can’t connect from the WPA/WPA2 only router.
Hurdle 10: Maybe a newer dd-wrt has WPA3 support?
Buried in a thread I found when I did a Google search for “ddwrt wrt54gl eol” is this gem:
“Once again a user doesn’t know where to look for firmware builds
https://download1.dd-wrt.com/dd-wrtv2/downloads/betas/ “
source: https://forum.dd-wrt.com/phpBB2/viewtopic.php?t=335529&sid=d9cb1607bbeaf134850d56184969008b
Personally I think if the home page of your router website links prominently to a page where you can download the latest build for your router, the actual latest stable build for your router should not be something other than that in a folder labeled “betas”. But I flashed the April 21, 2025 build onto the router and there wasn’t WPA3 support because it was still based on a proprietary broadcom driver that didn’t have it.
Hurdle 11: Fine maybe OpenWRT has WPA3 support?
It does, but only in version 19 or newer by default. I flashed the router with version…. 8, since 10 had some warnings about being large enough for the router to be low on space and I thought I’d need the space, and tried to install the SSL package that I thought might be required for WPA3 compatibility for that version by hand, and didn’t have enough free space to install it.
Next steps
Unfortunately I think this is the end of the line for the WRT54GL. I can’t get WPA3 support on it without probably some sort of hardware mod to add additional storage, which I am not really prepared to do.
As for the rest of the home lab plans:
- Reinstall Linux on my Wii, they’ve got some new features and maybe Python will work on it this time. I think they swapped from being Void Linux to Arch Linux based sometime after I installed mine. Alternatively maybe NetBSD would be better documented than just the random wii linux discord that you have to join to get the instructions. https://netbsd.org/ via https://blog.infected.systems/posts/2025-04-21-this-blog-is-hosted-on-a-nintendo-wii/
- I’m thinking about all the other old hardware I have that I thought had reached an end of life. Maybe I can use my iPod Classic from high school where the headphone jack came loose and stopped working as some kind of auxiliary storage and screen display if I can find a charge cable for it? I already put Rockbox on it years ago. I might also still have a Kindle Keyboard with approximately no battery life, though I am unclear on if that’s the one I broke the screen on or if it’s something else I did that to.
- I told a new friend about this project & it turns out they are actually an expert in embedded systems. They showed me around their extremely cool 80s British computing collection, and just straight up gave me a spare Raspberry Pi 3B and some kind of gumstix board that I think they scavenged from e-waste (“a robotics team was getting rid of a whole bunch of these, have one from my collection”). I am excited to think about what the most cursed thing I can do with these in my apartment is. I’m pretty sure the gumstix board has a wifi antenna so maybe that can attach to my USB printer? The Raspberry Pi 3 is actually genuinely useful and would almost certainly work with the printer, so I have to be sure to do something else with it that does not play to its strengths.