From 958ed3fef7dd8e5b578cec113ed4ba18d30b688e Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Sat, 11 Jul 2026 21:03:48 +0200 Subject: [PATCH] Downgrade nur mit neuer Option --force --- AGENTS.md | 9 +++++++++ README.md | 6 ++++++ ollama-update | 27 ++++++++++++++++++++++----- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 6f32f79..9b28098 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,8 +12,17 @@ Single-file Bash script (`ollama-update`) that updates Ollama to latest stable o ./ollama-update --beta ./ollama-update -b +# Force installation of older version (downgrade) +./ollama-update --force +./ollama-update -f + +# Combine with beta channel +./ollama-update --beta --force +./ollama-update -b -f + # Show help ./ollama-update --help +./ollama-update -h ``` ## Lint / Check diff --git a/README.md b/README.md index d3a114b..35ecb00 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ weiter. ./ollama-update # Stable-Channel (Standard) ./ollama-update --beta # Beta-Channel ./ollama-update -b # Kurzform von --beta +./ollama-update --force # Installation älterer Version erzwingen +./ollama-update -f # Kurzform von --force ./ollama-update --help # Hilfe anzeigen ./ollama-update -h ``` @@ -46,6 +48,9 @@ selbst durchgeführt und kann Root-Rechte erfordern (z. B. wenn per Ollama-Installations-Skript heruntergeladen, ausführbar gemacht und ausgeführt. Bei einer Beta-Installation wird `OLLAMA_VERSION` auf den passenden Tag gesetzt. +7. **Downgrade-Schutz** – Ist die bereits installierte Version neuer als + die Zielversion, bricht das Skript standardmäßig ab. Mit `--force`/`-f` + lässt sich ein solches Downgrade dennoch erzwingen. 7. **Ausgabe** – Vor jeder Aktion werden die ermittelten Versionen (lokal, stable, beta) sowie die Entscheidung (Update/Installation/ kein Update) ausgegeben. @@ -66,6 +71,7 @@ Kein Update erforderlich. | Installationsverhalten | Führt immer eine Installation durch | Installiert nur, wenn kein Ollama vorhanden oder ein Update verfügbar ist | | Versionsprüfung | Keine | Vergleicht lokale Version mit Stable/Beta aus der GitHub-API | | Auswahl des Channels | Nur Stable | Stable oder Beta (`--beta`/`-b`) | +| Downgrade-Schutz | Kein Schutz | Downgrades werden blockiert, es sei denn, `--force`/`-f` wird gesetzt | | Ausgabe vor der Installation | Nur Statusmeldungen des Installers | Zeigt lokal/stable/beta-Versionen und die getroffene Entscheidung | | Versions-Pinning | Nicht vorgesehen | Übergibt `OLLAMA_VERSION` an den Installer, wenn eine konkrete Version gewünscht ist | | Abhängigkeitsprüfung | Fehlt | Prüft benötigte Kommandos (`curl`, `grep`, `sed`, …) vorab | diff --git a/ollama-update b/ollama-update index 3b7ef26..2ff5663 100755 --- a/ollama-update +++ b/ollama-update @@ -11,7 +11,7 @@ PROG_NAME=$(basename "$0") || { printf 'Fehler: basename fehlgeschlagen\n' >&2; readonly PROG_NAME usage() { - printf 'Verwendung: %s [--beta|-b]\n' "$PROG_NAME" >&2 + printf 'Verwendung: %s [--beta|-b] [--force|-f]\n' "$PROG_NAME" >&2 exit 2 } @@ -30,18 +30,24 @@ die() { } parse_args() { - local use_beta=false + local use_beta_ref=$1 + local force_ref=$2 + local use_beta_value=false + local force_value=false + shift 2 while [[ $# -gt 0 ]]; do case "$1" in - --beta|-b) use_beta=true ;; + --beta|-b) use_beta_value=true ;; + --force|-f) force_value=true ;; -h|--help) usage ;; *) usage ;; esac shift done - printf '%s\n' "$use_beta" + printf -v "$use_beta_ref" '%s' "$use_beta_value" + printf -v "$force_ref" '%s' "$force_value" } get_local_version() { @@ -167,10 +173,11 @@ install_ollama() { main() { local use_beta=false + local force_downgrade=false local local_ver stable_ver beta_ver local target_ver="" - use_beta=$(parse_args "$@") + parse_args use_beta force_downgrade "$@" check_dependencies local_ver=$(get_local_version) @@ -233,6 +240,16 @@ main() { fi fi + # Downgrade-Schutz: Eine Installation älterer Version als die bereits + # installierte nur mit --force/-f erlauben. + if [[ -n "$local_ver" && -n "$target_ver" && "$(cmp_versions "$target_ver" "$local_ver")" == -1 ]]; then + if [[ "$force_downgrade" != true ]]; then + printf 'Aktuelle Version %s ist neuer als Zielversion %s. Downgrade abgebrochen (verwende --force/-f, um es trotzdem durchzuführen).\n' "$local_ver" "$target_ver" >&2 + return 0 + fi + printf 'Downgrade wird erzwungen: %s -> %s\n' "$local_ver" "$target_ver" + fi + # Bei Beta-Installation die gewünschte Version an das Installer-Skript übergeben. if [[ "$use_beta" == true && -n "$target_ver" && "$target_ver" != "$stable_ver" ]]; then install_ollama "$target_ver"