From eb547bf1bf48059cea65b0e9fd52fec042808ec2 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 21 Jun 2023 23:13:30 -0400 Subject: [PATCH] Add an endless loop to poudboot to rebuild at intervals. --- ansible/roles/poudriere/files/poudboot.bash | 61 ++++++++++++++------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/ansible/roles/poudriere/files/poudboot.bash b/ansible/roles/poudriere/files/poudboot.bash index 7274b27..ff9b414 100644 --- a/ansible/roles/poudriere/files/poudboot.bash +++ b/ansible/roles/poudriere/files/poudboot.bash @@ -6,6 +6,9 @@ IFS=$'\n\t' DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" : ${LOCKFILE:="/var/run/poudboot.lock"} +: ${INFO_DIR:="/opt/poudriere/run_info"} +: ${PORT_UPDATE_SECONDS:="86400"} +: ${BUILD_SECONDS:="7200"} ############## Setup ######################### @@ -70,27 +73,47 @@ function build { function cmd_start { abort_if_jobs_running - for conf in /opt/poudriere/build_configs/*; do - ( - # Allow command failures without quitting the script because some - # package sets might fail whereas others may succeed based on which - # packages are in each set. - set +e + while true; do + for conf in /opt/poudriere/build_configs/*; do + ( + # Allow command failures without quitting the script because some + # package sets might fail whereas others may succeed based on which + # packages are in each set. + set +e - source "$conf" - build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist - ) + source "$conf" + local RUN_DIR="$INFO_DIR/$JAIL-$PORTS-$SET" + local TIMES_FILE="$RUN_DIR/times" + mkdir -p "$RUN_DIR" + local PORTUPDATE=0 + local LASTBUILD=0 + if [ -e "$TIMES_FILE" ]; then + source "$TIMES_FILE" + fi + local now=$(date +%s) + if [ $((now - PORTUPDATE)) -gt "$PORT_UPDATE_SECONDS" ]; then + log "Updating ports for $JAIL-$PORTS-$SET" + portshaker -U + portshaker -M + PORTUPDATE=$(date +%s) + fi + if [ $((now - LASTBUILD)) -gt "$BUILD_SECONDS" ]; then + log "Building ports for $JAIL-$PORTS-$SET" + build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist + LASTBUILD=$(date +%s) + # Cleanup old unused dist files + poudriere distclean -y -p "$PORTS" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist + poudriere logclean -y 180 + fi + + cat > "$TIMES_FILE" <