diff --git a/create_pve-mgnt-lxc_v2.sh b/create_pve-mgnt-lxc_v2.sh index 03d9fea..b8669e8 100644 --- a/create_pve-mgnt-lxc_v2.sh +++ b/create_pve-mgnt-lxc_v2.sh @@ -1,11 +1,73 @@ #!/bin/bash # ===================================================== -# Proxmox VE: Debian 13 LXC automatisch erstellen (dialog) +# Proxmox VE: Debian 13 LXC automatisch erstellen +# Hostname: -MGNT +# Unprivilegiert +# Automatisches Debian 13 Template +# WebUI-Konsole funktioniert +# Autostart aktiviert +# Dialog-basiert # ===================================================== -set -e +# ---- Farben für Terminal-Ausgabe ---- +BOLD="\033[1m" +GREEN="\033[32m" +CYAN="\033[36m" +RED="\033[31m" +RESET="\033[0m" +INDENT=" " -# ---- Konfiguration ---- +# ---- Root Check ---- +if [[ $EUID -ne 0 ]]; then + echo -e "${RED}${INDENT}Bitte als Root ausführen!${RESET}" + exit 1 +fi + +# ---- Dynamischer Hostname ---- +HOSTNAME="$(hostname)-MGNT" + +# ---- Nächste freie VMID ab 300 ---- +MIN_VMID=300 +VMID=$MIN_VMID +while pct status $VMID &>/dev/null; do + ((VMID++)) +done + +# ---- Storage auswählen ---- +mapfile -t STORAGES < <(pvesm status --content rootdir | awk 'NR>1 {print $1}') + +if [[ ${#STORAGES[@]} -eq 0 ]]; then + echo -e "${RED}${INDENT}Kein geeigneter Storage gefunden!${RESET}" + exit 1 +fi + +STORAGE_OPTIONS=() +for i in "${!STORAGES[@]}"; do + STORAGE_OPTIONS+=("$i" "${STORAGES[$i]}") +done + +STORAGE_INDEX=$(dialog --clear --stdout \ + --title "LXC RootFS Storage wählen" \ + --menu "Wähle den Storage für den LXC RootFS" 15 50 5 \ + "${STORAGE_OPTIONS[@]}") + +if [ $? -ne 0 ]; then + echo -e "${RED}${INDENT}Abgebrochen${RESET}" + clear + exit 1 +fi +STORAGE="${STORAGES[$STORAGE_INDEX]}" + +# ---- Root-Passwort abfragen ---- +ROOTPASS=$(dialog --clear --stdout --title "Root-Passwort für LXC" \ + --insecure --passwordbox "Gib ein Root-Passwort für den LXC ein:" 10 50) +if [ $? -ne 0 ]; then + echo -e "${RED}${INDENT}Abgebrochen${RESET}" + clear + exit 1 +fi + +# ---- LXC Settings ---- IP="10.60.10.2/24" GATEWAY="10.60.10.1" CORES=1 @@ -13,142 +75,63 @@ MEMORY=512 SWAP=0 ROOTFS_SIZE=8 BRIDGE="xx_vmbrmgt" -MIN_VMID=300 -DIALOG=dialog -BACKTITLE="Proxmox VE LXC Installer" -TMPFILE=$(mktemp) - -cleanup() { - rm -f "$TMPFILE" -} -trap cleanup EXIT - -# ---- Root Check ---- -if [[ $EUID -ne 0 ]]; then - echo "Bitte als Root ausführen!" - exit 1 -fi - -# ---- Root Passwort ---- -ROOTPASS=$( -$DIALOG --backtitle "$BACKTITLE" \ - --passwordbox "Root-Passwort für den LXC:" 10 60 \ - 2> "$TMPFILE" || exit 1 -cat "$TMPFILE" -) - -# ---- Hostname ---- -HOSTNAME="$(hostname)-MGNT" - -$DIALOG --backtitle "$BACKTITLE" \ - --msgbox "LXC Hostname:\n\n$HOSTNAME" 8 50 - -# ---- VMID ermitteln ---- -VMID=$MIN_VMID -while pct status "$VMID" &>/dev/null; do - ((VMID++)) -done - -# ---- Storage Auswahl ---- -mapfile -t STORAGES < <(pvesm status --content rootdir | awk 'NR>1 {print $1}') - -if [[ ${#STORAGES[@]} -eq 0 ]]; then - $DIALOG --msgbox "Kein geeigneter Storage gefunden!" 8 50 - exit 1 -fi - -MENU_ITEMS=() -for i in "${!STORAGES[@]}"; do - MENU_ITEMS+=("$i" "${STORAGES[$i]}") -done - -STORAGE_INDEX=$( -$DIALOG --backtitle "$BACKTITLE" \ - --menu "Storage für RootFS auswählen:" 15 60 6 \ - "${MENU_ITEMS[@]}" \ - 2> "$TMPFILE" || exit 1 -cat "$TMPFILE" -) - -STORAGE="${STORAGES[$STORAGE_INDEX]}" - -# ---- Template suchen ---- -$DIALOG --infobox "Suche aktuelles Debian 13 Template..." 5 50 +# ---- Template automatisch wählen ---- pveam update >/dev/null - TEMPLATE_NAME=$(pveam available | awk '/debian-13-standard_.*_amd64\.tar\.zst/ {print $2}' | tail -n1) - if [[ -z "$TEMPLATE_NAME" ]]; then - $DIALOG --msgbox "Kein Debian 13 Template gefunden!" 8 50 + dialog --msgbox "Kein Debian 13 Template gefunden!" 10 50 + clear exit 1 fi -# ---- Template laden ---- +# ---- Template prüfen / herunterladen ---- TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE_NAME" if [[ ! -f "$TEMPLATE_PATH" ]]; then - $DIALOG --infobox "Lade Template:\n$TEMPLATE_NAME" 6 60 + dialog --infobox "Template $TEMPLATE_NAME wird heruntergeladen..." 5 50 pveam download local "$TEMPLATE_NAME" fi -# ---- Zusammenfassung ---- -$DIALOG --backtitle "$BACKTITLE" \ - --yesno \ -"Zusammenfassung: +# ---- Container erstellen ---- +dialog --infobox "Erstelle unprivilegierten LXC $HOSTNAME (VMID: $VMID)..." 5 50 -Hostname: $HOSTNAME -VMID: $VMID -Storage: $STORAGE -IP: $IP -Bridge: $BRIDGE -RAM: ${MEMORY}MB -Cores: $CORES +CREATE_CMD="pct create $VMID local:vztmpl/$TEMPLATE_NAME \ +--hostname $HOSTNAME \ +--cores $CORES \ +--memory $MEMORY \ +--swap $SWAP \ +--rootfs $STORAGE:$ROOTFS_SIZE \ +--net0 name=eth0,bridge=$BRIDGE,ip=$IP,gw=$GATEWAY,type=veth \ +--unprivileged 1 \ +--password $ROOTPASS" -LXC jetzt erstellen?" 15 60 +eval $CREATE_CMD || { + dialog --msgbox "Fehler beim Erstellen des LXC!" 10 50 + clear + exit 1 +} -# ---- LXC erstellen ---- -$DIALOG --infobox "Erstelle unprivilegierten LXC..." 5 50 - -pct create "$VMID" "local:vztmpl/$TEMPLATE_NAME" \ - --hostname "$HOSTNAME" \ - --cores "$CORES" \ - --memory "$MEMORY" \ - --swap "$SWAP" \ - --rootfs "$STORAGE:$ROOTFS_SIZE" \ - --net0 "name=eth0,bridge=$BRIDGE,ip=$IP,gw=$GATEWAY,type=veth" \ - --unprivileged 1 \ - --password "$ROOTPASS" - -# ---- WebUI Konsole ---- +# ---- WebUI-Konsole aktivieren ---- CONF_FILE="/etc/pve/lxc/$VMID.conf" -{ - echo "lxc.tty.max = 2" - echo "lxc.pty.max = 2" - echo "features: nesting=1,keyctl=1" -} >> "$CONF_FILE" +echo "lxc.tty.max = 2" >> "$CONF_FILE" +echo "lxc.pty.max = 2" >> "$CONF_FILE" +echo "features: nesting=1,keyctl=1" >> "$CONF_FILE" -# ---- Autostart ---- -pct set "$VMID" --onboot 1 +# ---- Autostart aktivieren ---- +pct set $VMID --onboot 1 -# ---- Starten ---- -pct start "$VMID" +# ---- Container starten ---- +dialog --infobox "Starte LXC..." 5 50 +pct start $VMID -# ---- Post-Install ---- -$DIALOG --infobox "Installiere Newt-PVE-MGNT im LXC..." 5 60 - -pct exec "$VMID" -- bash -c " +# ---- Newt installieren ---- +dialog --infobox "Installiere Newt-PVE-Mgnt im LXC..." 5 50 +pct exec $VMID -- bash -c " apt update && apt install -y curl sudo && curl -fsSL https://gitea.vmd55888.de/manuel.maier/update-install-newt/raw/branch/main/install_newt_v2.sh -o install_newt_v2.sh && bash ./install_newt_v2.sh --install " -# ---- Fertig ---- -$DIALOG --backtitle "$BACKTITLE" \ - --msgbox \ -"LXC erfolgreich erstellt! - -Name: $HOSTNAME -VMID: $VMID -Autostart: aktiv -Status: gestartet" 10 50 +dialog --msgbox "✔ Unprivilegierter LXC $HOSTNAME (VMID $VMID) erstellt, gestartet und Autostart aktiviert!" 10 50 +clear