feat: implement automatic, atomic, and push-based repository synchronization

- Switched from systemd path monitoring to a custom wrapper script `mxos-trigger-dist-repo.sh` spawned by the Koji signing spooler.
- Wrapper script runs Koji `dist-repo` synchronously and triggers the `mxos-repo-sync.sh` script to perform an atomic rsync of packages to the Caddy server.
- Excluded reposerver from distro-sync to work around VM disk space constraints.
- Configured Koji tag `mxos0` to cancel older pending/running `distRepo` tasks when a new one is triggered.
- Verified successful repository generation, synchronization, and DNF resolution.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
This commit is contained in:
Rénich Bon Ćirić 2026-06-16 23:57:02 -06:00
commit 38a0669db8
Signed by: renich
GPG key ID: AB2A9F49384FE324
11 changed files with 191 additions and 54 deletions

View file

@ -0,0 +1,37 @@
#!/usr/bin/bash
# SPDX-License-Identifier: MIT-0
set -euo pipefail
SOURCE="/mnt/koji/repos-dist/mxos0/latest/"
DEST_HOST="{{ groups['reposerver'][0] }}"
DEST_DIR="/srv/www/repo/BaseOS"
if [[ ! -d "$SOURCE" ]]; then
echo "Source directory $SOURCE does not exist. Skipping sync." >&2
exit 0
fi
echo "Starting atomic synchronization of mxos0 repository to $DEST_HOST..."
# Pre-create directory structure on the destination
/usr/bin/ssh -o StrictHostKeyChecking=no "root@${DEST_HOST}" "mkdir -p ${DEST_DIR}/x86_64/os ${DEST_DIR}/x86_64/debug/tree ${DEST_DIR}/source/tree"
# Sync x86_64 to BaseOS/x86_64/os
if [[ -d "${SOURCE}x86_64" ]]; then
echo "Syncing x86_64 architecture..."
/usr/bin/rsync -a -L --delete --delay-updates "${SOURCE}x86_64/" "root@${DEST_HOST}:${DEST_DIR}/x86_64/os/"
fi
# Sync x86_64-debuginfo to BaseOS/x86_64/debug/tree
if [[ -d "${SOURCE}x86_64-debuginfo" ]]; then
echo "Syncing x86_64 debuginfo..."
/usr/bin/rsync -a -L --delete --delay-updates "${SOURCE}x86_64-debuginfo/" "root@${DEST_HOST}:${DEST_DIR}/x86_64/debug/tree/"
fi
# Sync src to BaseOS/source/tree
if [[ -d "${SOURCE}src" ]]; then
echo "Syncing source RPMs..."
/usr/bin/rsync -a -L --delete --delay-updates "${SOURCE}src/" "root@${DEST_HOST}:${DEST_DIR}/source/tree/"
fi
echo "Synchronization completed successfully."