Archive the non-ported remainder of the legacy KNELServerBuild repo
under archive/KNELServerBuild/ with its original structure intact,
completing the legacy repo merge for everything except the live
LibreNMS patterns (ported in the previous commit).
Exclusions:
- .git history (superseded; legacy repo remains at its original path)
- ported files (Agents/librenms, Modules/OAM/oam-librenms.sh,
ConfigFiles/SNMP/snmp-sudo.conf)
- vendored KNELShellFramework tree (byte-identical duplicate of the
copy already vendored at vendor/ in this repo)
- SSH authorized-keys files (live access-control material; carrying
them in an archive invites drift — key policy lives elsewhere)
The whole tree is skip-listed in tests/shellcheck.sh (archived legacy
code, not maintained — same standing as vendor/); check-rules.sh
already prunes archive/. Rule 9 (conflict markers) now also excludes
archive/ staged files: preserved-verbatim legacy scripts contain
decorative "====" banners that false-positive as conflict markers
(same archive exclusion precedent as rule 11).
AGENTS.md: note archive/KNELServerBuild and oam/librenms-agent in the
Repository Layout, and fix the stale KNELIAC path to
/home/reachableceo/projects/KNEL/KNELIAC.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
44 lines
1.6 KiB
Bash
Executable File
44 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
#
|
|
# sync-zones.sh — rsync-based zone replication from primary to secondary
|
|
#
|
|
# Runs on the SECONDARY (netinfra-02). Syncs the zones/ directory from the
|
|
# primary (netinfra-01) every 60 seconds. When a zone file changes, Technitium
|
|
# detects the modification and reloads automatically.
|
|
#
|
|
# This is used instead of AXFR-based zone transfer because Technitium's zone
|
|
# transfer mechanism uses port 53 (standard DNS), but on the netinfra hosts
|
|
# port 53 is Pi-hole and Technitium is on port 5300. rsync-based replication
|
|
# avoids the port conflict entirely.
|
|
#
|
|
# Install as a systemd service/timer or run via cron:
|
|
# * * * * * /home/localuser/services/technitium/sync-zones.sh
|
|
#
|
|
set -uo pipefail
|
|
|
|
PRIMARY_HOST="${PRIMARY_HOST:-pfv-netinfra-01.knel.net}"
|
|
CONFIG_DIR="${CONFIG_DIR:-/home/localuser/services/technitium/config}"
|
|
ZONE_DIR="$CONFIG_DIR/zones"
|
|
LOCK_FILE="/tmp/technitium-zone-sync.lock"
|
|
LOG_FILE="${LOG_FILE:-/home/localuser/services/technitium/sync.log}"
|
|
|
|
log() { printf '[%s] %s\n' "$(date +%H:%M:%S)" "$*" >> "$LOG_FILE"; }
|
|
|
|
# Prevent overlapping runs
|
|
exec 9>"$LOCK_FILE" || exit 0
|
|
flock -n 9 || { log "another sync is running; skipping"; exit 0; }
|
|
|
|
mkdir -p "$ZONE_DIR"
|
|
|
|
# rsync zones from primary. Use --temp-dir to avoid partial writes being
|
|
# picked up by Technitium, and --delete to remove zones deleted on primary.
|
|
log "Syncing zones from $PRIMARY_HOST..."
|
|
if rsync -az --delete --temp-dir=/tmp \
|
|
"${PRIMARY_HOST}:$ZONE_DIR/" "$ZONE_DIR/" >> "$LOG_FILE" 2>&1; then
|
|
zone_count=$(ls "$ZONE_DIR" | wc -l)
|
|
log "Sync complete: $zone_count zones"
|
|
else
|
|
log "ERROR: rsync failed (rc=$?)"
|
|
exit 1
|
|
fi
|