From 2afb5e7c1c2ed13ac4220b11b22df03d368eabf6 Mon Sep 17 00:00:00 2001 From: Neil Hanlon Date: Fri, 9 Jul 2021 21:57:20 -0400 Subject: [PATCH] feat: torrent generation --- sync/common | 9 +++++ sync/gen-torrents.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100755 sync/gen-torrents.sh diff --git a/sync/common b/sync/common index 698fde5..87d632d 100644 --- a/sync/common +++ b/sync/common @@ -28,3 +28,12 @@ fi # Combined variables based on common data REV="${REVISION}${APPEND_TO_DIR}" + +# These repos have modules +MODS=( + AppStream + PowerTools +) + +# Used to iterate over ISOs? +VARIANTS=(boot minimal dvd1) diff --git a/sync/gen-torrents.sh b/sync/gen-torrents.sh new file mode 100755 index 0000000..022f6ca --- /dev/null +++ b/sync/gen-torrents.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# + +# Source common variables +# shellcheck disable=SC2046,1091,1090 +source "$(dirname "$0")/common" + +NAME=gen-torrents + +USAGE="usage: $NAME " +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}/" +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 ${torrent_directory}\n" + else + continue + fi + torrenttools create \ + --announce "${TORRENT_TRACKERS[@]}" --name "${name}" \ + --exclude "${TORRENT_EXCLUDES}" --output "${TORRENT_START_DIR}" \ + --threads "${THREADS}" --comment "${TORRENT_COMMENT}" \ + "${torrent_directory}" + res=$? + if [[ $res -ne 0 ]]; then + printf "**[ERROR] Failed to create torrent." + exit "$res" + fi +done