toolkit/sync/gen-torrents.sh
Louis Abel dd1d5de120
Some checks failed
Build empanada images for imagefactory / buildx (push) Failing after 4s
Build empanada container images for lorax / buildx (push) Successful in 1s
Ensure torrent generation goes to separate directories
2023-11-29 18:57:08 -07:00

93 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "${BASH_SOURCE[0]}")/common"
NAME=gen-torrents
USAGE="usage: $NAME <torrentdir>"
ISODIR=${1}
if [[ -z "${ISODIR}" || $# == 0 ]]; then
echo "$USAGE"
exit
fi
# Setup a lock?
LOCKFILE="/tmp/${NAME}.lock"
if [ -f "$LOCKFILE" ]; then
echo "Script is already running"
exit
fi
trap 'rm -f $LOCKFILE' EXIT
touch $LOCKFILE
# stamp the email
# Where to put torrent data
TORRENT_DOWNLOAD_DIR="/opt/rtorrent/download"
# Where to drop created torrents
TORRENT_START_DIR="/opt/rtorrent/watch/start"
# What trackers should be used
TORRENT_TRACKERS=(
"udp://tracker.opentrackr.org:1337/announce"
"udp://tracker.openbittorrent.com:80/announce"
)
# Regex of paths to exclude
TORRENT_EXCLUDES='.*\/CHECKSUM.asc'
TORRENT_COMMENT="https://docs.rockylinux.org/release_notes/${REVISION//\./_}/" # dots are bad, mkay?
THREADS=10
printf "* Step 1: Create scaffolding and link\n"
cd "${TORRENT_DOWNLOAD_DIR}" || exit 1
for variant in "${VARIANTS[@]}"; do
for arch in "${ARCHES[@]}"; do
# Skip this architecture if it's not there
if [[ ! -d "${ISODIR}/${arch}" ]]; then
printf "** %s - Does not exist. Skipping.\n" "${ISODIR}/${arch}"
continue
fi
name_template="Rocky-${REVISION}-${arch}-${variant}"
if [[ ! -f "${ISODIR}/${arch}/${name_template}.iso" ]]; then
printf "** %s - Does not exist. Skipping.\n" "${ISODIR}/${arch}/${name_template}.iso"
continue
fi
printf "** Making directory: %s/%s\n" "${TORRENT_DOWNLOAD_DIR}" "${name_template}"
mkdir "${name_template}" || exit 2
printf "** Linking Version: %s; Arch: %s; Variant: %s\n" "${REVISION}" "${arch}" "${variant}"
ln -sv \
"${ISODIR}"/"${arch}"/{CHECKSUM*,"${name_template}".iso*} \
"${name_template}"/
done
done
printf "* Step 2: Generate torrents\n"
for torrent_directory in "${TORRENT_DOWNLOAD_DIR}"/Rocky-"${REVISION}"-*; do
name="$(basename "${torrent_directory}")"
if [[ -d "${torrent_directory}" ]]; then
printf "** Creating torrent for %s\n" "${torrent_directory}"
else
continue
fi
torrenttools create \
--announce "${TORRENT_TRACKERS[@]}" --name "${name}" \
--exclude "${TORRENT_EXCLUDES}" --output "${TORRENT_START_DIR}/${torrent_directory##*/}" \
--threads "${THREADS}" --comment "${TORRENT_COMMENT}" \
"${torrent_directory}"
res=$?
if [[ $res -ne 0 ]]; then
printf "**[ERROR] Failed to create torrent."
exit "$res"
fi
done