From 772152a5810aa8c4e03cf167381aadc4ec00499f Mon Sep 17 00:00:00 2001 From: doc Date: Wed, 1 Oct 2025 20:35:47 +0000 Subject: mirror scripts --- status.sh | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 status.sh (limited to 'status.sh') diff --git a/status.sh b/status.sh new file mode 100755 index 0000000..5f58329 --- /dev/null +++ b/status.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# mirror-status.sh +# Generate a status page for FailZero mirrors + +MIRROR_BASE="/mnt/brimstone/mirror" +STATUS_DIR="/mnt/brimstone/mirror/status" +STATUS_FILE="$STATUS_DIR/index.html" +LOG_DIR="/var/log/mirrors" + +# List your mirrors (folder name => display name) +declare -A MIRRORS=( + ["archlinux"]="Arch Linux" + ["debian"]="Debian" + ["gentoo"]="Gentoo" + ["hardenedbsd"]="HardenedBSD" + ["slackware"]="Slackware" + ["void"]="Void Linux" + ["rocky"]="Rocky Linux" + ["alma"]="AlmaLinux" +) + +mkdir -p "$STATUS_DIR" + +cat > "$STATUS_FILE" < + + + + FailZero Mirror Status + + + +

FailZero Mirror Status

+

Updated: $(date)

+ + +EOF + +for key in "${!MIRRORS[@]}"; do + DISTRO="${MIRRORS[$key]}" + DIR="$MIRROR_BASE/$key" + LOG="$LOG_DIR/${key}-mirror-sync.log" + + STATUS="FAIL" + CLASS="fail" + LASTSYNC="no log" + FRESHNESS="unknown" + + # 1. Parse rsync log exitcode + if [ -f "$LOG" ]; then + LASTSYNC=$(stat -c %y "$LOG" | cut -d. -f1) + EXITCODE=$(grep "EXITCODE:" "$LOG" | tail -n1 | cut -d: -f2) + + if [ -n "$EXITCODE" ]; then + if [ "$EXITCODE" = "0" ]; then + STATUS="OK" + CLASS="ok" + else + STATUS="RSYNC FAIL ($EXITCODE)" + CLASS="fail" + fi + else + STATUS="NO EXITCODE" + CLASS="warn" + fi + fi + + # 2. Check lastupdate if present (for freshness) +# if [ -f "$DIR/lastupdate" ]; then +# TS=$(tr -d '[:space:]' < "$DIR/lastupdate" 2>/dev/null) +# if [[ "$TS" =~ ^[0-9]+$ ]]; then +# NOW=$(date +%s) +# AGE=$(( NOW - TS )) +# if [ "$AGE" -lt 7200 ]; then +# FRESHNESS="$((AGE/60)) min ago" +# elif [ "$AGE" -lt 86400 ]; then +# FRESHNESS="$((AGE/3600)) hr ago" +# [ "$STATUS" = "OK" ] && CLASS="warn" +# else +# FRESHNESS="$((AGE/86400)) days ago" +# [ "$STATUS" = "OK" ] && CLASS="warn" +# fi +# fi +# fi + + echo " " >> "$STATUS_FILE" +done + +cat >> "$STATUS_FILE" < +

FailZero Infrastructure – Mirror Ops

+ + +EOF -- cgit v1.2.3
DistroLast Sync (log)
$DISTRO$LASTSYNC