#!/usr/bin/env bash # # Run poudriere at system boot. Useful for virtual machines so launching the VM also kicks off a build. set -euo pipefail IFS=$'\n\t' DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" : ${LOCKFILE:="/var/run/poudboot.lock"} ############## Setup ######################### # function cleanup { # for f in "${folders[@]}"; do # log "Deleting $f" # rm -rf "$f" # done # } # folders=() # for sig in EXIT INT QUIT HUP TERM; do # trap "set +e; cleanup" "$sig" # done function die { local status_code="$1" shift (>&2 echo "${@}") exit "$status_code" } function log { (>&2 echo "${@}") } function run_locked { if [ "${RUN_LOCKED:-}" != "RUN" ]; then exec env RUN_LOCKED=RUN flock --nonblock $LOCKFILE $0 $@ fi } ############## Program ######################### function main { local COMMAND="$1" if [ "$COMMAND" = "start" ]; then run_locked "${@}" shift 1 cmd_start "${@}" elif [ "$COMMAND" = "stop" ]; then shift 1 cmd_stop "${@}" else die 1 "Unrecognized command: $COMMAND" fi } function abort_if_jobs_running { if [[ $(sudo poudriere status) != *"No running builds"* ]]; then echo "There is already a poudriere build in progress, exiting." exit 0 fi } function build { poudriere pkgclean -y "$@" poudriere bulk -J "${POUDRIERE_JOBS:-1}" "$@" } 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 source "$conf" build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist ) done # Cleanup old unused dist files for conf in /opt/poudriere/build_configs/*; do ( source "$conf" poudriere distclean -y -p "$PORTS" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist ) done poudriere logclean -y 180 } function cmd_stop { echo "cmd_stop not implemented." } main "${@}"