These are my notes on upgrading a Raspberry Pi 3b+ operating system and then the installation of Pi-Hole for my home network.
Updating The OS
I upgraded the OS running on an old Raspberry Pi 3b+ from Raspbian to Raspberry Pi OS (Debian buster to bullseye basically). Because this was an older Raspberry Pi than the 4’s I’ve been working with, the update took a good long time with lots of stepping away to do house projects while the updating process proceeded. I followed the steps documented here: https://www.linuxuprising.com/2021/11/how-to-upgrade-raspberry-pi-os-10.html . I will stress that you follow all the steps, especially the step calling for the installation of GCC 8 support libraries. Once completed the system will be running Raspberry Pi OS bullseye.
Updating a Raspberry Pi operating system on this version of the Raspberry Pi is a long, slow process requiring a lot of patience to finish. Unless you have a special environment you want to leave in place rather than trying to find and save all the important bits, you’re better off downloading the latest image, flashing a new boot micro SDHC/SDXC card with it and then customizing it to your needs. I had a complex, scattered environment I wanted to bring forward so I gave the update a shot. That’s the first and last time I’ll ever do that. From here on out I’ll always flash for a fresh, clean OS and then set everything up; it’s so much faster.
Disabling ConnMan DNS
After checking that the update was functioning correctly I installed Pi-Hole. But before you do that, we need to take a moment and discuss ConnMan, and how to disable a part of it that starts its own process and sits on port 53, the DNS port.
CommMan is a new package that contains tools and services to manage all the various communications resources. It’s intended to run on embedded systems, which are usually like the Raspberry Pi. Its laudable goal is to act as a central control system, using as minimum of system resources to do its job. It sounds all laudable in theory, but in practice under bullseye (in which it showed up) it was nothing but a pain, taking over port 53 for DNS and preventing Pi-Hole’s tools and services from working properly.
In order for the installation of Pi-Hole to be a complete success, you need to perform the following actions.
First, check to see if connmand
is running.
$ sudo lsof -i -P -n | grep LISTENconnmand 364 root 13u IPv4 13435 0t0 TCP 127.0.0.1:53 (LISTEN)connmand 364 root 14u IPv6 13439 0t0 TCP [::1]:53 (LISTEN)sshd 528 root3u IPv4 10693 0t0 TCP *:22 (LISTEN)sshd 528 root4u IPv6 10695 0t0 TCP *:22 (LISTEN)lighttpd 1279 www-data4u IPv4 17674 0t0 TCP *:80 (LISTEN)lighttpd 1279 www-data5u IPv6 17675 0t0 TCP *:80 (LISTEN)cupsd 8747 root6u IPv6 128149 0t0 TCP [::1]:631 (LISTEN)cupsd 8747 root7u IPv4 128150 0t0 TCP 127.0.0.1:631 (LISTEN)
Unfortunately in this example it is. So now we have to disable connmand so it won’t start and take over port 53.
Under /etc/systemd/system
create a new directory named connman.service.d
.
cd into connman.service.d
and create the file disable_dns_proxy.conf
.
Open that file with a text editor and add the following lines:
[Service]ExecStart=ExecStart=/usr/bin/connmand -n --nodnsproxy
I’m sure there is a more “elegant” way to do this, but I didn’t find any “elegant” help, only the brute force steps I’ve just outlined. Once you’ve saved the file reboot the Raspberry Pi, then check again for connmand:
$ sudo lsof -i -P -n | grep LISTENcupsd 508 root6u IPv6 11622 0t0 TCP [::1]:631 (LISTEN)cupsd 508 root7u IPv4 11623 0t0 TCP 127.0.0.1:631 (LISTEN)sshd 539 root3u IPv4 11651 0t0 TCP *:22 (LISTEN)sshd 539 root4u IPv6 11653 0t0 TCP *:22 (LISTEN)lighttpd 573 www-data4u IPv4 12791 0t0 TCP *:80 (LISTEN)lighttpd 573 www-data5u IPv6 12792 0t0 TCP *:80 (LISTEN)pihole-FT 618 pihole5u IPv4 13654 0t0 TCP *:53 (LISTEN)pihole-FT 618 pihole7u IPv6 13656 0t0 TCP *:53 (LISTEN)pihole-FT 618 pihole 10u IPv4 11828 0t0 TCP 127.0.0.1:4711 (LISTEN)pihole-FT 618 pihole 16u IPv6 12897 0t0 TCP [::1]:4711 (LISTEN)
The reason you’re seeing pihole-FT in the output above is because I had to figure all this out after installing Pi-Hole and not seeing the Pi-Hole FTL service running. I felt it was important to put these steps first.
Installing Pi-Hole
The instructions are here ( https://github.com/pi-hole/pi-hole/#one-step-automated-install ) and are clear enough. I chose Alternative Install Method 1 because the one-step install refused to work for me. Alternative Install Method 1 has you clone the Github repo locally, then run the installation out of there. Not a problem, especially if you want to look at the code a bit and see what it’s doing.
I chose to use the wlan0 interface, and I also made sure that the IP address was static on my home router as well as defined within the Raspberry Pi. During installation the installer will warn you to make sure your IP is static and will survive a reboot. I chose WiFi because in the next stage of testing I wanted the Raspberry Pi on my desk, instead of next to my router. When I’m ready to finish up I’ll physically plug the Raspberry Pi directly into the router and make the necessary changes to the software, specifically the interface being used.
After all that work, this is what the Pi-Hole dashboard looks like on my home Raspberry Pi.
Everything seems to be working on the dashboard as it is. When FTL isn’t working, sections of the dashboard show a constant spinning busy wheel, and some sections aren’t even displayed, indicating the little local website can’t get status information from a non-running FTL to display.
After I finally get this integrated into my home network and running, there’ll be more to document.
You must be logged in to post a comment.