#!/bin/bash # ===================================================== # Proxmox VE: Debian 13 LXC automatisch erstellen # Hostname: -MGNT # Unprivilegiert # Automatisches Debian 13 Template # WebUI-Konsole funktioniert # Autostart aktiviert # Dialog-basierte GUI + Statusfenster # ===================================================== # ---- Farben / Layout ---- BOLD="\033[1m" GREEN="\033[32m" CYAN="\033[36m" RED="\033[31m" RESET="\033[0m" INDENT=" " # ---- Root Check ---- if [[ $EUID -ne 0 ]]; then dialog --msgbox "Bitte als Root ausführen!" 8 40 exit 1 fi # ---- Root Passwort ---- ROOTPASS=$(dialog --title "Root Passwort" --passwordbox "Root-Passwort für den LXC:" 8 40 3>&1 1>&2 2>&3 3>&-) clear # ---- Hostname & VMID ---- HOSTNAME="$(hostname)-MGNT" VMID=300 while pct status $VMID &>/dev/null; do ((VMID++)); done dialog --msgbox "Hostname: $HOSTNAME\nNächste freie VMID: $VMID" 10 50 # ---- Storage Auswahl ---- mapfile -t STORAGES < <(pvesm status --content rootdir | awk 'NR>1 {print $1}') STORAGE_CHOICES=() for i in "${!STORAGES[@]}"; do STORAGE_CHOICES+=("$i" "${STORAGES[$i]}" "off") done STORAGE_INDEX=$(dialog --title "Storage Auswahl" --radiolist \ "Welcher Storage für RootFS?" 15 50 5 \ "${STORAGE_CHOICES[@]}" 3>&1 1>&2 2>&3 3>&-) STORAGE="${STORAGES[$STORAGE_INDEX]}" clear # ---- VMBR Auswahl ---- mapfile -t BRIDGES < <(grep -Po '^auto \K.*' /etc/network/interfaces) BRIDGE_CHOICES=() for i in "${!BRIDGES[@]}"; do BRIDGE_CHOICES+=("$i" "${BRIDGES[$i]}" "off") done BRIDGE_INDEX=$(dialog --title "Bridge Auswahl" --radiolist \ "Welche Bridge soll der LXC nutzen?" 15 50 5 \ "${BRIDGE_CHOICES[@]}" 3>&1 1>&2 2>&3 3>&-) BRIDGE="${BRIDGES[$BRIDGE_INDEX]}" clear # ---- IP / Netzwerk ---- IP="10.60.10.2/24" GATEWAY="10.60.10.1" CORES=1 MEMORY=512 SWAP=0 ROOTFS_SIZE=8 # ---- Template automatisch wählen ---- dialog --infobox "Suche aktuelles Debian 13 Template..." 5 50 pveam update 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 # ---- Temp-Log für Status ---- LOGFILE=$(mktemp) run_with_progress() { local CMD="$1" echo -e ">>> $CMD" >> "$LOGFILE" bash -c "$CMD" >> "$LOGFILE" 2>&1 & PID=$! dialog --title "LXC Setup: $HOSTNAME" --progressbox "$LOGFILE" 20 80 wait $PID } # ---- Template prüfen / herunterladen ---- TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE_NAME" if [[ ! -f "$TEMPLATE_PATH" ]]; then run_with_progress "pveam download local $TEMPLATE_NAME" fi # ---- LXC erstellen ---- 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" if [[ -n "$ROOTPASS" ]]; then CREATE_CMD="$CREATE_CMD --password $ROOTPASS" fi run_with_progress "$CREATE_CMD" # ---- WebUI-Konsole aktivieren (modern) ---- CONF_FILE="/etc/pve/lxc/$VMID.conf" echo "lxc.tty.max = 2" >> "$CONF_FILE" echo "lxc.pty.max = 2" >> "$CONF_FILE" echo "features: nesting=1,keyctl=1" >> "$CONF_FILE" # ---- Autostart aktivieren ---- run_with_progress "pct set $VMID --onboot 1" # ---- Container starten ---- run_with_progress "pct start $VMID" # ---- Software im LXC installieren ---- run_with_progress "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 '" dialog --msgbox "✔ Unprivilegierter LXC $HOSTNAME (VMID $VMID) erstellt, gestartet und Autostart aktiviert!" 8 60 clear rm -f "$LOGFILE"