#!/bin/bash # /usr/local/bin/mirror-checksum.sh # Sync mirrors and generate SHA256 checksums # Set umask so checksums aren't world-writable umask 022 # Define an array of mirrors: "name|rsync_source|local_dir|logfile" MIRRORS=( "archlinux|rsync://arch.mirror.constant.com/archlinux/|/brimstone2/mirror/archlinux|/var/log/arch-mirror-sync.log" "gentoo|rsync://masterdistfiles.gentoo.org/gentoo/|/brimstone2/mirror/gentoo|/var/log/gentoo-mirror-sync.log" "hardenedbsd|rsync://rsync.hardenedbsd.org/all/|/mnt/brimstone/mirror/hardenedbsd|/var/log/hbsd-sync.log" "void|rsync://repo-sync.voidlinux.org/voidlinux/|/mnt/brimstone/mirror/void|/var/log/void-sync.log" "slackware|rsync://mirrors.kernel.org/slackware/|/mnt/brimstone/mirror/slackware|/var/log/slackware-sync.log" ) for entry in "${MIRRORS[@]}"; do IFS="|" read -r NAME SOURCE DEST LOG <<< "$entry" echo "[$(date)] Syncing $NAME mirror..." | tee -a "$LOG" rsync -avhr --delete "$SOURCE" "$DEST" >> "$LOG" 2>&1 echo "[$(date)] Generating SHA256 checksums for $NAME..." | tee -a "$LOG" (cd "$DEST" && \ find . -type f -print0 | sort -z | \ xargs -0 sha256sum > "$DEST/SHA256SUMS" ) echo "[$(date)] SHA256 complete for $NAME. Results stored at $DEST/SHA256SUMS" | tee -a "$LOG" done