#!/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