multi-os-install.sh aktualisiert

This commit is contained in:
2026-05-25 06:35:26 +02:00
parent c2d03112cd
commit 0a08aeedbc
+82 -24
View File
@@ -108,45 +108,90 @@ done
[[ ${#VER_ORDER[@]} -eq 0 ]] && error "Konnte keine Versionsnummern aus den Templates extrahieren." [[ ${#VER_ORDER[@]} -eq 0 ]] && error "Konnte keine Versionsnummern aus den Templates extrahieren."
# ── Die 3 relevantesten Versionen bestimmen: vorherige / aktuelle / nächste ──── # ── Immer genau 3 Versionen anzeigen: vorherige / aktuelle / nächste ───────────
# "Aktuell" = höchste stabile Version (letzte in der sortierten Liste) # PVE kennt oft nur 2 Versionen → nächste Version wird synthetisch erzeugt.
# "Vorherige" = eine davor # Debian: Major-Integer hochzählen (12 → 13 → 14)
# "Nächste" = falls vorhanden (Alpha/Beta/RC Templates in PVE) # Ubuntu: Jahreszahl um 2 erhöhen (24.04 → 26.04 → 28.04)
TOTAL=${#VER_ORDER[@]}
CURRENT_IDX=$(( TOTAL - 1 ))
# Prüfen ob es eine "nächste" Version gibt (höher als die letzte stabile) TOTAL=${#VER_ORDER[@]}
# PVE-Datenbank enthält manchmal schon Beta-Templates → nehmen wir mit CURRENT_IDX=$(( TOTAL - 1 )) # höchste bekannte = aktuell stabil
NEXT_IDX=$(( CURRENT_IDX + 1 )) # existiert nicht → wird unten abgefangen
PREV_IDX=$(( CURRENT_IDX - 1 )) PREV_IDX=$(( CURRENT_IDX - 1 ))
# Verfügbare Slots bauen # Nächste Version berechnen
CURRENT_VER="${VER_ORDER[$CURRENT_IDX]}"
if [[ "$DISTRO" == "debian" ]]; then
NEXT_VER=$(( CURRENT_VER + 1 )) # z.B. 12 → 13
else
# Ubuntu: 24.04 → 26.04 (Jahr +2, Minor bleibt .04)
IFS='.' read -r uyr umn <<< "$CURRENT_VER"
NEXT_VER="$(( uyr + 2 )).${umn}"
fi
# Prüfen ob PVE die nächste Version bereits kennt
NEXT_VER_IN_PVE=false
NEXT_TEMPLATE_PVE=""
if [[ -n "${VER_TO_TEMPLATE[$NEXT_VER]+x}" ]]; then
NEXT_VER_IN_PVE=true
NEXT_TEMPLATE_PVE="${VER_TO_TEMPLATE[$NEXT_VER]}"
fi
# Vorherige Version: entweder aus PVE oder synthetisch
if (( PREV_IDX >= 0 )); then
PREV_VER="${VER_ORDER[$PREV_IDX]}"
PREV_IN_PVE=true
PREV_TEMPLATE="${VER_TO_TEMPLATE[$PREV_VER]}"
else
# Synthetisch rückwärts berechnen
if [[ "$DISTRO" == "debian" ]]; then
PREV_VER=$(( CURRENT_VER - 1 ))
else
IFS='.' read -r uyr umn <<< "$CURRENT_VER"
PREV_VER="$(( uyr - 2 )).${umn}"
fi
PREV_IN_PVE=false
PREV_TEMPLATE=""
fi
# ── Anzeige-Arrays aufbauen ────────────────────────────────────────────────────
declare -a SHOW_VERS=() declare -a SHOW_VERS=()
declare -a SHOW_LABELS=() declare -a SHOW_LABELS=()
declare -a SHOW_AVAIL=() # true/false ob Template in PVE vorhanden
# Vorherige Version (falls vorhanden) # Slot 1: Vorherige Version
if (( PREV_IDX >= 0 )); then SHOW_VERS+=("$PREV_VER")
SHOW_VERS+=("${VER_ORDER[$PREV_IDX]}") if $PREV_IN_PVE; then
SHOW_LABELS+=("Vorherige Version (${VER_ORDER[$PREV_IDX]})") SHOW_LABELS+=("Vorherige Version (${DISTRO_LABEL} ${PREV_VER})")
SHOW_AVAIL+=("true")
else
SHOW_LABELS+=("Vorherige Version (${DISTRO_LABEL} ${PREV_VER}) [kein Template in PVE]")
SHOW_AVAIL+=("false")
fi fi
# Aktuelle Version (Standard) # Slot 2: Aktuelle Version (Standard)
SHOW_VERS+=("${VER_ORDER[$CURRENT_IDX]}") SHOW_VERS+=("$CURRENT_VER")
SHOW_LABELS+=("Aktuelle Version (${VER_ORDER[$CURRENT_IDX]}) ← empfohlen") SHOW_LABELS+=("Aktuelle Version (${DISTRO_LABEL} ${CURRENT_VER}) ← empfohlen")
DEFAULT_VER_IDX=$(( ${#SHOW_VERS[@]} )) # 1-basierter Default für die Ausgabe SHOW_AVAIL+=("true")
DEFAULT_VER_IDX=2 # 1-basiert → Slot 2 = aktuell
# Nächste Version (nur wenn tatsächlich ein neueres Template existiert) # Slot 3: Nächste Version
# → In der Praxis liefert PVE hier manchmal schon den nächsten LTS SHOW_VERS+=("$NEXT_VER")
if (( NEXT_IDX < TOTAL )); then if $NEXT_VER_IN_PVE; then
SHOW_VERS+=("${VER_ORDER[$NEXT_IDX]}") SHOW_LABELS+=("Nächste Version (${DISTRO_LABEL} ${NEXT_VER}) [experimentell]")
SHOW_LABELS+=("Nächste Version (${VER_ORDER[$NEXT_IDX]}) [experimentell]") SHOW_AVAIL+=("true")
else
SHOW_LABELS+=("Nächste Version (${DISTRO_LABEL} ${NEXT_VER}) [noch kein Template in PVE]")
SHOW_AVAIL+=("false")
fi fi
echo -e " Gefundene ${DISTRO_LABEL}-Versionen:\n" # ── Versionsauswahl ausgeben ───────────────────────────────────────────────────
echo -e " ${DISTRO_LABEL}-Versionen (aus PVE-Datenbank + Berechnung):\n"
for i in "${!SHOW_VERS[@]}"; do for i in "${!SHOW_VERS[@]}"; do
num=$(( i + 1 )) num=$(( i + 1 ))
avail="${SHOW_AVAIL[$i]}"
if (( num == DEFAULT_VER_IDX )); then if (( num == DEFAULT_VER_IDX )); then
echo -e " ${BOLD}[${num}]${NC} ${GREEN}${SHOW_LABELS[$i]}${NC}" echo -e " ${BOLD}[${num}]${NC} ${GREEN}${SHOW_LABELS[$i]}${NC}"
elif [[ "$avail" == "false" ]]; then
echo -e " ${BOLD}[${num}]${NC} ${RED}${SHOW_LABELS[$i]}${NC} ← nicht wählbar"
else else
echo -e " ${BOLD}[${num}]${NC} ${SHOW_LABELS[$i]}" echo -e " ${BOLD}[${num}]${NC} ${SHOW_LABELS[$i]}"
fi fi
@@ -158,8 +203,21 @@ while true; do
read -r ver_sel read -r ver_sel
ver_sel="${ver_sel:-$DEFAULT_VER_IDX}" ver_sel="${ver_sel:-$DEFAULT_VER_IDX}"
if [[ "$ver_sel" =~ ^[0-9]+$ ]] && (( ver_sel >= 1 && ver_sel <= ${#SHOW_VERS[@]} )); then if [[ "$ver_sel" =~ ^[0-9]+$ ]] && (( ver_sel >= 1 && ver_sel <= ${#SHOW_VERS[@]} )); then
# Nicht wählbar wenn kein Template vorhanden
if [[ "${SHOW_AVAIL[$((ver_sel-1))]}" == "false" ]]; then
warn "Für ${DISTRO_LABEL} ${SHOW_VERS[$((ver_sel-1))]} ist noch kein Template in PVE verfügbar."
warn "Bitte wähle eine der verfügbaren Versionen."
continue
fi
CHOSEN_VER="${SHOW_VERS[$((ver_sel-1))]}" CHOSEN_VER="${SHOW_VERS[$((ver_sel-1))]}"
# Template zuweisen (aus PVE-Map oder vorherige)
if [[ "$ver_sel" == "1" ]] && $PREV_IN_PVE; then
CHOSEN_TEMPLATE="$PREV_TEMPLATE"
elif [[ "$ver_sel" == "3" ]] && $NEXT_VER_IN_PVE; then
CHOSEN_TEMPLATE="$NEXT_TEMPLATE_PVE"
else
CHOSEN_TEMPLATE="${VER_TO_TEMPLATE[$CHOSEN_VER]}" CHOSEN_TEMPLATE="${VER_TO_TEMPLATE[$CHOSEN_VER]}"
fi
success "Gewählt: ${BOLD}${DISTRO_LABEL} ${CHOSEN_VER}${NC}${CHOSEN_TEMPLATE}" success "Gewählt: ${BOLD}${DISTRO_LABEL} ${CHOSEN_VER}${NC}${CHOSEN_TEMPLATE}"
break break
else else