Files
challenge_status_tracker/install-timer.sh
T
Casually9790andClaude Opus 5.5 ec2f444ef3 Commit challs.txt once a day at 04:00, separate from the HedgeDoc refresh
The 30-minute timer now only updates the HedgeDoc note; a new
ctf-challs.timer runs --challs daily at 04:00. Locks are per target so
the two runs can overlap without one skipping.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 17:47:57 +02:00

45 lines
1.7 KiB
Bash
Executable File

#!/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 ctf_status.env / .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"
[ -x "$dir/ctf_status.py" ] || { echo "no executable ctf_status.py in $dir" >&2; exit 1; }
# ctf_status.py reads ctf_status.env and .env; either (or both) will do
set --
for f in "$dir/ctf_status.env" "$dir/.env"; do
if [ -f "$f" ]; then set -- "$@" "$f"; fi
done
[ $# -gt 0 ] || {
echo "no ctf_status.env or .env in $dir — copy ctf_status.env.example to one 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=..*" "$@" || { echo "set $key=... in $* first" >&2; exit 1; }
done
chmod 600 "$@"
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