#!/usr/bin/env sh # Install the 30-minute HedgeDoc refresh and the daily 04:00 challs.txt commit # as systemd *user* units. # Run it as the user that owns .env, on the machine that should do the polling. # Re-running it is safe; it just overwrites the units. set -eu dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P) units="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user" env="$dir/.env" [ -x "$dir/ctf_status.py" ] || { echo "no executable ctf_status.py in $dir" >&2; exit 1; } [ -f "$env" ] || { echo "no .env in $dir — copy .env.example to .env first" >&2; exit 1; } # the timers run --update and --challs, which need these two for key in HEDGEDOC_NOTE CHALLS_REPO_URL; do grep -qi "^$key=..*" "$env" || { echo "set $key=... in $env first" >&2; exit 1; } done chmod 600 "$env" mkdir -p "$units" for u in ctf-status.service ctf-status.timer ctf-challs.service ctf-challs.timer; do sed "s|__DIR__|$dir|g" "$dir/$u" > "$units/$u" echo "installed $units/$u" done systemctl --user daemon-reload systemctl --user enable --now ctf-status.timer ctf-challs.timer # without lingering, user units are torn down as soon as you log out if ! loginctl show-user "$(id -un)" -p Linger --value 2>/dev/null | grep -qx yes; then loginctl enable-linger "$(id -un)" 2>/dev/null \ || echo "could not enable linger; run: sudo loginctl enable-linger $(id -un)" >&2 fi echo echo "one run of each now, to prove they work:" systemctl --user start ctf-status.service ctf-challs.service && echo " ok" systemctl --user list-timers ctf-status.timer ctf-challs.timer --no-pager