Downgrade nur mit neuer Option --force

This commit is contained in:
Tim
2026-07-11 21:03:48 +02:00
parent 6d47e5ec79
commit 958ed3fef7
3 changed files with 37 additions and 5 deletions
+9
View File
@@ -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
+6
View File
@@ -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 |
+22 -5
View File
@@ -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"