diff options
Diffstat (limited to 'bin/svtree-compile')
| -rwxr-xr-x | bin/svtree-compile | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/bin/svtree-compile b/bin/svtree-compile new file mode 100755 index 0000000..3e8e63c --- /dev/null +++ b/bin/svtree-compile @@ -0,0 +1,30 @@ +#!/bin/sh +set -eu + +LIVE_DIR=${LIVE_DIR:-/run/s6-rc} +STATE_DIR=${STATE_DIR:-/etc/s6-rc} +SOURCE_DIR=${SOURCE_DIR:-/etc/s6-rc/src} + +new_dir="$STATE_DIR"/"_$(date +%s)" + +main() { + local old + old="$(find "$STATE_DIR" -maxdepth 1 -name '_[0-9]*' -print)" + + # compile new db + s6-rc-compile "$new_dir" "$SOURCE_DIR" + + # switch to new db (if there's an active tree) + test -e "$LIVE_DIR" && s6-rc-update -v2 -l "$LIVE_DIR" -b "$new_dir" + + # swap current db + s6-ln -snf "$new_dir" "$STATE_DIR"/compiled + + # cleanup old db + # NOTE: needs to be unquoted for expansion to work + rm -rf -- $old +} + +command -v s6-ln >/dev/null 2>&1 || exit 1 + +main || rm -rf "$new_dir" |