How to Update Pi-hole Easily

Pi-hole is one of the most effective ad-blockers available for you to use. You can install it on your router or a dedicated system and get an ad-free experience for all the devices connected through it.

In an earlier article, I discussed the steps for installing Pi-hole. But you must update it regularly to win the cat-and-mouse game between ad blockers and ad providers (Google, Facebook, etc). Another aspect is to patch a security vulnerability that might affect you negatively.

The update method depends on the installation method. To recall, I discussed two methods:

  • Method 1: The existing Pi-hole installation was conducted using a script. The script was curl -sSL https://install.pi-hole.net | bash (or something similar).
  • Method 2: You installed Pi-hole using either Podman or Docker as a container.

I will cover how to update Pi-hole with both of these methods.

Method 1: Updating Pi-hole that was installed by a script

You will not believe how easy this is. All you have to do is run the following command in your terminal!

pihole -up

Of course, you have to run this command on the device where you have installed Pi-hole. In other words, you may have to SSH into your Raspberry Pi or router to run the above-mentioned command.

Doing so will update Pi-hole. Below is the output of running the pihole -up command on my computer:

$ pihole -up
  [✓] Update local cache of available packages
  [i] Existing PHP installation detected : PHP version 8.1.2-1ubuntu2.8
  [✓] Checking for git
  [✓] Checking for iproute2
  [✓] Checking for dialog
  [✓] Checking for ca-certificates

  [i] Checking for updates...
  [i] Pi-hole Core:     up to date
  [i] Web Interface:    up to date
  [i] FTL:              up to date

  [✓] Everything is up to date!

💡Though I haven’t encountered this myself, it is still a possibility that Pi-hole might require updates for other packages (like PHP) be installed. So try and run the update command that is applicable for your package manager on a regular basis. Keeping other packages up-to-date is just as important ;)

Optional: Automate Pi-hole update with cron job

This says that everything is up to date. But how can a normal person remember to keep everything up to date? Fret not! We can create a cron job to automatically update Pi-hole every day.

But before we edit the cron job, let us find the absolute path of the pihole command. This can be done either using the which command or the command command. You only need to run either one of the two commands listed below:

command -v pihole
which pihole

Executing either of the commands listed above will give you the absolute path to the pihole command. In my case, the absolute path for the pihole command is /usr/local/bin/pihole.

Next, we will edit the cron job. To edit cron jobs, type the following command in your terminal (please do NOT use sudo):

crontab -e

Doing so will open a file in either the nano editor or the vim editor. Next, append the following lines to the currently opened file:

0 1 * * * /usr/local/bin/pihole -up

All you need to do now is to save and exit the editor.

What we just did was that we made updating Pi-hole an automatic task. This will automatically run the pihole up command at 01:00 hours, every day.

Method 2: Update Pi-hole that was installed via Podman or Docker

If you installed Pi-hole using either Podman or Docker, all you can do initially is to pull the image.

⚠️ If you used a docker-compose.yml file to create your container, please have it handy because we need to delete the current container and create a new one. (No data or configuration will be changed if volumes are backed up properly or if bind mounts were used.)

Step 1: Check if a newer image is available

To check for updates, you can run either of the following commands based on what you use:

# command for Podman users
podman pull docker.io/pihole/pihole:latest

# command for Docker users
docker pull docker.io/pihole/pihole:latest

If there is a newer version of the image, it will be fetched. If a newer version is not available, nothing extra will happen and you should try again later.

Step 2: Stop and remove the container

If a new image was downloaded, we can proceed further. Our next step should be to restart the container. To know which container to restart, we can check the output of the docker ps or podman ps command.

$ docker ps
CONTAINER ID  IMAGE                           COMMAND  CREATED       STATUS           PORTS   NAMES
73528d5ca4e8  docker.io/pihole/pihole:latest           14 hours ago  Up 14 hours ago  53/tcp  pihole-aditi

This shows that I have a container named pihole-aditi. Let’s stop and remove this container. This can be done with the following commands:

# command for Podman users
podman stop pihole-aditi
docker rm pihole-aditi

# command for Docker users
docker stop pihole-aditi
docker rm pihole-aditi

Step 4: Create a new container

I hope you took my warning seriously and have your docker-compose.yml file handy ;)

Let’s re-create a new container. You can re-create your container using the following command:

docker-compose up -d

Please verify that the Pi-hole container is up and running using either the podman ps command or the docker ps command.

Step 5: Remove old image(s)

Once the Pi-hole container starts up with the updated image, we can remove the old image and free up disk, space.

To remove all the unused images, use the following command:

# command for Podman users
podman image prune

# command for Docker users
docker image prune

Upon running the above command, all the unused images will be removed. Please take caution with this command.

Done! That was all that we needed to do to update our Pi-hole container.

Conclusion

This article goes over the two methods of updating Pi-hole based on the installation method initially used. I have also discussed setting up auto-updates for Pi-hole which was installed using the official script. There is no such option for the container method, unfortunately.

Do let me know if you face any issues.

Become a Better Linux User

With the FOSS Weekly Newsletter, you learn useful Linux tips, discover applications, explore new distros and stay updated with the latest from Linux world

It's FOSS

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to It's FOSS.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.