All posts in DIY

I have a love-hate relationship with ad blockers. On the one hand, I despise the obnoxious ads that are forced down our throats at what seems like every turn. On the other hand, I appreciate the need for publishers to earn a living so that I can consume their hard-earned work for free. Somewhere in the middle is a responsible approach. If they can do it in 140 characters and a link, I’m happy. That is all. No images. No video. No script. No HTML tags. No tracking.


Which brings me to Pi-hole. I’m going to keep the intro bits as brief as possible but, in a nutshell, Pi-hole is a little DNS server you run on a Raspberry Pi in your local network then point your router at such that every device in your home resolves DNS through the service. It then blacklists about 130k domains used for nasty stuff such that when any client on your network (PC, phone, smart TV) requests, the name just simply doesn’t resolve. Scott Helme put me onto this originally via his two excellent posts on Securing DNS across all of my devices with Pi-Hole + DNS-over-HTTPS + and Catching and dealing with naughty devices on my home network. Go and read those because I’m deliberately not going to repeat them here. In fact, I hadn’t even planned to write anything until I saw how much difference the service actually made. More on that in a moment, the one other bit I’ll add here is that the Raspberry Pi I purchased for the setup was the Little Bird Raspberry Pi 3 Plus Complete Starter Kit:

Little Bird Raspberry Pi 3 Plus Complete Starter Kit

This just made it a super easy turnkey solution. Plus, Little Bird Electronics down here in Aus delivered it really quickly and followed up with a personal email and a “thank you” for some of the other unrelated stuff I’ve been up to lately. Nice 🙂

I went with an absolute bare bones setup which essentially involved just following the instructions on the Pi-hole site (Scott gets a bit fancier in his blog posts). I had a bit of a drama due to some dependencies and after a quick tweet for help this morning followed by a question on Discourse, I was up and running. I set my Ubiquiti network to resolve DNS through the Pi and that’s it – job done! As devices started picking up the new DNS settings, I got to see just how much difference was made. I set my desktop to manually resolve through Cloudflare’s whilst my laptop was using the Pi-hole which made for some awesome back to back testing. Here’s what I found:

Let’s take a popular local Aussie news site, Here’s what it looks like with no Pi-hole: without pi-hole

In the grand scheme of ads on sites, not too offensive. Let’s look at it from the machine routing through the Pi-hole: with pi-hole

Visually, there’s not a whole lot of difference here. However, check out the network requests at the bottom of the browser before and after Pi-hole: network without pi-hole network with pi-hole.jpg

Whoa! That’s an 80% reduction in network requests and an 82% reduction in the number of bytes transferred. I’d talk about the reduction in load time too except it’s really hard to measure because as you can see from the waterfall diagrams, with no Pi-hole it just keeps going and going and, well, it all gets a bit silly.

Let’s level it up because I reckon the smuttier the publication, the bigger the Pi-hole gain. Let’s try these guys: with no pi hole

And for comparison, when loaded with the Pi-hole in place:

And now – (drum roll) – the network requests for each: network with no-pi-hole network with pi-hole

Holy shit! What – why?! I snapped the one without Pi-hole at 17.4 mins after I got sick of waiting. 2,663 requests (one of which was to Report URI, thank you very much!) and 57.6MB. To read the freakin’ news. (Incidentally, in this image more than the others you can clearly see requests to domains such as failing as the Pi-hole prevents them from resolving.)

After just a few quick tests, I was pretty blown away by the speed difference. I only fired this up at about 8am this morning and I’m just 9 hours into it but already seeing some pretty cool stats:


It’s also flagging a bunch of things I’d like to look at more, for example my wife’s laptop being way chattier than everything else:

Top clients

Top blocked clients

Wife's laptop requests

So in summary, no compromising devices, no putting your trust in the goodwill of an extension developer, no per-device effort, the bad stuff is blocked and the good stuff still works:

Sponsor message still works

Lastly, Pi-hole has a donate page and this is one of those cases where if you find it as awesome as I have already, you should absolutely show them some love. Cash in some of that time you’ve reclaimed by not waiting for rubbish ads to load 😎

Project taken from:


Instead of letting Berryboot download operating system image files straight from the Internet, it is also possible to have a local repository in your own network.

Steps required:

1) Obtain image files

Download the Operating System image files you wish to offer on your local repository from the Internet to your local computer.

2) Put the downloaded files on a Windows file sharing (CIFS) network share

3) In the Berryboot “Add OS” Windows, press the “Network settings” button, go to the tab “repository” and enter the IP-address of your server, and the name of the share, in the format:

If no username and password is provided, Berryboot will try to login to the network share as “guest”
The settings are saved in berryboot.ini on the FAT partition of the SD card.

Berryboot screenshot

For people short on SD cards: Berryboot is a simple boot selection screen for ARM computers like the Raspberry Pi, that allows you to put multiple Linux distributions on a single SD card.
In addition it allows you to put the operating system files on an external USB hard drive instead of on the SD card itself.

Download link Berryboot for the original Raspberry Pi and Pi Zero:
sha1sum: f8cfc1b4f57e0b6886569091ca7e277d33ffee0f

Download link Berryboot for the quad-core Raspberry Pi 2 and Pi 3:
sha1sum: 7f44898dcca58cd4c1562273a44121c90e3543ab

To install: extract the contents of the .zip file to a normal (FAT formatted) SD card, and put it in your Raspberry Pi. This can be simply done under Windows without any special image writer software.
Once you start your Pi it will start an installer that reformats the SD card and downloads the operating systems files from the Internet.


→ Moved to: Berryboot Changelog


If your Pi is connected to the Internet BerryBoot will try to detect your location based on your IP-address, and set the right timezone automatically. Verify that it is correct and press “ok”

Select where you want to store the operating system files, and press “format”
You can choose to install the operating system files:

Be aware that if you choose an external drive, the files of the operating system will be stored there, but you still need to keep the SD card in the Pi to boot from.

WARNING: all existing files on the disk will be erased.

Select which operating system you want to install. You can add more later.

It will download the files from the Internet automatically.

In the Berryboot menu editor you can install more operating systems, rename them, delete them, etc. Press “exit” to exit the editor and start using the operating system you installed.

HDMI CEC support

When attached to a HDMI TV, you can also use the arrows on your TV remote to select an operating system to boot, instead of using your keyboard or mouse.

Available options in menu editor

  • “Add OS” (or CTRL+A on keyboard, red button on TV remote)
    Single click to download additional operating systems from the Internet.
    Hold down your mouse button over the “Add OS” button and select “copy OS from USB stick”, to install an operating system saved on USB stick.
  • “Edit” (or ENTER on keyboard)
    Change the name of the selected operating system.
    You used to be able to change the memory split setting here as well, but for new installations (that have CMA enabled) this is no longer used.
  • “Clone”
    Creates a copy of the selected operating system.
    It is possible to create either a copy that includes the file system changes you made, or create a copy of the original operating system image as downloaded from the Internet.
  • “Backup”
    Creates a backup of a single operating system or all of them to a USB stick, or SD card (requires USB SD card reader).
    Backups of individual images can be restored by holding down the “add OS” button and selecting “copy OS from USB stick”
  • “Delete” (or DEL on keyboard)
    Deletes the files of the selected operating system.
  • “Make default”
    Makes the selected operating system the default. On boot, this operating system will be started automatically unless another is selected within a number of seconds.
  • “Exit” (or ESC on keyboard)
    Exits the menu editor.

Advanced options

Click on the ”»” button to the right of the screen to see all options.

  • “Advanced configuration”
    Editor for configuration files such as cmdline.txt and config.txt

When using a Raspberry Pi you can specify kernel parameters and Berryboot parameters in cmdline.txt (use uEnv.txt if you have another device).
Special Berryboot parameters:

bootmenutimeout=<number of seconds> - number of seconds before default operating system is started. nobootmenutimeout - do not start the default operating system automatically.

In config.txt advanced overscan, HDMI and overclocking settings can be specified. See the RPIconfig page on for details.
Note that overclocking is known to cause SD card filesystem corruption, so only use that when you are using an USB stick or drive as storage and know what you are doing.

  • “Console”
    Activates a console on tty2
    Press CTRL+ALT+F2 to access, username “root”, no password.
  • “Set password”
    Password protects access to the menu editor, so that unauthorized users cannot delete or edit the operating systems.
  • “Repair filesystem”
    Performs a file system check and repair. Attempts to repair file system corruption. Can perform a lot of writes to the SD card, so you might want to make a backup of important files first.

Acestream Engine, (as of 28/04/2016) unofficial version 3.1.5, for the Raspberry Pi 2 and 3.

Unofficial because it is closed source and the Acestream developers do not provide binaries for Linux ARM (only for more popular platforms), so no official support for the Raspberry Pi.
And as some may know, the Acestream Engine/module for the Raspberry Pi from the Plexus Kodi addon, stopped working recently, so this is the updated engine to fix it.

### Installation ###

For this to work, you need the Plexus Addon already installed in Kodi. The Plexus Kodi addon was discontinued by the developer but it still works. You can find it easily on the web.

Then open a virtual terminal, for example via SSH, and run the following commands (you can copy/paste to terminal):

cd ~/.kodi/userdata/addon_data/program.plexus
sudo rm -r acestream
tar xfv acestream_rpi_3.1.5.tar.gz

Done. Then you can play acestreams again.

PS: If you are running an OS as root, like OpenELEC, you may need to remove the “sudo” on the second line.

### Notes ###

Another way that may work is to download the tarball, and via network, extract it to the correct directory. This was not tested!

It is also possible to use this acestream engine without the need to install the Plexus addon, like standalone mode, but it may depend on your OS. There are already some tutorials on how to do this, so do some web searches if you want it.