#!/bin/bash # ===================================================== # Proxmox VE: Debian 13 LXC automatisch erstellen (dialog) # ===================================================== 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 # ---- 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 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