summaryrefslogtreecommitdiff
path: root/mirror-backup.sh
blob: c46ed2b4a9c4ad87c06f257b32b14bf29d2bd2dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
# Backup critical mirror server configs + ZFS snapshots
# Doc’s "configs over cargo" edition 🐒

set -euo pipefail
umask 022

BACKUP_DIR="/mnt/brimstone/mirror-config-backups"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
ARCHIVE="$BACKUP_DIR/mirror-configs-$TIMESTAMP.tar.gz"

mkdir -p "$BACKUP_DIR"

echo "[$(date)] Creating config archive: $ARCHIVE"

tar -czf "$ARCHIVE" \
  /etc/rsyncd.conf \
  /etc/rsyncd.motd \
  /etc/mirror-gpg \
  /usr/local/bin/mirror-verify.sh \
  /usr/local/bin/mirror-backup.sh \
  /etc/systemd/system/rsyncd.service \
  /etc/systemd/system/mirror-verify.* \
  /etc/cron.d/*mirror* 2>/dev/null || true

echo "[$(date)] Archive complete."

# Rotate old archives, keep last 7
echo "[$(date)] Rotating archives (keeping last 7)..."
ls -1t "$BACKUP_DIR"/mirror-configs-*.tar.gz 2>/dev/null | tail -n +8 | while read -r oldfile; do
  echo "Removing old archive: $oldfile"
  rm -f "$oldfile"
done

#rsync to backup server 
echo "[$(date)] Sending to Stygian2 Backup Server..."
rsync -avhr /mnt/brimstone/mirror-config-backups/*.tar.gz doc@stygian2.failzero.net:/home/doc/stygianconfig

# Trigger ZFS snapshots
echo "[$(date)] Taking ZFS snapshots..."
zfs snapshot brimstone@mirror-backup-$TIMESTAMP || true
zfs snapshot brimstone2@mirror-backup-$TIMESTAMP || true

echo "[$(date)] Snapshots created: brimstone@mirror-backup-$TIMESTAMP, brimstone2@mirror-backup-$TIMESTAMP"
echo "[$(date)] Backup completed successfully."