diff --git a/create_pve-mgnt-lxc.sh b/create_pve-mgnt-lxc.sh deleted file mode 100644 index 1fc4511..0000000 --- a/create_pve-mgnt-lxc.sh +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash -# ===================================================== -# Proxmox VE: Debian 13 LXC automatisch erstellen -# Hostname: -MGNT -# Unprivilegiert -# Automatisches Debian 13 Template -# WebUI-Konsole funktioniert -# Autostart aktiviert -# ===================================================== - -# ---- 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 - -# ---- 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 - echo -e "${BOLD}${INDENT}Bitte als Root ausführen!${RESET}" - exit 1 -fi - -# ---- Root-Passwort abfragen ---- -read -s -p "Root-Passwort für LXC: " ROOTPASS -echo - -# ---- Dynamischer Hostname ---- -HOSTNAME="$(hostname)-MGNT" -echo -e "${INDENT}LXC-Hostname wird: ${CYAN}$HOSTNAME${RESET}" - -# ---- Nächste freie VMID ab 300 ---- -VMID=$MIN_VMID -while pct status $VMID &>/dev/null; do - ((VMID++)) -done -echo -e "${INDENT}Nächste freie VMID: ${CYAN}$VMID${RESET}" - -# ---- Storage-Auswahl (rootdir-fähig) ---- -echo -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 - -echo -e "${INDENT}Gewählter Storage: ${CYAN}$STORAGE${RESET}" - -# ---- Template automatisch wählen ---- -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: $TEMPLATE_NAME" - -# ---- 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 ---- -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 || exit 1 - -# ---- WebUI-Konsole aktivieren (modern) ---- -CONF_FILE="/etc/pve/lxc/$VMID.conf" -echo -e "${INDENT}Aktiviere WebUI-Konsole..." -echo "lxc.tty.max = 2" >> "$CONF_FILE" -echo "lxc.pty.max = 2" >> "$CONF_FILE" -echo "features: nesting=1,keyctl=1" >> "$CONF_FILE" - -# ---- Autostart aktivieren ---- -echo -e "${INDENT}Aktiviere Autostart..." -pct set $VMID --onboot 1 - -# ---- Container starten ---- -echo -e "${INDENT}Starte LXC..." -pct start $VMID - -# ---- Software im LXC 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}" diff --git a/create_pve-mgnt-lxc_v2.sh b/create_pve-mgnt-lxc_v2.sh new file mode 100644 index 0000000..ef86f21 --- /dev/null +++ b/create_pve-mgnt-lxc_v2.sh @@ -0,0 +1,179 @@ +#!/bin/bash +# ===================================================== +# Proxmox VE: Debian 13 LXC automatisch erstellen +# Hostname: -MGNT +# Unprivilegiert +# Automatisches Debian 13 Template +# WebUI-Konsole funktioniert +# Autostart aktiviert +# ===================================================== + +# ---- Standard-Konfiguration ---- +DEFAULT_IP="10.60.10.2/24" +DEFAULT_GATEWAY="10.60.10.1" +DEFAULT_CORES=1 +DEFAULT_MEMORY=512 +DEFAULT_SWAP=0 +DEFAULT_ROOTFS_SIZE=8 +DEFAULT_BRIDGE="xx_vmbrmgt" +MIN_VMID=300 + +# ---- 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 "${BOLD}${RED}${INDENT}Bitte als Root ausführen!${RESET}" + exit 1 +fi + +# ---- Header ---- +echo -e "${CYAN}${BOLD}${INDENT}==========================================${RESET}" +echo -e "${CYAN}${BOLD}${INDENT} Erstelle unprivilegierten LXC ${RESET}" +echo -e "${CYAN}${BOLD}${INDENT}==========================================${RESET}" + +# ---- Root-Passwort ---- +read -s -p "${INDENT}Root-Passwort für LXC: " ROOTPASS +echo + +# ---- Dynamischer Hostname ---- +HOSTNAME="$(hostname)-MGNT" +echo -e "${INDENT}LXC-Hostname wird: ${CYAN}$HOSTNAME${RESET}" + +# ---- Nächste freie VMID ab 300 ---- +VMID=$MIN_VMID +while pct status $VMID &>/dev/null; do + ((VMID++)) +done +echo -e "${INDENT}Nächste freie VMID: ${CYAN}$VMID${RESET}" + +# ---- Auswahl: IP ---- +read -p "${INDENT}IP-Adresse (Default: $DEFAULT_IP): " IP +IP="${IP:-$DEFAULT_IP}" + +# ---- Auswahl: Gateway ---- +read -p "${INDENT}Gateway (Default: $DEFAULT_GATEWAY): " GATEWAY +GATEWAY="${GATEWAY:-$DEFAULT_GATEWAY}" + +# ---- Auswahl: CPU Cores ---- +read -p "${INDENT}CPU Cores (Default: $DEFAULT_CORES): " CORES +CORES="${CORES:-$DEFAULT_CORES}" + +# ---- Auswahl: RAM ---- +read -p "${INDENT}Memory RAM in MB (Default: $DEFAULT_MEMORY): " MEMORY +MEMORY="${MEMORY:-$DEFAULT_MEMORY}" + +# ---- Auswahl: Swap ---- +read -p "${INDENT}Swap RAM in MB (Default: $DEFAULT_SWAP): " SWAP +SWAP="${SWAP:-$DEFAULT_SWAP}" + +# ---- Auswahl: RootFS Größe ---- +read -p "${INDENT}RootFS Größe in GB (Default: $DEFAULT_ROOTFS_SIZE): " ROOTFS_SIZE +ROOTFS_SIZE="${ROOTFS_SIZE:-$DEFAULT_ROOTFS_SIZE}" + +# ---- Storage-Auswahl ---- +echo -e "\n${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 + +# ---- Auswahl: Bridge ---- +read -p "${INDENT}Bridge (Default: $DEFAULT_BRIDGE): " BRIDGE +BRIDGE="${BRIDGE:-$DEFAULT_BRIDGE}" + +# ---- Zusammenfassung anzeigen ---- +echo -e "\n${CYAN}${BOLD}${INDENT}==========================================${RESET}" +echo -e "${CYAN}${BOLD}${INDENT} Zusammenfassung ${RESET}" +echo -e "${CYAN}${BOLD}${INDENT}==========================================${RESET}" +echo -e "${INDENT}Hostname : ${CYAN}$HOSTNAME${RESET}" +echo -e "${INDENT}VMID : ${CYAN}$VMID${RESET}" +echo -e "${INDENT}IP / Gateway : ${CYAN}$IP / $GATEWAY${RESET}" +echo -e "${INDENT}CPU Cores : ${CYAN}$CORES${RESET}" +echo -e "${INDENT}RAM : ${CYAN}$MEMORY MB${RESET}" +echo -e "${INDENT}Swap : ${CYAN}$SWAP MB${RESET}" +echo -e "${INDENT}RootFS Size : ${CYAN}$ROOTFS_SIZE GB${RESET}" +echo -e "${INDENT}Storage : ${CYAN}$STORAGE${RESET}" +echo -e "${INDENT}Bridge : ${CYAN}$BRIDGE${RESET}" +echo -e "${CYAN}${BOLD}${INDENT}==========================================${RESET}" + +read -p "${INDENT}Mit Enter bestätigen und LXC erstellen..." _ + +# ---- Template automatisch wählen ---- +echo -e "${INDENT}Suche aktuelles Debian 13 Template..." +pveam update >/dev/null +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 ---- +echo -e "\n${INDENT}Erstelle 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" + echo "lxc.pty.max = 2" + 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 im LXC..." +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 ---- +echo -e "\n${GREEN}${BOLD}${INDENT}✔ Unprivilegierter LXC $HOSTNAME (VMID $VMID) erstellt, gestartet und Autostart aktiviert!${RESET}\n"