From c85bdc6a54b0523e3d4c5d9ab698c1641d3ac35b Mon Sep 17 00:00:00 2001 From: "manuel.maier" Date: Tue, 27 Jan 2026 23:19:27 +0100 Subject: [PATCH] =?UTF-8?q?create=5Fpve-mgnt-lxc=5Fv2.sh=20hinzugef=C3=BCg?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create_pve-mgnt-lxc_v2.sh | 157 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 create_pve-mgnt-lxc_v2.sh diff --git a/create_pve-mgnt-lxc_v2.sh b/create_pve-mgnt-lxc_v2.sh new file mode 100644 index 0000000..14f219d --- /dev/null +++ b/create_pve-mgnt-lxc_v2.sh @@ -0,0 +1,157 @@ +#!/bin/bash +# ===================================================== +# Proxmox VE: Debian 13 LXC automatisch erstellen +# Hostname: -MGNT +# Unprivilegiert +# Automatisches Debian 13 Template +# WebUI-Konsole funktioniert +# Autostart aktiviert +# ===================================================== + +# ---- Farben / Layout ---- +BOLD="\033[1m" +GREEN="\033[32m" +CYAN="\033[36m" +RED="\033[31m" +YELLOW="\033[33m" +RESET="\033[0m" +INDENT=" " + +# ---- Root Check ---- +if [[ $EUID -ne 0 ]]; then + echo -e "${RED}${INDENT}Bitte als Root ausführen!${RESET}" + exit 1 +fi + +# ---- GUI Header ---- +draw_header() { + clear + echo -e "${CYAN}${BOLD}" + echo -e "${INDENT}=========================================" + echo -e "${INDENT} PROXMOX LXC CREATOR " + echo -e "${INDENT}=========================================" + echo -e "${RESET}" +} + +# ---- Root-Passwort abfragen ---- +draw_header +read -s -p "${INDENT}Root-Passwort für LXC: " ROOTPASS +echo + +# ---- Dynamischer Hostname ---- +HOSTNAME="$(hostname)-MGNT" + +# ---- Nächste freie VMID ab 300 ---- +VMID=300 +while pct status $VMID &>/dev/null; do ((VMID++)); done + +# ---- Storage-Auswahl ---- +draw_header +echo -e "${BOLD}${INDENT}Verfügbare Storages für LXC RootFS:${RESET}" +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 + +for i in "${!STORAGES[@]}"; do + printf "${INDENT}[%d] %s\n" "$i" "${STORAGES[$i]}" +done + +while true; do + read -p "${INDENT}Storage auswählen (Nummer): " STORAGE_INDEX + if [[ "$STORAGE_INDEX" =~ ^[0-9]+$ ]] && [[ -n "${STORAGES[$STORAGE_INDEX]}" ]]; then + STORAGE="${STORAGES[$STORAGE_INDEX]}" + break + fi + echo -e "${RED}${INDENT}Ungültige Auswahl!${RESET}" +done + +# ---- IP / Bridge / Ressourcen ---- +draw_header +echo -e "${INDENT}VMID: ${CYAN}$VMID${RESET}" +echo -e "${INDENT}Hostname: ${CYAN}$HOSTNAME${RESET}" +read -p "${INDENT}IP Adresse (z.B. 10.60.10.2/24) [default 10.60.10.2/24]: " IP +IP=${IP:-10.60.10.2/24} + +read -p "${INDENT}Gateway [default 10.60.10.1]: " GATEWAY +GATEWAY=${GATEWAY:-10.60.10.1} + +read -p "${INDENT}Bridge [default xx_vmbrmgt]: " BRIDGE +BRIDGE=${BRIDGE:-xx_vmbrmgt} + +read -p "${INDENT}Cores [default 1]: " CORES +CORES=${CORES:-1} + +read -p "${INDENT}Memory MB [default 512]: " MEMORY +MEMORY=${MEMORY:-512} + +read -p "${INDENT}Swap MB [default 0]: " SWAP +SWAP=${SWAP:-0} + +read -p "${INDENT}RootFS Größe GB [default 8]: " ROOTFS_SIZE +ROOTFS_SIZE=${ROOTFS_SIZE:-8} + +# ---- Template automatisch wählen ---- +draw_header +echo -e "${INDENT}Suche aktuelles Debian 13 Template..." +pveam update +TEMPLATE_NAME=$(pveam available | awk '/debian-13-standard_.*_amd64\.tar\.zst/ {print $2}' | tail -n1) + +if [[ -z "$TEMPLATE_NAME" ]]; then + echo -e "${RED}${INDENT}Kein Debian 13 Template gefunden!${RESET}" + exit 1 +fi +echo -e "${INDENT}Gefundenes Template: ${CYAN}$TEMPLATE_NAME${RESET}" + +# ---- Template prüfen / herunterladen ---- +TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE_NAME" +if [[ ! -f "$TEMPLATE_PATH" ]]; then + echo -e "${INDENT}Template nicht vorhanden, lade herunter..." + pveam download local "$TEMPLATE_NAME" +else + echo -e "${INDENT}Template bereits vorhanden" +fi + +# ---- LXC erstellen ---- +draw_header +echo -e "${INDENT}Erstelle unprivilegierten LXC $HOSTNAME (VMID: $VMID)..." + +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 + +eval $CREATE_CMD || { echo -e "${RED}${INDENT}Fehler beim Erstellen des LXC!${RESET}"; exit 1; } + +# ---- WebUI-Konsole aktivieren ---- +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 ---- +pct set $VMID --onboot 1 + +# ---- Container starten ---- +pct start $VMID + +# ---- Software installieren ---- +echo -e "${INDENT}Installiere Newt-PVE-Mgnt..." +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 +" + +echo -e "${GREEN}${INDENT}✔ Unprivilegierter LXC $HOSTNAME (VMID $VMID) erstellt, gestartet und Autostart aktiviert!${RESET}" \ No newline at end of file