Compare commits

...

2 Commits

@ -18,7 +18,7 @@ load_rc_config $name
command=/usr/sbin/daemon
pidfile=/var/run/${name}.pid
command_args="-p $pidfile -u root -f -S -T $name nice -n 10 poudboot start"
command_args="-p $pidfile -u root -f -S -T $name nice -n 10 lockf -t 0 /var/run/$name.lock /root/.cargo/bin/poudboot /opt/poudriere/poudboot.sqlite3"
export PATH="${PATH}:/usr/local/bin"
run_rc_command "$1"

@ -1,143 +0,0 @@
#!/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"}
: ${INFO_DIR:="/opt/poudriere/run_info"}
: ${PORT_UPDATE_SECONDS:="86400"}
: ${CLEAN_SECONDS:="1209600"}
: ${BUILD_SECONDS:="7200"}
: ${LOG_RETENTION_DAYS:="30"}
############## 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 lockf -t 0 $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 -v -y "$@"
poudriere bulk -J "${POUDRIERE_JOBS:-1}" "$@"
}
function cmd_start {
abort_if_jobs_running
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"
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)
fi
cat > "$TIMES_FILE" <<EOF
PORTUPDATE=$PORTUPDATE
LASTBUILD=$LASTBUILD
EOF
)
done
(
set +e
local GLOBAL_TIMES_FILE="$INFO_DIR/times"
local LASTCLEAN=0
if [ -e "$GLOBAL_TIMES_FILE" ]; then
source "$GLOBAL_TIMES_FILE"
fi
local now=$(date +%s)
if [ $((now - LASTCLEAN)) -gt "$CLEAN_SECONDS" ]; then
log "Global Cleaning."
# Cleanup old unused dist files
poudriere distclean -v -y -a
poudriere logclean -v -y "$LOG_RETENTION_DAYS"
LASTCLEAN=$(date +%s)
cat > "$GLOBAL_TIMES_FILE" <<EOF
LASTCLEAN=$LASTCLEAN
EOF
fi
)
sleep 300
done
}
function cmd_stop {
echo "cmd_stop not implemented."
}
main "${@}"

@ -17,6 +17,7 @@ devel/py-jmespath
devel/py-ptvsd
devel/py-yamllint
devel/pyenv
devel/rust-analyzer
dns/coredns
editors/emacs
editors/mg

@ -5,7 +5,7 @@ IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function main {
find / -type f -name times -exec sed -E -i '' 's/LASTBUILD=.*/LASTBUILD=0/' {} \;
sqlite3 /opt/poudriere/poudboot.sqlite3 "UPDATE local_action SET next_run=0 WHERE name='build';"
}
main "${@}"

@ -5,7 +5,7 @@ IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function main {
find / -type f -name times -exec sed -iE 's/PORTUPDATE=.*/PORTUPDATE=0/' {} \;
sqlite3 /opt/poudriere/poudboot.sqlite3 "UPDATE global_action SET next_run=0 WHERE name='update_ports_tree';"
}
main "${@}"

@ -26,6 +26,7 @@
- poudriere
- bash
- rsync
- rust-nightly # to build poudboot
state: present
- name: Create directories
@ -65,6 +66,11 @@
- src: poudriere.d
dest: /usr/local/etc/
- name: Install poudboot
command: "cargo install --profile release-lto --git 'https://code.fizz.buzz/talexander/poudboot.git'"
args:
creates: /root/.cargo/bin/poudboot
- name: Install scripts
copy:
src: "files/{{ item.src }}"
@ -73,8 +79,6 @@
owner: root
group: wheel
loop:
- src: poudboot.bash
dest: /usr/local/bin/poudboot
- src: poudriere_delete_jail.bash
dest: /usr/local/bin/poudriere_delete_jail
- src: poudriere_schedule_build.bash

@ -1,2 +1,4 @@
# Check that rust-analyzer is valid for date on https://rust-lang.github.io/rustup-components-history/
rust_date: "2024-03-28"
rust_date: "2024-04-29"
# rust_analyzer_version: 2024-04-29
rust_analyzer_version: package

@ -4,7 +4,15 @@
- rust-nightly
state: present
- name: Install packages
when: "rust_analyzer_version is defined and rust_analyzer_version == 'package'"
package:
name:
- rust-analyzer
state: present
- name: Create directories
when: "rust_analyzer_version is defined and rust_analyzer_version != 'package'"
file:
name: "{{ item }}"
state: directory
@ -15,14 +23,16 @@
- "/opt/rust-analyzer"
- name: Clone rust-analyzer Source
when: "rust_analyzer_version is defined and rust_analyzer_version != 'package'"
git:
repo: "https://github.com/rust-lang/rust-analyzer.git"
dest: /opt/rust-analyzer
version: "2024-04-01"
version: "{{ rust_analyzer_version }}"
force: true
diff: false
- name: Build rust-analyzer
when: "rust_analyzer_version is defined and rust_analyzer_version != 'package'"
command: "cargo build --release"
args:
creates: "/opt/rust-analyzer/target/release/rust-analyzer"

Loading…
Cancel
Save