multi-os-install.sh aktualisiert
This commit is contained in:
+82
-24
@@ -108,45 +108,90 @@ done
|
||||
|
||||
[[ ${#VER_ORDER[@]} -eq 0 ]] && error "Konnte keine Versionsnummern aus den Templates extrahieren."
|
||||
|
||||
# ── Die 3 relevantesten Versionen bestimmen: vorherige / aktuelle / nächste ────
|
||||
# "Aktuell" = höchste stabile Version (letzte in der sortierten Liste)
|
||||
# "Vorherige" = eine davor
|
||||
# "Nächste" = falls vorhanden (Alpha/Beta/RC Templates in PVE)
|
||||
TOTAL=${#VER_ORDER[@]}
|
||||
CURRENT_IDX=$(( TOTAL - 1 ))
|
||||
# ── Immer genau 3 Versionen anzeigen: vorherige / aktuelle / nächste ───────────
|
||||
# PVE kennt oft nur 2 Versionen → nächste Version wird synthetisch erzeugt.
|
||||
# Debian: Major-Integer hochzählen (12 → 13 → 14)
|
||||
# Ubuntu: Jahreszahl um 2 erhöhen (24.04 → 26.04 → 28.04)
|
||||
|
||||
# Prüfen ob es eine "nächste" Version gibt (höher als die letzte stabile)
|
||||
# PVE-Datenbank enthält manchmal schon Beta-Templates → nehmen wir mit
|
||||
NEXT_IDX=$(( CURRENT_IDX + 1 )) # existiert nicht → wird unten abgefangen
|
||||
TOTAL=${#VER_ORDER[@]}
|
||||
CURRENT_IDX=$(( TOTAL - 1 )) # höchste bekannte = aktuell stabil
|
||||
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_LABELS=()
|
||||
declare -a SHOW_AVAIL=() # true/false ob Template in PVE vorhanden
|
||||
|
||||
# Vorherige Version (falls vorhanden)
|
||||
if (( PREV_IDX >= 0 )); then
|
||||
SHOW_VERS+=("${VER_ORDER[$PREV_IDX]}")
|
||||
SHOW_LABELS+=("Vorherige Version (${VER_ORDER[$PREV_IDX]})")
|
||||
# Slot 1: Vorherige Version
|
||||
SHOW_VERS+=("$PREV_VER")
|
||||
if $PREV_IN_PVE; then
|
||||
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
|
||||
|
||||
# Aktuelle Version (Standard)
|
||||
SHOW_VERS+=("${VER_ORDER[$CURRENT_IDX]}")
|
||||
SHOW_LABELS+=("Aktuelle Version (${VER_ORDER[$CURRENT_IDX]}) ← empfohlen")
|
||||
DEFAULT_VER_IDX=$(( ${#SHOW_VERS[@]} )) # 1-basierter Default für die Ausgabe
|
||||
# Slot 2: Aktuelle Version (Standard)
|
||||
SHOW_VERS+=("$CURRENT_VER")
|
||||
SHOW_LABELS+=("Aktuelle Version (${DISTRO_LABEL} ${CURRENT_VER}) ← empfohlen")
|
||||
SHOW_AVAIL+=("true")
|
||||
DEFAULT_VER_IDX=2 # 1-basiert → Slot 2 = aktuell
|
||||
|
||||
# Nächste Version (nur wenn tatsächlich ein neueres Template existiert)
|
||||
# → In der Praxis liefert PVE hier manchmal schon den nächsten LTS
|
||||
if (( NEXT_IDX < TOTAL )); then
|
||||
SHOW_VERS+=("${VER_ORDER[$NEXT_IDX]}")
|
||||
SHOW_LABELS+=("Nächste Version (${VER_ORDER[$NEXT_IDX]}) [experimentell]")
|
||||
# Slot 3: Nächste Version
|
||||
SHOW_VERS+=("$NEXT_VER")
|
||||
if $NEXT_VER_IN_PVE; then
|
||||
SHOW_LABELS+=("Nächste Version (${DISTRO_LABEL} ${NEXT_VER}) [experimentell]")
|
||||
SHOW_AVAIL+=("true")
|
||||
else
|
||||
SHOW_LABELS+=("Nächste Version (${DISTRO_LABEL} ${NEXT_VER}) [noch kein Template in PVE]")
|
||||
SHOW_AVAIL+=("false")
|
||||
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
|
||||
num=$(( i + 1 ))
|
||||
avail="${SHOW_AVAIL[$i]}"
|
||||
if (( num == DEFAULT_VER_IDX )); then
|
||||
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
|
||||
echo -e " ${BOLD}[${num}]${NC} ${SHOW_LABELS[$i]}"
|
||||
fi
|
||||
@@ -158,8 +203,21 @@ while true; do
|
||||
read -r ver_sel
|
||||
ver_sel="${ver_sel:-$DEFAULT_VER_IDX}"
|
||||
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))]}"
|
||||
# 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]}"
|
||||
fi
|
||||
success "Gewählt: ${BOLD}${DISTRO_LABEL} ${CHOSEN_VER}${NC} → ${CHOSEN_TEMPLATE}"
|
||||
break
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user