machine_setup/ansible/roles/poudriere/files/poudboot.bash
2022-12-10 19:02:50 -05:00

74 lines
1.7 KiB
Bash

#!/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 )"
function main {
COMMAND="$1"
shift 1
if [ "$COMMAND" = "start" ]; then
cmd_start "${@}"
elif [ "$COMMAND" = "stop" ]; then
cmd_stop "${@}"
else
die 1 "Unrecognized command: $COMMAND"
fi
}
function die {
exit_code="$1"
shift 1
(>&2 echo "${@}")
exit "$exit_code"
}
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
# 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
for conf in /opt/poudriere/build_configs/*; do
(
source "$conf"
build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist
)
done
# Re-enable exiting on failed commands
set -e
# 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 "${@}"