Wer kennt das nicht: Da hast Du Deinen Pihole redundant laufen und dann musst Du die Blocklisten manuell synchronisieren. Unschön.
Aber da kann man was machen.
Ich habe mir da Pihole Cloudsync angeschaut und fand das sehr vielversprechend. Was mich ein bisschen gestört hat ist, dass man da mit Git eine zusätzliche “Middleware” ins Spiel bringt, was das Ganze ein wenig komplizierter macht als es sein müsste.
Man kann das Ganze auch ein bisschen eleganter machen, indem man die “Cloud"durch ein SMB Share ersetzt.
So ein halbes Jahr später ist mir dann eingefallen, dass man das ja auch gleich per rsync machen kann, dann braucht man nicht mal mehr ein SMB Share. 💩
Ich lass das Skript trotzdem mal stehen.
#!/bin/bash
# pihole-sync
# sync pihole config using smb share
# some code adopted from steven jenkins' pihole-cloudsync
# see https://github.com/stevejenkins/pihole-cloudsync
# djonz mar 2022
SHARE=/mnt/smb/pihole
PIHOLE_DIR=/etc/pihole
GRAVITY=/etc/pihole/gravity.db
DNSMASQ_DIR=/etc/dnsmasq.d/
AD_LIST=adlist.csv
CUSTOM_LIST=custom.list
DOMAIN_LIST=domainlist.csv
CNAME_LIST=05-pihole-custom-cname.conf
LOGFILE=/var/log/pihole-sync.log
push () {
# export gravity db to smb share. run on master
exec > $LOGFILE 2>&1
pihole -g
cd $PIHOLE_DIR || exit
touch $CUSTOM_LIST
touch $DNSMASQ_DIR/$CNAME_LIST
cp $CUSTOM_LIST $SHARE
cp $DNSMASQ_DIR/$CNAME_LIST $SHARE
cd $SHARE || exit
sqlite3 $GRAVITY -header -csv "SELECT * FROM adlist" >$AD_LIST
sqlite3 $GRAVITY -header -csv "SELECT * FROM domainlist" >$DOMAIN_LIST
echo "Gravity db exported."
}
pull () {
# import gravity db. run on slave.
exec > $LOGFILE 2>&1
cd $SHARE || exit
systemctl stop pihole-FTL.service
cp $CUSTOM_LIST $PIHOLE_DIR
cp $CNAME_LIST $DNSMASQ_DIR
sqlite3 $GRAVITY "DROP TABLE adlist;"
sqlite3 $GRAVITY -header -csv ".import adlist.csv adlist"
sqlite3 $GRAVITY "DROP TABLE domainlist;"
sqlite3 $GRAVITY -header -csv ".import domainlist.csv domainlist"
echo "Gravity db imported."
systemctl start pihole-FTL.service
pihole -g -r recreate
}
if [ -z "$1" ]
then
echo "Usage: pihole-sync.sh [push|pull]"
exit 1
fi
case $1 in
push)
push
;;
pull)
pull
;;
*)
echo "Usage: pihole-sync.sh [push|pull]"
;;
esac
Man plant das dann per Crontab auf beiden Systemen ein (“push” auf dem Master und “pull”) auf dem/den Slave System(en) und ab sofort sind die Blocklisten auf beiden Systemen immer synchron.
Geht aber, wie oben beschrieben noch einfacher:
- Als Wert für sie SHARE Variable /tmp/pihole verwenden
- Im Push-Teil noch ein rsync -av /tmp/pihole/ slave:/tmp/pihole einbauen
- Auf dem Slave lsyncd installieren und dem Pull-Teil ausführen, wenn sich der Inhalt von /tmp/pihole ändert
Könnte so auch funktionieren. Meinungen?