74 lines
1.7 KiB
Bash
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 "${@}"
|