wait for a package with a given commit before restarting
A bare restart picks up whatever is installed. r477 predates the two subconscious fixes, so restarting on it would have looked like delivery and shipped nothing. Gate proven before arming: rejects both currently-available packages, accepts only a descendant of NEED.
This commit is contained in:
parent
c66343f105
commit
912fb88881
1 changed files with 67 additions and 0 deletions
67
tools/sv-upgrade-restart.sh
Executable file
67
tools/sv-upgrade-restart.sh
Executable file
|
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Wait for an edge package that actually contains the subconscious fixes,
|
||||||
|
# upgrade to it, then restart the server.
|
||||||
|
#
|
||||||
|
# A bare restart would have been wrong: r477 (aa6cd4e) predates 877cad0 and
|
||||||
|
# 837e024, so restarting on it picks up config only and leaves her rescue on
|
||||||
|
# the shelf. This waits for a package whose git hash is a DESCENDANT of NEED.
|
||||||
|
#
|
||||||
|
# Disarm: systemctl --user stop sv-upgrade-restart.service
|
||||||
|
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
REPO=/home/casey/Projects/souveraine
|
||||||
|
NEED=${NEED:-837e024}
|
||||||
|
LOG=${LOG:-/tmp/sv-upgrade-restart.log}
|
||||||
|
DEADLINE_MIN=${DEADLINE_MIN:-60}
|
||||||
|
POLL_SEC=${POLL_SEC:-60}
|
||||||
|
|
||||||
|
exec >>"$LOG" 2>&1
|
||||||
|
|
||||||
|
say() { echo "$(date -Is) $*"; }
|
||||||
|
|
||||||
|
pkg_hash() {
|
||||||
|
# "0.1.r477.gaa6cd4e219bf-1" -> "aa6cd4e219bf"
|
||||||
|
local ver=$1 h
|
||||||
|
h=${ver##*.g}
|
||||||
|
h=${h%%-*}
|
||||||
|
printf '%s' "$h"
|
||||||
|
}
|
||||||
|
|
||||||
|
say "=== armed; waiting for a package containing $NEED ==="
|
||||||
|
say "installed now: $(pacman -Q souveraine 2>/dev/null || echo none)"
|
||||||
|
|
||||||
|
end=$(( $(date +%s) + DEADLINE_MIN * 60 ))
|
||||||
|
|
||||||
|
while [ "$(date +%s)" -lt "$end" ]; do
|
||||||
|
sudo -n pacman -Sy --noconfirm >/dev/null 2>&1
|
||||||
|
|
||||||
|
ver=$(pacman -Si souveraine 2>/dev/null | awk -F': +' '/^Version/{print $2; exit}')
|
||||||
|
if [ -z "${ver:-}" ]; then
|
||||||
|
say "repo did not answer a version — retrying"
|
||||||
|
sleep "$POLL_SEC"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
hash=$(pkg_hash "$ver")
|
||||||
|
if [ -n "$hash" ] && git -C "$REPO" merge-base --is-ancestor "$NEED" "$hash" 2>/dev/null; then
|
||||||
|
say "package $ver contains $NEED — upgrading"
|
||||||
|
if sudo -n pacman -S --noconfirm souveraine; then
|
||||||
|
say "upgraded to $(pacman -Q souveraine)"
|
||||||
|
say "restarting souveraine.service"
|
||||||
|
systemctl --user restart souveraine.service
|
||||||
|
say "restart issued (rc=$?)"
|
||||||
|
say "running: $(systemctl --user show souveraine.service -p MainPID --value)"
|
||||||
|
else
|
||||||
|
say "UPGRADE FAILED — not restarting; the old server keeps running"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
say "available $ver does not contain $NEED yet — waiting ${POLL_SEC}s"
|
||||||
|
sleep "$POLL_SEC"
|
||||||
|
done
|
||||||
|
|
||||||
|
say "TIMED OUT after ${DEADLINE_MIN}m — no package containing $NEED. Nothing restarted."
|
||||||
|
exit 2
|
||||||
Loading…
Reference in a new issue