multi-os-install.sh aktualisiert
This commit is contained in:
+83
-25
@@ -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))]}"
|
||||||
CHOSEN_TEMPLATE="${VER_TO_TEMPLATE[$CHOSEN_VER]}"
|
# 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}"
|
success "Gewählt: ${BOLD}${DISTRO_LABEL} ${CHOSEN_VER}${NC} → ${CHOSEN_TEMPLATE}"
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user