diff --git a/post_install_v2.sh b/post_install_v2.sh index 1d9ac6f..03d9fea 100644 --- a/post_install_v2.sh +++ b/post_install_v2.sh @@ -1,99 +1,154 @@ #!/bin/bash # ===================================================== -# POST-INSTALL TOOLBOX (dialog GUI-Version) +# Proxmox VE: Debian 13 LXC automatisch erstellen (dialog) # ===================================================== -# Prüfen, ob Root -if [ "$EUID" -ne 0 ]; then - echo "Bitte als Root ausführen (sudo)" +set -e + +# ---- Konfiguration ---- +IP="10.60.10.2/24" +GATEWAY="10.60.10.1" +CORES=1 +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 -# Skripte (Name -> URL) -declare -A SCRIPTS -SCRIPTS["Get Host & SSD Serialnumbers"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/get_sn.sh" -SCRIPTS["Setup Mail Notification"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/setup-email.sh" -SCRIPTS["Set CPU Scaling Governor"]="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/scaling-governor.sh" -SCRIPTS["Intel e1000e Offload Fix"]="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/nic-offloading-fix.sh" -SCRIPTS["Set PVE Update Repos"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/set_pve_repos.sh" -SCRIPTS["Set PBS Update Repos"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/set_pbs_repos.sh" -SCRIPTS["Create PVE MGNT Bridge"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/create_pve-mgnt-vmbr.sh" -SCRIPTS["Create PVE MGNT LXC"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/create_pve-mgnt-lxc_v2.sh" -SCRIPTS["Install pcvisit RemoteHost on Windows VMs"]="https://me-gitea.maieredv.cloud/manuel.maier/pve-pbs-setup/raw/branch/main/install-pcvisit-remotehost.sh" - -# Reihenfolge festlegen -ORDER=( - "Get Host & SSD Serialnumbers" - "Setup Mail Notification" - "Set CPU Scaling Governor" - "Intel e1000e Offload Fix" - "Set PVE Update Repos" - "Set PBS Update Repos" - "Create PVE MGNT Bridge" - "Create PVE MGNT LXC" - "Install pcvisit RemoteHost on Windows VMs" +# ---- Root Passwort ---- +ROOTPASS=$( +$DIALOG --backtitle "$BACKTITLE" \ + --passwordbox "Root-Passwort für den LXC:" 10 60 \ + 2> "$TMPFILE" || exit 1 +cat "$TMPFILE" ) -# Prüfen, ob dialog installiert ist -if ! command -v dialog &>/dev/null; then - echo "Dialog nicht gefunden. Installiere..." - apt update && apt install -y dialog +# ---- 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 -# Funktion für Menü -run_menu() { - local OPTIONS=() - local i=1 - for key in "${ORDER[@]}"; do - OPTIONS+=("$i" "$key") - ((i++)) - done - OPTIONS+=("0" "Beenden") - - CHOICE=$(dialog --clear --title "POST-INSTALL TOOLBOX" \ - --menu "Wähle ein Script zum Ausführen:" 20 70 12 \ - "${OPTIONS[@]}" 2>&1 >/dev/tty) - - echo "$CHOICE" -} - -# Hauptloop -while true; do - CHOICE=$(run_menu) - - # Prüfen ob Abbrechen / Exit - if [ -z "$CHOICE" ] || [ "$CHOICE" == "0" ]; then - clear - echo "Bye! 👋" - exit 0 - fi - - # Auswahl validieren - if [[ "$CHOICE" =~ ^[0-9]+$ ]] && [ "$CHOICE" -ge 1 ] && [ "$CHOICE" -le ${#ORDER[@]} ]; then - key="${ORDER[$CHOICE-1]}" - url="${SCRIPTS[$key]}" - - dialog --infobox "Lade Script:\n$key\nVon: $url" 5 60 - tmpfile=$(mktemp) - curl -sSL "$url" -o "$tmpfile" - - if [ ! -s "$tmpfile" ]; then - dialog --msgbox "Fehler beim Download!" 5 40 - rm -f "$tmpfile" - continue - fi - - # Unter-Script in Subshell ausführen - clear - echo "========================================" - echo "Starte Script: $key" - echo "========================================" - bash "$tmpfile" - rm -f "$tmpfile" - - echo - read -rp "Fertig! Enter drücken für Menü..." _ - else - dialog --msgbox "Ungültige Auswahl! Bitte erneut versuchen." 5 50 - 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 +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 + exit 1 +fi + +# ---- Template laden ---- +TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE_NAME" +if [[ ! -f "$TEMPLATE_PATH" ]]; then + $DIALOG --infobox "Lade Template:\n$TEMPLATE_NAME" 6 60 + pveam download local "$TEMPLATE_NAME" +fi + +# ---- Zusammenfassung ---- +$DIALOG --backtitle "$BACKTITLE" \ + --yesno \ +"Zusammenfassung: + +Hostname: $HOSTNAME +VMID: $VMID +Storage: $STORAGE +IP: $IP +Bridge: $BRIDGE +RAM: ${MEMORY}MB +Cores: $CORES + +LXC jetzt erstellen?" 15 60 + +# ---- 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 ---- +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" + +# ---- Autostart ---- +pct set "$VMID" --onboot 1 + +# ---- Starten ---- +pct start "$VMID" + +# ---- Post-Install ---- +$DIALOG --infobox "Installiere Newt-PVE-MGNT im LXC..." 5 60 + +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