Pi-Hole – Adding blocklist urls to the Gravity DB from the command-line
This is to add block list to the Gravity DB from the command line from a text file.
You will need a few things to do this
This is for allowing zmodem options if you telnet session allows it like SecurCRT that I used.
Install the following packages
sudo apt-get install lrzsz sudo apt-get install sqlite3 Add the URL's per line for example
Blocklist: HERE
To add these URL's you have to add them to the following file
sudo nano /etc/pihole/adlists.list Create a file to run as the import script
sudo nano /etc/pihole/adlists.sh Then create a script and call it what ever you like and put this in
#!/bin/bash set -e DB_FILE="/etc/pihole/gravity.db" BACKUP_FILE="/etc/pihole/gravity_backup_$(date +%Y%m%d_%H%M%S).db" ADLIST_FILE="/etc/pihole/adlists.list" # Check if adlists.list exists if [ ! -f "$ADLIST_FILE" ]; then echo "Error: $ADLIST_FILE not found!" exit 1 fi echo "1. Backing up existing gravity.db..." sudo cp "$DB_FILE" "$BACKUP_FILE" echo "2. Clearing existing adlists from database..." sudo sqlite3 "$DB_FILE" "DELETE FROM adlist;" echo "3. Importing HTTPS URLs from $ADLIST_FILE..." count=0 # Process lines using process substitution to keep scope in the main shell while IFS= read -r url; do if [ -n "$url" ]; then safe_url=$(echo "$url" | sed "s/'/''/g") sudo sqlite3 "$DB_FILE" "INSERT INTO adlist (address, enabled, comment) VALUES ('$safe_url', 1, 'Imported from adlists.list');" count=$((count + 1)) echo "Added: $safe_url" fi done < <(grep 'https://' "$ADLIST_FILE" | grep -v '^[[:space:]]*#' | grep -o 'https://[^[:space:]]*') echo "Successfully imported $count adlists." echo "4. Updating Gravity (downloading lists)..." sudo pihole -g echo "Done! Pi-hole gravity update complete." Change the permissions on the file
sudo chmod +x /etc/pihole/adlists.sh Docker Users
If you place the script within the working directory of pihole container you can do the following:
docker exec -it pihole chmod +x /etc/pihole/bash_script.sh docker exec -it pihole chmod 777 /etc/pihole/adlists.list docker exec -it pihole ./etc/pihole/bash_script.sh Error Check
Run the following to make sure your database is still okay and does not display any errors like these
| 2025-03-25 21:53:21.039 EDT [1353/T9050] ERROR: SQLite3: no such table: info in "SELECT value FROM info WHERE property = 'updated';" (1) 2025-03-25 21:53:21.039 EDT [1353/T9050] WARNING: gravity_updated(): SELECT value FROM info WHERE property = 'updated'; - SQL error prepare: SQL logic error |
If so just rebuild the database like this
sudo mv /etc/pihole/gravity.db /etc/pihole/gravity_backup.db sudo pihole -g