you-dont-need-pihole/update.sh

97 lines
2.3 KiB
Bash
Raw Normal View History

2021-01-30 03:26:05 +00:00
#!/bin/bash
# vi: et sts=4 sw=4 ts=4
###############################################################################
# You Don't Need Pi-hole
# Network-wide DNS blocking without extra hardware.
#
# Project URL: https://codeberg.org/h3xx/you-dont-need-pihole
#
# License GPLv3: GNU GPL version 3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
# with Commons Clause 1.0 (https://commonsclause.com/).
# This is free software: you are free to change and redistribute it.
# There is NO WARRANTY, to the extent permitted by law.
# You may NOT use this software for commercial purposes.
###############################################################################
2021-01-30 03:26:05 +00:00
set -e
WORKDIR=${0%/*}
CFG=$WORKDIR/update.cfg
# Config defaults
BACKUPSUFFIX=
BLOCKLIST=$WORKDIR/block.list
LIST_DIR=$WORKDIR/lists
OUT=()
URL=()
DNSMASQ_RESTART_COMMAND=()
if [[ -f $CFG ]]; then
. "$CFG"
fi
2021-01-30 03:26:05 +00:00
2022-08-11 17:40:40 +00:00
TEMP_DIR=$(mktemp -d -t "${0##*/}.XXXXXX")
2021-01-30 03:26:05 +00:00
cleanup() {
2022-08-11 17:40:40 +00:00
rm -fr -- "$TEMP_DIR"
2021-01-30 03:26:05 +00:00
}
trap 'cleanup' EXIT
copy_perms() {
local -r FROM=$1 TO=$2
chmod --reference="$FROM" -- "$TO"
if [[ $UID -eq 0 ]]; then
chown --reference="$FROM" -- "$TO"
fi
}
replace_with() {
local -r ORIG=$1 NEW=$2
if ! diff -q -- "$ORIG" "$NEW" &>/dev/null; then
# There's a change
if [[ -f $ORIG ]]; then
copy_perms "$ORIG" "$NEW"
if [[ -n $BACKUPSUFFIX ]]; then
mv -- "$ORIG" "$ORIG$BACKUPSUFFIX"
fi
else
mkdir -p -- "${ORIG%/*}"
fi
mv -- "$NEW" "$ORIG"
else
printf 'File "%s" not modified\n' \
"$ORIG" \
>&2
fi
}
2021-02-13 16:31:09 +00:00
(cd "$WORKDIR" && git submodule update --init --remote)
2021-01-30 03:26:05 +00:00
for (( I = 0 ; I < ${#OUT[@]} ; ++I )); do
MY_URL=${URL[$I]}
MY_OUT=${OUT[$I]}
if [[ -z $MY_URL ]]; then
echo "$CFG: URL[$I] empty" >&2
exit 2
fi
if [[ -z $MY_OUT ]]; then
echo "$CFG: OUT[$I] empty" >&2
exit 2
fi
2022-08-11 17:40:40 +00:00
TEMP_OUT=$(mktemp -p "$TEMP_DIR")
2021-01-30 03:26:05 +00:00
wget \
-O "$TEMP_OUT" \
"$MY_URL"
replace_with "$MY_OUT" "$TEMP_OUT"
2021-01-30 03:26:05 +00:00
done
TEMP_BLOCKLIST=$(mktemp -p "$TEMP_DIR")
"$WORKDIR/make-block.pl" --out="$TEMP_BLOCKLIST"
replace_with "$BLOCKLIST" "$TEMP_BLOCKLIST"
2021-01-30 03:26:05 +00:00
if [[ ${#DNSMASQ_RESTART_COMMAND[@]} -gt 0 ]]; then
"${DNSMASQ_RESTART_COMMAND[@]}"
2021-01-30 03:26:05 +00:00
fi