Files
mission-control-v2/deploy/update-swap.sh
T
Hitonabi 4ee016d3a7 Feat: Auto-Rollback bei Engine-/Router-Update wenn Stack-Check fehlschlaegt
update-engine.sh / update-swap.sh sichern jetzt den alten Build/die alte Binary
VOR dem Ueberschreiben (.bak), verifizieren nach dem Restart per stack-postcheck.sh
und rollen bei Fehler automatisch zurueck (Binary/Dir wiederherstellen + restart +
erneut pruefen). Exit-Codes: 0 = neuer Build verifiziert, 1 = fehlgeschlagen aber
Rollback ok (alter Stand laeuft wieder), 2 = Update UND Rollback kaputt.

Da die Skripte den Postcheck nun selbst fahren (um reagieren zu koennen), entfaellt
das `&& stack-postcheck` in engine/swap-update-job. OS-Update behaelt den reinen
Detect-Check (apt-Downgrade waere unsicher). Backups sind winzig (Engine 86M,
Swap 14M) bei 1.6TB frei.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:34:41 +02:00

63 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Aktualisiert den llama-swap-Router (mostlygeek/llama-swap) auf den neuesten Release.
# Wird vom MC2-„Router Update"-Button via `sudo bash …` als ROOT aufgerufen
# (deshalb KEIN internes sudo). Ersetzt die Binary, startet llama-swap neu, VERIFIZIERT
# den Stack (stack-postcheck.sh) und ROLLT bei Fehler automatisch auf die alte Binary zurück.
#
# Exit 0 = neue Version verifiziert · 1 = fehlgeschlagen, Rollback ok (alte Version läuft)
# · 2 = Update UND Rollback fehlgeschlagen (Stack evtl. kaputt — bitte prüfen)
set -euo pipefail
SWAP_BIN="${MC_SWAP_BIN:-/usr/local/bin/llama-swap}"
BAK="${SWAP_BIN}.bak" # „letzte funktionierende Version" für Auto-Rollback
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
PIN_VER="${MC_SWAP_VERSION:-}" # leer = neuester Release
if [ -n "$PIN_VER" ]; then
TAG="$PIN_VER"
else
TAG="$(curl -s https://api.github.com/repos/mostlygeek/llama-swap/releases/latest | jq -r .tag_name)"
fi
[ -n "$TAG" ] && [ "$TAG" != "null" ] || { echo "Konnte neuesten Release-Tag nicht ermitteln"; exit 1; }
# Asset-Name nutzt die nackte Nummer (z.B. v230 -> 230): llama-swap_230_linux_amd64.tar.gz
NUM="${TAG#v}"
ASSET="llama-swap_${NUM}_linux_amd64.tar.gz"
URL="https://github.com/mostlygeek/llama-swap/releases/download/${TAG}/${ASSET}"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
echo "Lade llama-swap ${TAG}"
curl -fsSL -o "$TMP/s.tgz" "$URL"
tar xzf "$TMP/s.tgz" -C "$TMP"
NEW="$(find "$TMP" -type f -name llama-swap | head -1)"
[ -n "$NEW" ] || { echo "llama-swap-Binary im Archiv nicht gefunden"; exit 1; }
# Sicherung der aktuellen (funktionierenden) Binary VOR dem Überschreiben → Auto-Rollback.
[ -x "$SWAP_BIN" ] && cp -a "$SWAP_BIN" "$BAK"
install -m 0755 "$NEW" "$SWAP_BIN"
test -x "$SWAP_BIN"
systemctl restart llama-swap
echo "Router auf ${TAG} aktualisiert — verifiziere Stack…"
if bash "$SRC_DIR/stack-postcheck.sh"; then
echo "Router-Update ${TAG} erfolgreich verifiziert."
exit 0
fi
# --- Auto-Rollback auf die gesicherte Binary ---
echo "!! Stack-Check fehlgeschlagen — ROLLBACK auf vorherige Version."
if [ -x "$BAK" ]; then
cp -a "$BAK" "$SWAP_BIN"
systemctl restart llama-swap
echo "Vorherige Binary wiederhergestellt — prüfe Stack erneut…"
if bash "$SRC_DIR/stack-postcheck.sh"; then
echo "Rollback erfolgreich: vorherige llama-swap-Version läuft wieder. (Update ${TAG} NICHT angewendet.)"
exit 1
fi
echo "!!! Rollback-Check ebenfalls fehlgeschlagen — Stack möglicherweise kaputt!"
exit 2
fi
echo "!!! Kein Backup vorhanden — Rollback nicht möglich!"
exit 2