#! /bin/bash source "$DGL_CONF_HOME/dgl-manage.conf" DGL_CONF_LOCK_DIR="$DGL_CONF_HOME/locks" declare -a DGL_LOCKS DGL_LOCKS=() PROMPTS_ENABLED= GIVE_HELP= help() { if [[ -n "$GIVE_HELP" ]]; then cat echo exit 0 fi } dgl-run() { "$0" "$@" } say() { echo ";;;; $@" } say-do() { echo "[EXEC] $@" "$@" } running-as-root() { [[ "$UID" == "0" ]] } assert-running-as-root() { if ! running-as-root; then abort-saying "$SCRIPT_NAME needs to be run as root" fi } not-running-as-root() { [[ "$UID" != "0" ]] } each-do() { local cmd="$1" shift for arg in "$@"; do $cmd "$arg" done } announce() { echo echo "---------------------------------------------------------------------" echo "$@" echo "$@" >>$ANNOUNCEMENTS_FILE } abort-saying() { echo -e "$@, aborting." exit 1 } # Call with any argument to disable prompts enable-prompts() { local opt while getopts p opt; do PROMPTS_ENABLED=1 done shift $((OPTIND - 1)) # Would be nice to be able to modify the caller's arguments... } prompts-enabled() { [[ -n "$PROMPTS_ENABLED" && -t 0 ]] } prompt() { if prompts-enabled; then echo "-- Press RETURN to $@ --" read else say "$@" fi } unlock-dgl-locks() { if (( "${#DGL_LOCKS[@]}" > 0 )); then rm -f ${DGL_LOCKS[@]} fi } unlock-on-error() { unlock-dgl-locks exit 1 } trap-lock-hook-cleanup() { if [[ -z "$DGL_TRAP_LOCK_CLEANUP_HOOKED" ]]; then trap unlock-on-error INT TERM trap unlock-dgl-locks EXIT DGL_TRAP_LOCK_CLEANUP_HOOKED=1 fi } lock-or-die() { local lock_name=$1 mkdir -p "$DGL_CONF_LOCK_DIR" local lock_file="$DGL_CONF_LOCK_DIR/${lock_name}.lock" shift || true if ( set -o noclobber; echo "$$" > "$lock_file" ) 2>/dev/null; then DGL_LOCKS=(${DGL_LOCKS[@]} "$lock_file") trap-lock-hook-cleanup else echo "Could not lock $lock_file: $@" exit 1 fi } dgl-today() { date +%y%m%d-%H%M } cat-error() { cat >&2 } assert-chroot-exists() { if [[ ! -d "$DGL_CHROOT" ]]; then cat-error <