diff --git a/apt-repo-updater.sh b/apt-repo-updater.sh new file mode 100644 index 0000000..eae379f --- /dev/null +++ b/apt-repo-updater.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +WORK_DIR=${WORK_DIR:?"WORK_DIR is not set!!"} +INCOME_DIR=${INCOME_DIR:="${WORK_DIR}/income"} +CODENAME=(bookworm) + +set -o functrace +set -o nounset +set -o errtrace +set -o errexit + +function msg { + local mesg="$1"; shift + printf "====> ${mesg}\n" "$@" +} + +function term_handle { + if [[ -n "$inotify_pid" ]] + then + GO_ON=0 + msg "sending TERM to inotifywait..." + kill -s TERM "$inotify_pid" 2>/dev/null || true + fi +} +function term_delay { + GO_ON=0 + msg "building repo, will terminate later" +} +trap 'term_handle' TERM SIGINT INT + + +function build_repo { + trap 'term_delay' TERM SIGINT INT + + for deb in "${INCOME_DIR}/"* + do + if [[ "$deb" = *"/*" ]] + then + msg "no file in $INCOME_DIR, skip this build" + break + fi + + msg "start adding $deb" + for codename in "${CODENAME[@]}" + do + msg "adding $deb into $codename" + reprepro includedeb "$codename" "$deb" + done + msg "finished adding $deb" + + msg "removing $deb from income dir $INCOME_DIR" + rm $deb + done + + trap 'term_handle' TERM SIGINT INT +} + +cd "$WORK_DIR" + +GO_ON=1 # flag of if continue the loop +PROGRAM_NAME="$0" +while [[ "$GO_ON" = "1" ]] +do + build_repo + + msg "start watching $INCOME_DIR" + inotifywait --quiet -e move -e modify -e create "$INCOME_DIR" & + inotify_pid="$!" + + # when inotifywait was killed, its return code is no-zero, + # so when wait return inotifywait's return code, script will exit due to errexit + wait || true +done + +msg "$PROGRAM_NAME shutdown"