4ee016d3a7
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>
68 lines
2.5 KiB
Bash
68 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
# Aktualisiert den Vulkan-llama.cpp-Build auf den neuesten ggml-org-Release.
|
|
# Wird vom MC2-„Engine Update"-Button via `sudo bash …` als ROOT aufgerufen
|
|
# (deshalb KEIN internes sudo). Startet llama-swap neu, VERIFIZIERT den Stack
|
|
# (stack-postcheck.sh) und ROLLT bei Fehler automatisch auf den vorherigen Build zurück.
|
|
#
|
|
# Exit 0 = neuer Build verifiziert · 1 = fehlgeschlagen, Rollback ok (alter Build läuft)
|
|
# · 2 = Update UND Rollback fehlgeschlagen (Stack evtl. kaputt — bitte prüfen)
|
|
set -euo pipefail
|
|
|
|
VULKAN_DIR=/opt/llamacpp-vulkan
|
|
BAK_DIR=/opt/llamacpp-vulkan.bak # „letzter funktionierender Build" für Auto-Rollback
|
|
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PIN_BUILD="${MC_ENGINE_BUILD:-}" # leer = neuester Release
|
|
|
|
if [ -n "$PIN_BUILD" ]; then
|
|
TAG="$PIN_BUILD"
|
|
else
|
|
TAG="$(curl -s https://api.github.com/repos/ggml-org/llama.cpp/releases/latest | jq -r .tag_name)"
|
|
fi
|
|
[ -n "$TAG" ] && [ "$TAG" != "null" ] || { echo "Konnte neuesten Release-Tag nicht ermitteln"; exit 1; }
|
|
|
|
ASSET="llama-${TAG}-bin-ubuntu-vulkan-x64.tar.gz"
|
|
URL="https://github.com/ggml-org/llama.cpp/releases/download/${TAG}/${ASSET}"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
echo "Lade Engine ${TAG} …"
|
|
curl -fsSL -o "$TMP/v.tgz" "$URL"
|
|
tar xzf "$TMP/v.tgz" -C "$TMP"
|
|
|
|
# Sicherung des aktuellen (funktionierenden) Builds VOR dem Überschreiben → Auto-Rollback.
|
|
if [ -d "$VULKAN_DIR" ]; then
|
|
echo "Sichere aktuellen Build → ${BAK_DIR}"
|
|
rm -rf "$BAK_DIR"
|
|
cp -a "$VULKAN_DIR" "$BAK_DIR"
|
|
fi
|
|
|
|
mkdir -p "$VULKAN_DIR"
|
|
cp -rf "$TMP"/llama-*/. "$VULKAN_DIR"/
|
|
test -x "$VULKAN_DIR/llama-server"
|
|
ln -sfn "$VULKAN_DIR/llama-server" /usr/local/bin/llama-server
|
|
systemctl restart llama-swap
|
|
|
|
echo "Engine auf ${TAG} aktualisiert — verifiziere Stack…"
|
|
if bash "$SRC_DIR/stack-postcheck.sh"; then
|
|
echo "Engine-Update ${TAG} erfolgreich verifiziert."
|
|
exit 0
|
|
fi
|
|
|
|
# --- Auto-Rollback auf den gesicherten Build ---
|
|
echo "!! Stack-Check fehlgeschlagen — ROLLBACK auf vorherigen Build."
|
|
if [ -d "$BAK_DIR" ]; then
|
|
rm -rf "$VULKAN_DIR"
|
|
cp -a "$BAK_DIR" "$VULKAN_DIR"
|
|
ln -sfn "$VULKAN_DIR/llama-server" /usr/local/bin/llama-server
|
|
systemctl restart llama-swap
|
|
echo "Vorheriger Build wiederhergestellt — prüfe Stack erneut…"
|
|
if bash "$SRC_DIR/stack-postcheck.sh"; then
|
|
echo "Rollback erfolgreich: vorheriger Build 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
|