#!/bin/bash cd "$(dirname "$(readlink -e "$0")")" shutdownasap_progress=$(shutdownasap -g || echo 'none') if [ "${shutdownasap_progress}" != 'none' ]; then >&2 printf 'shutdownasap in progress: %s\n' "${shutdownasap_state}" exit 1 fi exec 9> sign-and-upload-all.lock if ! flock -n 9; then >&2 echo 'another sign-and-upload-all still holds the lock' exit 1 fi pkill -x keyboxd for distro in arch artix; do for arch in x86_64 i486 i686 pentium4; do unset pkgs declare -A pkgs [ "${arch}" != 'x86_64' ] && [ "${distro}" != 'arch' ] && continue upkgs=$( ssh ${distro}linuxewe@eckner.net ' bsdtar -Oxf os/'"${arch}"'/'"${distro}"'linuxewe.db.tar.gz \ | sed -n '"'"' /^%FILENAME%$/ { N s/^.*\n// p } '"'"' \ | while read -r f; do [ -f "os/'"${arch}"'/${f}" ] \ || continue [ -f "os/'"${arch}"'/${f}.sig" ] \ || continue [ "$(stat -c %Y "os/'"${arch}"'/${f}.sig")" -lt $(($(date +%s)-60*60*24)) ] \ || gpg --verify "os/'"${arch}"'/${f}.sig" "os/'"${arch}"'/${f}" 2>/dev/null \ || continue echo "${f}" done ' ) for pkg in */${distro}*-${arch}/*.pkg.tar.zst; do [ -f "${pkg}" ] \ || continue printf '%s\n' "${pkg##*/}" \ | grep -qxF "${upkgs}" \ && continue [ -f "${pkg}.sig" ] \ || gpg --detach-sign -u 5FDCA472AB93292BC678FD59255A76DB9A12601A "${pkg}" \ || exit 1 parch="${pkg##*-}" parch="${parch%%.*}" pkgs["${parch}"]+=" ${pkg}" done for archdir in "${!pkgs[@]}"; do rsync -av --progress \ ${pkgs["${archdir}"]} \ $(printf '%s.sig\n' "${pkgs["${archdir}"]}") \ ${distro}linuxewe@eckner.net:os/${archdir}/ if [ "${archdir}" = 'any' ]; then ssh ${distro}linuxewe@eckner.net ' cd os for arch in */; do [ "${arch}" = 'any/' ] && continue cd ${arch} for pkg in '"${pkgs["${archdir}"]##*/}"'; do ln -s ../any/${pkg} ln -s ../any/${pkg}.sig done repo-add -s -k 0x3CFB0AD8F60030F8 '"${distro}"'linuxewe.db.tar.gz '"${pkgs["${archdir}"]##*/}"' find -maxdepth 1 -mindepth 1 -not -type d -printf '"'"'%f\n'"'"' \ | grep -vxFf <( ls '"${distro}"'linuxewe.{db,files}* bsdtar -Oxf '"${distro}"'linuxewe.db.tar.gz \ | sed -n '"'"' /^%FILENAME%$/ { N s/^.*\n// p s/$/.sig/ p } '"'"' ) \ | xargs -r rm -f cd .. done cd any find -maxdepth 1 -mindepth 1 -not -type d -printf '"'"'%f\n'"'"' \ | grep -vxFf <( for db in ../*/'"${distro}"'linuxewe.db.tar.gz; do bsdtar -Oxf "${db}" done \ | sed -n '"'"' /^%FILENAME%$/ { N s/^.*\n// p s/$/.sig/ p } '"'"' ) \ | xargs -r rm -f ' else ssh ${distro}linuxewe@eckner.net ' cd os/'"${archdir}"' repo-add -s -k 0x3CFB0AD8F60030F8 '"${distro}"'linuxewe.db.tar.gz '"${pkgs["${archdir}"]##*/}"' find -maxdepth 1 -mindepth 1 -not -type d -printf '"'"'%f\n'"'"' \ | grep -vxFf <( ls '"${distro}"'linuxewe.{db,files}* bsdtar -Oxf '"${distro}"'linuxewe.db.tar.gz \ | sed -n '"'"' /^%FILENAME%$/ { N s/^.*\n// p s/$/.sig/ p } '"'"' ) \ | xargs -r rm -f ' fi done done done