summaryrefslogtreecommitdiff
path: root/sha256.sh
blob: 296c8b6cb275e6e07b431027a51e9cf180e71769 (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
#!/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