Running pi-hole on the BeagleBone Black
The Beagle Bone Black comes loaded with a Swiss Army Knife collection of programs that run on boot. NodeRed, Cloud9, SoftAP, nginx, apache2, the list goes on. This is all fine for fresh-out-of-the-box exploration but gets very tedious when trying to extend the BeagleBone's functionality, say by installing pi-hole.
Running the pi-hole
installer on a default BeagleBone Black installation (beaglebone 4.14-49-ti-r54
) will result in several cryptic failures:
pihole-FTL[2168]: dnsmasq: cannot open or create lease file /var/run/dnsmasq.leases
pihole-FTL[683]: dnsmasq: illegal repeated keyword at line 9 of /etc/dnsmasq.d/SoftAp0
These errors can be resolved by changing USE_GENERATED_DNSMASQ=yes
to USE_GENERATED_DNSMASQ=no
in /etc/default/bb-wl18xx
and commenting out L756 (echo "cache-size=2048 >> ${wfile}
) and L768 (echo "dhcp-leasefile=/var/run/dnsmasq.leases" >> ${wfile}
in /opt/scripts/boot/am335x_evm.sh
The BeagleBone will need rebooted after making these changes. dnsmasq
should now show no errors with # service dnsmasq status
. However, pihole-FTL
will likely show an error: dnsmasq: cannot open or create lease file /var/lib/misc/dnsmasq.leases
. This file likely exists and does not belong to the pihole
user. Remove it and recreate it:
# rm /var/lib/misc/dnsmasq.leases
# touch dnsmasq.leases
# chown pihole:pihole dnsmasq.leases
Now, pi-hole
will try to launch on port 80, but this in use by some of the default services on the BeagleBone. pi-hole
can be modified to run on another port by changing the port number in /etc/lighttpd/external.conf
: server.port = 8081
and restarting the lighttpd
service.
However, if it is vital that pi-hole
should run on port 80 and the other services on the BeagleBone are also necessary (they cannot be brute-force disabled), the default BeagleBone services can be moved to a different port.
First, modify nginx
to run on a new port by modifying /etc/nginx/sites-enabled/default
and changing all instances of 80
to a new port, say 8080
.
Next, change apache2
's port by editing /etc/apache2/ports.conf
to Listen 8080
.
The BeagleBone runs a bonescript server via nodejs. In theory, this server can be configured via /etc/default/bonescript
but there are no readily available examples of this. Instead, the server can be hard-coded to avoid port 80 by editing L44 of /usr/local/lib/node_modules/bonescript/src/bonescript.js
.
bonescript
also commandeers port 80 via systemd. Modify /lib/systemd/system/bonescript.socket
to use port 8080
as well. The bonescript
service will need reloaded via # systemctl daemon-reload
.
Now, restarting the pihole-FTL
service should result in a functioning instance on the BeagleBone Black.
Did you just save bandwidth, reduce ads, and increase privacy because of this post? Consider saying thanks by using my Amazon Affilliate URL and help to keep this site ad & analytics free.