This repository has been archived on 2026-08-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
beatzaplenty a6a419bad7
Secret Scan / Scan for secrets and sensitive config (push) Failing after 4s
updated structure
2026-07-24 06:22:31 +10:00

61 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Apply a Pi-hole configuration directory to a destination Pi-hole instance.
#
# Usage: apply-config.sh <source-dir> <dest-host>
# source-dir Local directory containing config files (as written by pull-config.sh)
# dest-host SSH-reachable hostname or IP of the destination Pi-hole
#
# Example:
# ./apply-config.sh ./config root@pihole-new
# ./apply-config.sh /backup/pihole-20260723 root@192.168.2.101
#
# The destination Pi-hole must already have Pi-hole v6 installed.
# pihole-FTL is restarted at the end to apply the new config.
set -euo pipefail
usage() {
echo "Usage: $(basename "$0") <source-dir> <dest-host>" >&2
echo " source-dir Local directory with config files (from pull-config.sh)" >&2
echo " dest-host SSH target for the destination Pi-hole (e.g. root@pihole)" >&2
exit 1
}
[[ $# -eq 2 ]] || usage
SOURCE="$1"
DEST="$2"
[[ -d "${SOURCE}" ]] || { echo "Error: source directory '${SOURCE}' not found" >&2; exit 1; }
[[ -f "${SOURCE}/pihole.toml" ]] || { echo "Error: '${SOURCE}/pihole.toml' not found — is this a valid config dir?" >&2; exit 1; }
echo "Applying Pi-hole config from ${SOURCE}${DEST}"
# ── Verify destination is running Pi-hole ──────────────────────────────────────
ssh "${DEST}" "command -v pihole-FTL >/dev/null 2>&1 || { echo 'pihole-FTL not found on destination'; exit 1; }"
# ── pihole.toml ────────────────────────────────────────────────────────────────
echo " pihole.toml"
ssh "${DEST}" "cp /etc/pihole/pihole.toml /etc/pihole/pihole.toml.pre-apply 2>/dev/null || true"
scp "${SOURCE}/pihole.toml" "${DEST}:/etc/pihole/pihole.toml"
ssh "${DEST}" "chown pihole:pihole /etc/pihole/pihole.toml; chmod 640 /etc/pihole/pihole.toml"
# ── custom dnsmasq drop-ins ────────────────────────────────────────────────────
if [[ -d "${SOURCE}/dnsmasq.d" ]] && [[ -n "$(ls "${SOURCE}/dnsmasq.d/"*.conf 2>/dev/null)" ]]; then
echo " dnsmasq.d/ (custom drop-ins)"
for f in "${SOURCE}/dnsmasq.d/"*.conf; do
name="$(basename "$f")"
echo " ${name}"
scp "${f}" "${DEST}:/etc/dnsmasq.d/${name}"
done
fi
# ── Restart pihole-FTL ─────────────────────────────────────────────────────────
echo " Restarting pihole-FTL"
ssh "${DEST}" "systemctl restart pihole-FTL"
sleep 2
ssh "${DEST}" "systemctl is-active pihole-FTL"
echo "Done. Config applied to ${DEST}."
echo "Note: gravity (blocklists) is not transferred — run 'pihole updateGravity' on ${DEST} to rebuild."