From b7430c20fedaf43685ba2fac45dd970915f1b99c Mon Sep 17 00:00:00 2001
From: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Date: Wed, 19 Nov 2025 16:42:59 +0100
Subject: [PATCH] Update remaining pve_check functions to support Proxmox 9.0
and 9.1
---
misc/vm-core.func | 4 +-
tools/addon/netdata.sh | 14 +-
vm/allstarlink-vm.sh | 548 +++++++++++------------
vm/archlinux-vm.sh | 594 ++++++++++++-------------
vm/debian-13-vm.sh | 654 ++++++++++++++--------------
vm/docker-vm-debug.sh | 10 +-
vm/docker-vm.sh | 10 +-
vm/nextcloud-vm.sh | 560 ++++++++++++------------
vm/openwrt.sh | 692 ++++++++++++++---------------
vm/opnsense-vm.sh | 962 ++++++++++++++++++++---------------------
vm/owncloud-vm.sh | 556 ++++++++++++------------
vm/ubuntu2204-vm.sh | 596 ++++++++++++-------------
vm/ubuntu2404-vm.sh | 596 ++++++++++++-------------
vm/ubuntu2410-vm.sh | 816 +++++++++++++++++-----------------
vm/umbrel-os-vm.sh | 592 ++++++++++++-------------
vm/unifi-os-vm.sh | 884 ++++++++++++++++++-------------------
16 files changed, 4044 insertions(+), 4044 deletions(-)
diff --git a/misc/vm-core.func b/misc/vm-core.func
index 89cc1d716..099999de7 100644
--- a/misc/vm-core.func
+++ b/misc/vm-core.func
@@ -394,9 +394,9 @@ check_root() {
}
pve_check() {
- if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
+ if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
msg_error "This version of Proxmox Virtual Environment is not supported"
- echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
+ echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
echo -e "Exiting..."
sleep 2
exit
diff --git a/tools/addon/netdata.sh b/tools/addon/netdata.sh
index 1f2d598fa..cab0c8081 100644
--- a/tools/addon/netdata.sh
+++ b/tools/addon/netdata.sh
@@ -51,29 +51,29 @@ pve_check() {
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Proxmox VE 8.x: allow 8.0 – 8.9
- if [[ "$PVE_VER" =~ ^9\.([0-9]+)(\.[0-9]+)?$ ]]; then
+ if [[ "$PVE_VER" =~ ^8\.([0-9]+)(\.[0-9]+)?$ ]]; then
local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR != 0)); then
+ if ((MINOR < 0 || MINOR > 9)); then
msg_error "Unsupported Proxmox VE version: $PVE_VER"
- msg_error "Supported versions: 8.0 – 8.9 or 9.0.x"
+ msg_error "Supported versions: 8.0 – 8.9 or 9.0 – 9.1"
exit 1
fi
return 0
fi
- # Proxmox VE 9.x: allow only 9.0
+ # Proxmox VE 9.x: allow 9.0 – 9.1
if [[ "$PVE_VER" =~ ^9\.([0-9]+)$ ]]; then
local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR != 0)); then
+ if ((MINOR < 0 || MINOR > 1)); then
msg_error "Unsupported Proxmox VE version: $PVE_VER"
- msg_error "Supported versions: 8.0 – 8.9 or 9.0"
+ msg_error "Supported versions: 8.0 – 8.9 or 9.0 – 9.1"
exit 1
fi
return 0
fi
msg_error "Unsupported Proxmox VE version: $PVE_VER"
- msg_error "Supported versions: 8.0 – 8.9 or 9.0"
+ msg_error "Supported versions: 8.0 – 8.9 or 9.0 – 9.1"
exit 1
}
diff --git a/vm/allstarlink-vm.sh b/vm/allstarlink-vm.sh
index 20d3e4786..0dc1bf3c0 100644
--- a/vm/allstarlink-vm.sh
+++ b/vm/allstarlink-vm.sh
@@ -8,8 +8,8 @@
source /dev/stdin <<<$(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func)
function header_info {
- clear
- cat <<"EOF"
+ clear
+ cat <<"EOF"
___ ____ ____ __ __ _ __ _ ____ ___
/ | / / / ___// /_____ ______/ / (_)___ / /__ | | / / |/ /
/ /| | / / /\__ \/ __/ __ `/ ___/ / / / __ \/ //_/ | | / / /|_/ /
@@ -48,306 +48,306 @@ trap cleanup EXIT
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- post_update_to_api "failed" "${command}"
- local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
- echo -e "\n$error_message\n"
- cleanup_vmid
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ post_update_to_api "failed" "${command}"
+ local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
+ echo -e "\n$error_message\n"
+ cleanup_vmid
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "AllStarLink VM" --yesno "This will create a New AllStarLink VM. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "⚠ User exited script \n" && exit
+ header_info && echo -e "⚠ User exited script \n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne " ${HOLD} ${YW}${msg}..."
+ local msg="$1"
+ echo -ne " ${HOLD} ${YW}${msg}..."
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
function pve_check() {
- if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[0-9]+)*"; then
- msg_error "This version of Proxmox Virtual Environment is not supported"
- echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if ! pveversion | grep -Eq "pve-manager/(8\.[1-3]|9\.[0-1])(\.[0-9]+)*"; then
+ msg_error "This version of Proxmox Virtual Environment is not supported"
+ echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.3 or 9.0 - 9.1."
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- if [ "$(dpkg --print-architecture)" != "arm64" ]; then
- msg_error "This script will not work with your CPU Architekture \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ if [ "$(dpkg --print-architecture)" != "arm64" ]; then
+ msg_error "This script will not work with your CPU Architekture \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
fi
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
fi
+ fi
}
function exit_script() {
- clear
- echo -e "⚠ User exited script \n"
- exit
+ clear
+ echo -e "⚠ User exited script \n"
+ exit
}
function default_settings() {
- VMID="$NEXTID"
- FORMAT=",efitype=4m"
- MACHINE=""
- DISK_CACHE=""
- HN="allstarlink"
- CPU_TYPE=""
- CORE_COUNT="2"
- RAM_SIZE="2048"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="yes"
- METHOD="default"
- echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
- echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
- echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
- echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
- echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${DGN}Using Bridge: ${BGN}${BRG}${CL}"
- echo -e "${DGN}Using MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
- echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
- echo -e "${BL}Creating a AllStarLink VM using the above default settings${CL}"
+ VMID="$NEXTID"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ DISK_CACHE=""
+ HN="allstarlink"
+ CPU_TYPE=""
+ CORE_COUNT="2"
+ RAM_SIZE="2048"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="yes"
+ METHOD="default"
+ echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
+ echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
+ echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
+ echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
+ echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${DGN}Using Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${DGN}Using MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
+ echo -e "${BL}Creating a AllStarLink VM using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID="$NEXTID"
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
- else
- exit_script
- fi
- done
-
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
- "i440fx" "Machine i440fx" ON \
- "q35" "Machine q35" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $MACH = q35 ]; then
- echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
- else
- echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
- fi
+ METHOD="advanced"
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID="$NEXTID"
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
else
- exit_script
+ exit_script
fi
+ done
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None (Default)" ON \
- "1" "Write Through" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DGN}Using Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
- else
- echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
- fi
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
+ "i440fx" "Machine i440fx" ON \
+ "q35" "Machine q35" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $MACH = q35 ]; then
+ echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
else
- exit_script
+ echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
fi
+ else
+ exit_script
+ fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 allstarlink --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="allstarlink"
- echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
- else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
- fi
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None (Default)" ON \
+ "1" "Write Through" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DGN}Using Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
else
- exit_script
+ echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
fi
+ else
+ exit_script
+ fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "KVM64 (Default)" ON \
- "1" "Host" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $CPU_TYPE1 = "1" ]; then
- echo -e "${DGN}Using CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
- else
- echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
- fi
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 allstarlink --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="allstarlink"
+ echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
else
- exit_script
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
fi
+ else
+ exit_script
+ fi
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
- else
- echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
- fi
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "KVM64 (Default)" ON \
+ "1" "Host" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $CPU_TYPE1 = "1" ]; then
+ echo -e "${DGN}Using CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
else
- exit_script
+ echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
fi
+ else
+ exit_script
+ fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="4096"
- echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
- else
- echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
- fi
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
else
- exit_script
+ echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
fi
+ else
+ exit_script
+ fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
- else
- echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
- fi
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="4096"
+ echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
else
- exit_script
+ echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
fi
+ else
+ exit_script
+ fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${DGN}Using MAC Address: ${BGN}$MAC${CL}"
- else
- MAC="$MAC1"
- echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
- fi
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
else
- exit_script
+ echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
fi
+ else
+ exit_script
+ fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
- else
- VLAN=",tag=$VLAN1"
- echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
- fi
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${DGN}Using MAC Address: ${BGN}$MAC${CL}"
else
- exit_script
+ MAC="$MAC1"
+ echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
fi
+ else
+ exit_script
+ fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
- else
- MTU=",mtu=$MTU1"
- echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
- fi
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
else
- exit_script
+ VLAN=",tag=$VLAN1"
+ echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
fi
+ else
+ exit_script
+ fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
else
- echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
+ MTU=",mtu=$MTU1"
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
fi
+ else
+ exit_script
+ fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a AllStarLink VM?" --no-button Do-Over 10 58); then
- echo -e "${RD}Creating a AllStarLink VM using the above advanced settings${CL}"
- else
- header_info
- echo -e "${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
+ else
+ echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
+ fi
+
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a AllStarLink VM?" --no-button Do-Over 10 58); then
+ echo -e "${RD}Creating a AllStarLink VM using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
@@ -359,29 +359,29 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
@@ -397,23 +397,23 @@ msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in
nfs | dir)
- DISK_EXT=".qcow2"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format qcow2"
- THIN=""
- ;;
+ DISK_EXT=".qcow2"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format qcow2"
+ THIN=""
+ ;;
btrfs)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- FORMAT=",efitype=4m"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ FORMAT=",efitype=4m"
+ THIN=""
+ ;;
esac
for i in {0,1}; do
- disk="DISK$i"
- eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
- eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
+ disk="DISK$i"
+ eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
+ eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done
msg_info "Installing Pre-Requisite libguestfs-tools onto Host"
@@ -422,41 +422,41 @@ msg_ok "Installed libguestfs-tools successfully"
msg_info "Adding ASL Package Repository"
virt-customize -q -a "${FILE}" \
- --run-command "curl -fsSL https://repo.allstarlink.org/public/asl-apt-repos.deb12_all.deb -o /tmp/asl-apt-repos.deb12_all.deb" \
- --run-command "dpkg -i /tmp/asl-apt-repos.deb12_all.deb" \
- --update \
- --run-command "rm -f /tmp/asl-apt-repos.deb12_all.deb" >/dev/null
+ --run-command "curl -fsSL https://repo.allstarlink.org/public/asl-apt-repos.deb12_all.deb -o /tmp/asl-apt-repos.deb12_all.deb" \
+ --run-command "dpkg -i /tmp/asl-apt-repos.deb12_all.deb" \
+ --update \
+ --run-command "rm -f /tmp/asl-apt-repos.deb12_all.deb" >/dev/null
msg_ok "Added ASL Package Repository"
msg_info "Installing AllStarLink (patience)"
virt-customize -q -a "${FILE}" \
- --install asl3 \
- --run-command "sed -i \"/secret /s/= .*/= $(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)/\" /etc/asterisk/manager.conf" >/dev/null
+ --install asl3 \
+ --run-command "sed -i \"/secret /s/= .*/= $(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)/\" /etc/asterisk/manager.conf" >/dev/null
msg_ok "Installed AllStarLink"
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Would you like to add Allmon3?" 10 58); then
- msg_info "Installing Allmon3"
- virt-customize -q -a "${FILE}" \
- --install allmon3 \
- --run-command "sed -i \"s/;pass=.*/;pass=\$(sed -ne 's/^secret = //p' /etc/asterisk/manager.conf)/\" /etc/allmon3/allmon3.ini" >/dev/null
- msg_ok "Installed Allmon3"
+ msg_info "Installing Allmon3"
+ virt-customize -q -a "${FILE}" \
+ --install allmon3 \
+ --run-command "sed -i \"s/;pass=.*/;pass=\$(sed -ne 's/^secret = //p' /etc/asterisk/manager.conf)/\" /etc/allmon3/allmon3.ini" >/dev/null
+ msg_ok "Installed Allmon3"
fi
msg_info "Creating a AllStarLink VM"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
- -name $HN -tags community-script,debian12,radio -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
+ -name $HN -tags community-script,debian12,radio -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
- -efidisk0 ${DISK0_REF}${FORMAT} \
- -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \
- -boot order=scsi0 \
- -serial0 socket >/dev/null
+ -efidisk0 ${DISK0_REF}${FORMAT} \
+ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \
+ -boot order=scsi0 \
+ -serial0 socket >/dev/null
qm resize $VMID scsi0 8G >/dev/null
qm set $VMID --agent enabled=1 >/dev/null
DESCRIPTION=$(
- cat <
@@ -489,9 +489,9 @@ qm set "$VMID" -description "$DESCRIPTION" >/dev/null
msg_ok "Created a AllStarLink VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting AllStarLink VM"
- qm start $VMID
- msg_ok "Started AllStarLink VM"
+ msg_info "Starting AllStarLink VM"
+ qm start $VMID
+ msg_ok "Started AllStarLink VM"
fi
post_update_to_api "done" "none"
msg_ok "Completed Successfully!\n"
diff --git a/vm/archlinux-vm.sh b/vm/archlinux-vm.sh
index 28a2c256b..fa28e60b0 100644
--- a/vm/archlinux-vm.sh
+++ b/vm/archlinux-vm.sh
@@ -7,8 +7,8 @@
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/api.func)
function header_info {
- clear
- cat <<"EOF"
+ clear
+ cat <<"EOF"
___ __ __ _ _ ____ ___
/ | __________/ /_ / / (_)___ __ ___ __ | | / / |/ /
/ /| | / ___/ ___/ __ \ / / / / __ \/ / / / |/_/ | | / / /|_/ /
@@ -65,340 +65,340 @@ trap cleanup EXIT
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- post_update_to_api "failed" "${commad}"
- local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
- echo -e "\n$error_message\n"
- cleanup_vmid
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ post_update_to_api "failed" "${commad}"
+ local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
+ echo -e "\n$error_message\n"
+ cleanup_vmid
}
function get_valid_nextid() {
- local try_id
- try_id=$(pvesh get /cluster/nextid)
- while true; do
- if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
- try_id=$((try_id + 1))
- continue
- fi
- if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
- try_id=$((try_id + 1))
- continue
- fi
- break
- done
- echo "$try_id"
+ local try_id
+ try_id=$(pvesh get /cluster/nextid)
+ while true; do
+ if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ break
+ done
+ echo "$try_id"
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Arch Linux VM" --yesno "This will create a New Arch Linux VM. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
+ header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
+ local msg="$1"
+ echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR}${CM}${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CM}${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
function pve_check() {
- if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
- msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
- echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
+ msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
+ echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
- echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
+ echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
+ fi
fi
- fi
}
function exit-script() {
- clear
- echo -e "\n${CROSS}${RD}User exited script${CL}\n"
- exit
+ clear
+ echo -e "\n${CROSS}${RD}User exited script${CL}\n"
+ exit
}
function default_settings() {
- VMID=$(get_valid_nextid)
- FORMAT=",efitype=4m"
- MACHINE=""
- DISK_SIZE="4G"
- DISK_CACHE=""
- HN="arch-linux"
- CPU_TYPE=""
- CORE_COUNT="1"
- RAM_SIZE="1024"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="yes"
- METHOD="default"
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- echo -e "${CREATING}${BOLD}${DGN}Creating a Arch Linux VM using the above default settings${CL}"
+ VMID=$(get_valid_nextid)
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ DISK_SIZE="4G"
+ DISK_CACHE=""
+ HN="arch-linux"
+ CPU_TYPE=""
+ CORE_COUNT="1"
+ RAM_SIZE="1024"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="yes"
+ METHOD="default"
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Arch Linux VM using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
- [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID=$(get_valid_nextid)
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
+ METHOD="advanced"
+ [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID=$(get_valid_nextid)
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
+ else
+ exit-script
+ fi
+ done
+
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
+ "i440fx" "Machine i440fx" ON \
+ "q35" "Machine q35" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $MACH = q35 ]; then
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
+ else
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ fi
else
- exit-script
+ exit-script
fi
- done
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
- "i440fx" "Machine i440fx" ON \
- "q35" "Machine q35" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $MACH = q35 ]; then
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
+ if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
+ if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
+ DISK_SIZE="${DISK_SIZE}G"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ else
+ echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
+ exit-script
+ fi
else
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
- if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
- DISK_SIZE="${DISK_SIZE}G"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
- elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None (Default)" ON \
+ "1" "Write Through" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
+ else
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
- exit-script
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None (Default)" ON \
- "1" "Write Through" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 arch-linux --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="arch-linux"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ else
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
+ exit-script
fi
- else
- exit-script
- fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 arch-linux --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="arch-linux"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "KVM64 (Default)" ON \
+ "1" "Host" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $CPU_TYPE1 = "1" ]; then
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
+ else
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
+ fi
else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "KVM64 (Default)" ON \
- "1" "Host" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $CPU_TYPE1 = "1" ]; then
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ else
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ fi
else
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
+ exit-script
fi
- else
- exit-script
- fi
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="2048"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ else
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ fi
else
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="2048"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ else
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ fi
else
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ else
+ MAC="$MAC1"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ fi
else
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ else
+ VLAN=",tag=$VLAN1"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ fi
else
- MAC="$MAC1"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ else
+ MTU=",mtu=$MTU1"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ fi
else
- VLAN=",tag=$VLAN1"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
else
- MTU=",mtu=$MTU1"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
fi
- else
- exit-script
- fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
- else
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
- fi
-
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Arch Linux VM?" --no-button Do-Over 10 58); then
- echo -e "${CREATING}${BOLD}${DGN}Creating a Arch Linux VM using the above advanced settings${CL}"
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Arch Linux VM?" --no-button Do-Over 10 58); then
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Arch Linux VM using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
@@ -410,29 +410,29 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
@@ -448,38 +448,38 @@ msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in
nfs | dir | cifs)
- DISK_EXT=".qcow2"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format qcow2"
- THIN=""
- ;;
+ DISK_EXT=".qcow2"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format qcow2"
+ THIN=""
+ ;;
btrfs)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- FORMAT=",efitype=4m"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ FORMAT=",efitype=4m"
+ THIN=""
+ ;;
esac
for i in {0,1}; do
- disk="DISK$i"
- eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
- eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
+ disk="DISK$i"
+ eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
+ eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done
msg_info "Creating a Arch Linux VM"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
- -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
+ -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
- -efidisk0 ${DISK0_REF}${FORMAT} \
- -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
- -ide2 ${STORAGE}:cloudinit \
- -boot order=scsi0 \
- -serial0 socket >/dev/null
+ -efidisk0 ${DISK0_REF}${FORMAT} \
+ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
+ -ide2 ${STORAGE}:cloudinit \
+ -boot order=scsi0 \
+ -serial0 socket >/dev/null
DESCRIPTION=$(
- cat <
@@ -510,18 +510,18 @@ EOF
)
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
if [ -n "$DISK_SIZE" ]; then
- msg_info "Resizing disk to $DISK_SIZE GB"
- qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
+ msg_info "Resizing disk to $DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
else
- msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
- qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
+ msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
fi
msg_ok "Created a Arch Linux VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting Arch Linux VM"
- qm start $VMID
- msg_ok "Started Arch Linux VM"
+ msg_info "Starting Arch Linux VM"
+ qm start $VMID
+ msg_ok "Started Arch Linux VM"
fi
post_update_to_api "done" "none"
diff --git a/vm/debian-13-vm.sh b/vm/debian-13-vm.sh
index e1efe022a..7a2272972 100644
--- a/vm/debian-13-vm.sh
+++ b/vm/debian-13-vm.sh
@@ -7,8 +7,8 @@
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
function header_info {
- clear
- cat <<"EOF"
+ clear
+ cat <<"EOF"
____ __ _ ________
/ __ \___ / /_ (_)___ _____ < /__ /
/ / / / _ \/ __ \/ / __ `/ __ \ / / /_ <
@@ -66,374 +66,374 @@ trap cleanup EXIT
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
- post_update_to_api "failed" "${command}"
- echo -e "\n$error_message\n"
- cleanup_vmid
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
+ post_update_to_api "failed" "${command}"
+ echo -e "\n$error_message\n"
+ cleanup_vmid
}
function get_valid_nextid() {
- local try_id
- try_id=$(pvesh get /cluster/nextid)
- while true; do
- if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
- try_id=$((try_id + 1))
- continue
- fi
- if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
- try_id=$((try_id + 1))
- continue
- fi
- break
- done
- echo "$try_id"
+ local try_id
+ try_id=$(pvesh get /cluster/nextid)
+ while true; do
+ if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ break
+ done
+ echo "$try_id"
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- post_update_to_api "done" "none"
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ post_update_to_api "done" "none"
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Debian 13 VM" --yesno "This will create a New Debian 13 VM. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
+ header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
+ local msg="$1"
+ echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR}${CM}${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CM}${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
-# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 (NOT 9.1+)
+# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 – 9.1
pve_check() {
- local PVE_VER
- PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
+ local PVE_VER
+ PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
- # Check for Proxmox VE 8.x: allow 8.0–8.9
- if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
- local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR < 0 || MINOR > 9)); then
- msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported: Proxmox VE version 8.0 – 8.9"
- exit 1
+ # Check for Proxmox VE 8.x: allow 8.0–8.9
+ if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
+ local MINOR="${BASH_REMATCH[1]}"
+ if ((MINOR < 0 || MINOR > 9)); then
+ msg_error "This version of Proxmox VE is not supported."
+ msg_error "Supported: Proxmox VE version 8.0 – 8.9"
+ exit 1
+ fi
+ return 0
fi
- return 0
- fi
- # Check for Proxmox VE 9.x: allow ONLY 9.0
- if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
- local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR != 0)); then
- msg_error "This version of Proxmox VE is not yet supported."
- msg_error "Supported: Proxmox VE version 9.0"
- exit 1
+ # Check for Proxmox VE 9.x: allow 9.0–9.1
+ if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
+ local MINOR="${BASH_REMATCH[1]}"
+ if ((MINOR < 0 || MINOR > 1)); then
+ msg_error "This version of Proxmox VE is not yet supported."
+ msg_error "Supported: Proxmox VE version 9.0 – 9.1"
+ exit 1
+ fi
+ return 0
fi
- return 0
- fi
- # All other unsupported versions
- msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
- exit 1
+ # All other unsupported versions
+ msg_error "This version of Proxmox VE is not supported."
+ msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0 – 9.1"
+ exit 1
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
- echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
+ echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
+ fi
fi
- fi
}
function exit-script() {
- clear
- echo -e "\n${CROSS}${RD}User exited script${CL}\n"
- exit
+ clear
+ echo -e "\n${CROSS}${RD}User exited script${CL}\n"
+ exit
}
function default_settings() {
- VMID=$(get_valid_nextid)
- FORMAT=""
- MACHINE="q35"
- DISK_SIZE="30G"
- HN="debian"
- CPU_TYPE=""
- CORE_COUNT="2"
- RAM_SIZE="4096"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="yes"
- METHOD="default"
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- echo -e "${CREATING}${BOLD}${DGN}Creating a Debian 13 VM using the above default settings${CL}"
+ VMID=$(get_valid_nextid)
+ FORMAT=""
+ MACHINE="q35"
+ DISK_SIZE="30G"
+ HN="debian"
+ CPU_TYPE=""
+ CORE_COUNT="2"
+ RAM_SIZE="4096"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="yes"
+ METHOD="default"
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Debian 13 VM using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
- [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID=$(get_valid_nextid)
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
+ METHOD="advanced"
+ [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID=$(get_valid_nextid)
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
+ else
+ exit-script
+ fi
+ done
+
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
+ "q35" "Modern (PCIe, UEFI, default)" ON \
+ "i440fx" "Legacy (older compatibility)" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ "$MACH" = "q35" ]; then
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
+ else
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ fi
else
- exit-script
+ exit-script
fi
- done
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
- "q35" "Modern (PCIe, UEFI, default)" ON \
- "i440fx" "Legacy (older compatibility)" OFF \
- 3>&1 1>&2 2>&3); then
- if [ "$MACH" = "q35" ]; then
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
+ if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
+ if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
+ DISK_SIZE="${DISK_SIZE}G"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ else
+ echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
+ exit-script
+ fi
else
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
- if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
- DISK_SIZE="${DISK_SIZE}G"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
- elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None" OFF \
+ "1" "Write Through (Default)" ON \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
+ else
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
- exit-script
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None" OFF \
- "1" "Write Through (Default)" ON \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 unifi-os-server --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="unifi-os-server"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ else
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
+ exit-script
fi
- else
- exit-script
- fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 unifi-os-server --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="unifi-os-server"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
+ "KVM64" "Default – safe for migration/compatibility" ON \
+ "Host" "Use host CPU features (faster, no migration)" OFF \
+ 3>&1 1>&2 2>&3); then
+ case "$CPU_TYPE1" in
+ Host)
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
+ ;;
+ *)
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
+ ;;
+ esac
else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
- "KVM64" "Default – safe for migration/compatibility" ON \
- "Host" "Use host CPU features (faster, no migration)" OFF \
- 3>&1 1>&2 2>&3); then
- case "$CPU_TYPE1" in
- Host)
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
- ;;
- *)
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
- ;;
- esac
- else
- exit-script
- fi
-
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ else
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ fi
else
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="2048"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="2048"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ else
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ fi
else
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ else
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ fi
else
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ else
+ MAC="$MAC1"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ fi
else
- MAC="$MAC1"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ else
+ VLAN=",tag=$VLAN1"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ fi
else
- VLAN=",tag=$VLAN1"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ else
+ MTU=",mtu=$MTU1"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ fi
else
- MTU=",mtu=$MTU1"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" --yesno "Configure the VM with Cloud-init?" --defaultno 10 58); then
- echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}yes${CL}"
- CLOUD_INIT="yes"
- else
- echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}no${CL}"
- CLOUD_INIT="no"
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" --yesno "Configure the VM with Cloud-init?" --defaultno 10 58); then
+ echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}yes${CL}"
+ CLOUD_INIT="yes"
+ else
+ echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}no${CL}"
+ CLOUD_INIT="no"
+ fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
- else
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
+ else
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
+ fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Debian 13 VM?" --no-button Do-Over 10 58); then
- echo -e "${CREATING}${BOLD}${DGN}Creating a Debian 13 VM using the above advanced settings${CL}"
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Debian 13 VM?" --no-button Do-Over 10 58); then
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Debian 13 VM using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
arch_check
@@ -444,40 +444,40 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
- printf "\e[?25h"
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
+ printf "\e[?25h"
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
msg_info "Retrieving the URL for the Debian 13 Qcow2 Disk Image"
if [ "$CLOUD_INIT" == "yes" ]; then
- URL=https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
+ URL=https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
else
- URL=https://cloud.debian.org/images/cloud/trixie/latest/debian-13-nocloud-amd64.qcow2
+ URL=https://cloud.debian.org/images/cloud/trixie/latest/debian-13-nocloud-amd64.qcow2
fi
CACHE_DIR="/var/lib/vz/template/cache"
CACHE_FILE="$CACHE_DIR/$(basename "$URL")"
@@ -486,49 +486,49 @@ mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
msg_ok "${CL}${BL}${URL}${CL}"
if [[ ! -s "$CACHE_FILE" ]]; then
- curl -f#SL -o "$CACHE_FILE" "$URL"
- msg_ok "Downloaded ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
+ curl -f#SL -o "$CACHE_FILE" "$URL"
+ msg_ok "Downloaded ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
else
- msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
+ msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
fi
set -o pipefail
msg_info "Creating Debian 13 VM shell"
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
- -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
- -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
+ -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
+ -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
msg_ok "Created VM shell"
msg_info "Importing disk into storage ($STORAGE)"
if qm disk import --help >/dev/null 2>&1; then
- IMPORT_CMD=(qm disk import)
+ IMPORT_CMD=(qm disk import)
else
- IMPORT_CMD=(qm importdisk)
+ IMPORT_CMD=(qm importdisk)
fi
IMPORT_OUT="$("${IMPORT_CMD[@]}" "$VMID" "$CACHE_FILE" "$STORAGE" --format raw 2>&1 || true)"
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p" | tr -d "\r\"'")"
[[ -z "$DISK_REF" ]] && DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$5 ~ ("vm-"id"-disk-") {print $1":"$5}' | sort | tail -n1)"
[[ -z "$DISK_REF" ]] && {
- msg_error "Unable to determine imported disk reference."
- echo "$IMPORT_OUT"
- exit 1
+ msg_error "Unable to determine imported disk reference."
+ echo "$IMPORT_OUT"
+ exit 1
}
msg_ok "Imported disk (${CL}${BL}${DISK_REF}${CL})"
msg_info "Attaching EFI and root disk"
if [ "$CLOUD_INIT" == "yes" ]; then
- qm set "$VMID" \
- --efidisk0 "${STORAGE}:0,efitype=4m" \
- --scsi0 "${DISK_REF},ssd=1,discard=on" \
- --scsi1 "${STORAGE}:cloudinit" \
- --boot order=scsi0 \
- --serial0 socket >/dev/null
+ qm set "$VMID" \
+ --efidisk0 "${STORAGE}:0,efitype=4m" \
+ --scsi0 "${DISK_REF},ssd=1,discard=on" \
+ --scsi1 "${STORAGE}:cloudinit" \
+ --boot order=scsi0 \
+ --serial0 socket >/dev/null
else
- qm set "$VMID" \
- --efidisk0 "${STORAGE}:0,efitype=4m" \
- --scsi0 "${DISK_REF},ssd=1,discard=on" \
- --boot order=scsi0 \
- --serial0 socket >/dev/null
+ qm set "$VMID" \
+ --efidisk0 "${STORAGE}:0,efitype=4m" \
+ --scsi0 "${DISK_REF},ssd=1,discard=on" \
+ --boot order=scsi0 \
+ --serial0 socket >/dev/null
fi
qm set "$VMID" --agent enabled=1 >/dev/null
msg_ok "Attached EFI and root disk"
@@ -538,7 +538,7 @@ qm resize "$VMID" scsi0 "${DISK_SIZE}" >/dev/null
msg_ok "Resized disk"
DESCRIPTION=$(
- cat <
@@ -571,9 +571,9 @@ qm set "$VMID" -description "$DESCRIPTION" >/dev/null
msg_ok "Created a Debian 13 VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting Debian 13 VM"
- qm start $VMID
- msg_ok "Started Debian 13 VM"
+ msg_info "Starting Debian 13 VM"
+ qm start $VMID
+ msg_ok "Started Debian 13 VM"
fi
msg_info "Installing resize tools in VM"
diff --git a/vm/docker-vm-debug.sh b/vm/docker-vm-debug.sh
index 861aa6976..6da5ec333 100644
--- a/vm/docker-vm-debug.sh
+++ b/vm/docker-vm-debug.sh
@@ -161,7 +161,7 @@ function check_root() {
}
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
-# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 (NOT 9.1+)
+# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 – 9.1
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
@@ -178,12 +178,12 @@ pve_check() {
return 0
fi
- # Check for Proxmox VE 9.x: allow ONLY 9.0
+ # Check for Proxmox VE 9.x: allow 9.0 – 9.1
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR != 0)); then
+ if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported."
- msg_error "Supported: Proxmox VE version 9.0"
+ msg_error "Supported: Proxmox VE version 9.0 – 9.1"
exit 1
fi
PVE_MAJOR=9
@@ -192,7 +192,7 @@ pve_check() {
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
+ msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0 – 9.1"
exit 1
}
diff --git a/vm/docker-vm.sh b/vm/docker-vm.sh
index 6714582a0..c7f2b285c 100644
--- a/vm/docker-vm.sh
+++ b/vm/docker-vm.sh
@@ -161,7 +161,7 @@ function check_root() {
}
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
-# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 (NOT 9.1+)
+# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 – 9.1
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
@@ -178,12 +178,12 @@ pve_check() {
return 0
fi
- # Check for Proxmox VE 9.x: allow ONLY 9.0
+ # Check for Proxmox VE 9.x: allow 9.0–9.1
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR != 0)); then
+ if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported."
- msg_error "Supported: Proxmox VE version 9.0"
+ msg_error "Supported: Proxmox VE version 9.0 – 9.1"
exit 1
fi
PVE_MAJOR=9
@@ -192,7 +192,7 @@ pve_check() {
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
+ msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0 – 9.1"
exit 1
}
diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh
index 5fe6489b3..083534c3f 100644
--- a/vm/nextcloud-vm.sh
+++ b/vm/nextcloud-vm.sh
@@ -8,12 +8,12 @@
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
function header_info {
- clear
- cat <<"EOF"
+ clear
+ cat <<"EOF"
______ __ __ _ __ __ __ __ _ ____ ___
/_ __/_ _________ / //_/__ __ __ / |/ /____ __/ /_____/ /__ __ _____/ / | | / / |/ /
- / / / // / __/ _ \/ ,< / -_) // / / / -_) \ / __/ __/ / _ \/ // / _ / | |/ / /|_/ /
-/_/ \_,_/_/ /_//_/_/|_|\__/\_, / /_/|_/\__/_\_\\__/\__/_/\___/\_,_/\_,_/ |___/_/ /_/
+ / / / // / __/ _ \/ ,< / -_) // / / / -_) \ / __/ __/ / _ \/ // / _ / | |/ / /|_/ /
+/_/ \_,_/_/ /_//_/_/|_|\__/\_, / /_/|_/\__/_\_\\__/\__/_/\___/\_,_/\_,_/ |___/_/ /_/
/___/
EOF
}
@@ -46,322 +46,322 @@ trap cleanup EXIT
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- post_update_to_api "failed" "${command}"
- local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
- echo -e "\n$error_message\n"
- cleanup_vmid
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ post_update_to_api "failed" "${command}"
+ local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
+ echo -e "\n$error_message\n"
+ cleanup_vmid
}
function get_valid_nextid() {
- local try_id
- try_id=$(pvesh get /cluster/nextid)
- while true; do
- if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
- try_id=$((try_id + 1))
- continue
- fi
- if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
- try_id=$((try_id + 1))
- continue
- fi
- break
- done
- echo "$try_id"
+ local try_id
+ try_id=$(pvesh get /cluster/nextid)
+ while true; do
+ if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ break
+ done
+ echo "$try_id"
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "$NAME" --yesno "This will create a New $NAME. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "⚠ User exited script \n" && exit
+ header_info && echo -e "⚠ User exited script \n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne " ${HOLD} ${YW}${msg}..."
+ local msg="$1"
+ echo -ne " ${HOLD} ${YW}${msg}..."
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
function pve_check() {
- if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
- msg_error "This version of Proxmox Virtual Environment is not supported"
- echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
+ msg_error "This version of Proxmox Virtual Environment is not supported"
+ echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- msg_error "This script will not work with PiMox! \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ msg_error "This script will not work with PiMox! \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
+ fi
fi
- fi
}
function exit-script() {
- clear
- echo -e "⚠ User exited script \n"
- exit
+ clear
+ echo -e "⚠ User exited script \n"
+ exit
}
function default_settings() {
- VMID=$(get_valid_nextid)
- FORMAT=",efitype=4m"
- MACHINE=""
- DISK_CACHE=""
- HN="turnkey-nextcloud-vm"
- CPU_TYPE=""
- CORE_COUNT="2"
- RAM_SIZE="2048"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="no"
- METHOD="default"
- echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
- echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
- echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
- echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
- echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${DGN}Using Bridge: ${BGN}${BRG}${CL}"
- echo -e "${DGN}Using MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
- echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
- echo -e "${BL}Creating a $NAME using the above default settings${CL}"
+ VMID=$(get_valid_nextid)
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ DISK_CACHE=""
+ HN="turnkey-nextcloud-vm"
+ CPU_TYPE=""
+ CORE_COUNT="2"
+ RAM_SIZE="2048"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="no"
+ METHOD="default"
+ echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
+ echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
+ echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
+ echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
+ echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${DGN}Using Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${DGN}Using MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
+ echo -e "${BL}Creating a $NAME using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
- [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID=$(get_valid_nextid)
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
+ METHOD="advanced"
+ [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID=$(get_valid_nextid)
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
+ else
+ exit-script
+ fi
+ done
+
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
+ "i440fx" "Machine i440fx" ON \
+ "q35" "Machine q35" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $MACH = q35 ]; then
+ echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
+ else
+ echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ fi
else
- exit-script
+ exit-script
fi
- done
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
- "i440fx" "Machine i440fx" ON \
- "q35" "Machine q35" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $MACH = q35 ]; then
- echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None (Default)" ON \
+ "1" "Write Through" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DGN}Using Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
+ else
+ echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
+ fi
else
- echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None (Default)" ON \
- "1" "Write Through" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DGN}Using Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 turnkey-nextcloud-vm --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="$HN"
+ echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+ else
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+ fi
else
- echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
+ exit-script
fi
- else
- exit-script
- fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 turnkey-nextcloud-vm --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="$HN"
- echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "KVM64 (Default)" ON \
+ "1" "Host" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $CPU_TYPE1 = "1" ]; then
+ echo -e "${DGN}Using CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
+ else
+ echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
+ fi
else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "KVM64 (Default)" ON \
- "1" "Host" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $CPU_TYPE1 = "1" ]; then
- echo -e "${DGN}Using CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+ else
+ echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+ fi
else
- echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
+ exit-script
fi
- else
- exit-script
- fi
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="2048"
+ echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+ else
+ echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+ fi
else
- echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="2048"
- echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+ else
+ echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+ fi
else
- echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${DGN}Using MAC Address: ${BGN}$MAC${CL}"
+ else
+ MAC="$MAC1"
+ echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+ fi
else
- echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${DGN}Using MAC Address: ${BGN}$MAC${CL}"
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+ else
+ VLAN=",tag=$VLAN1"
+ echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+ fi
else
- MAC="$MAC1"
- echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
+ else
+ MTU=",mtu=$MTU1"
+ echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
+ fi
else
- VLAN=",tag=$VLAN1"
- echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
else
- MTU=",mtu=$MTU1"
- echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
+ echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
fi
- else
- exit-script
- fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
- else
- echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
- fi
-
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a $NAME?" --no-button Do-Over 10 58); then
- echo -e "${RD}Creating a $NAME using the above advanced settings${CL}"
- else
- header_info
- echo -e "${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a $NAME?" --no-button Do-Over 10 58); then
+ echo -e "${RD}Creating a $NAME using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
@@ -374,29 +374,29 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
@@ -412,38 +412,38 @@ msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in
nfs | dir)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ THIN=""
+ ;;
btrfs)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- FORMAT=",efitype=4m"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ FORMAT=",efitype=4m"
+ THIN=""
+ ;;
esac
for i in {0,1,2}; do
- disk="DISK$i"
- eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
- eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
+ disk="DISK$i"
+ eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
+ eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done
msg_info "Creating a $NAME"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
- -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
+ -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
- -efidisk0 ${DISK0_REF}${FORMAT} \
- -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
- -scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
- -boot order='scsi1;scsi0' >/dev/null
+ -efidisk0 ${DISK0_REF}${FORMAT} \
+ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
+ -scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
+ -boot order='scsi1;scsi0' >/dev/null
DESCRIPTION=$(
- cat <
@@ -456,7 +456,7 @@ DESCRIPTION=$(
@@ -523,7 +523,7 @@ DESCRIPTION=$(
@@ -599,7 +599,7 @@ DESCRIPTION=$(
@@ -458,7 +458,7 @@ DESCRIPTION=$(
@@ -490,7 +490,7 @@ DESCRIPTION=$(
@@ -492,7 +492,7 @@ DESCRIPTION=$(
@@ -642,20 +642,20 @@ EOF
)
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
if [ -n "$DISK_SIZE" ]; then
- msg_info "Resizing disk to $DISK_SIZE GB"
- qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
- msg_ok "Resized disk to ${CL}${BL}${DISK_SIZE}${CL} GB"
+ msg_info "Resizing disk to $DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
+ msg_ok "Resized disk to ${CL}${BL}${DISK_SIZE}${CL} GB"
else
- msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
- qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
- msg_ok "Resized disk to ${CL}${BL}${DEFAULT_DISK_SIZE}${CL} GB"
+ msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
+ msg_ok "Resized disk to ${CL}${BL}${DEFAULT_DISK_SIZE}${CL} GB"
fi
msg_ok "Created a $APP ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting $APP"
- qm start $VMID
- msg_ok "Started $APP"
+ msg_info "Starting $APP"
+ qm start $VMID
+ msg_ok "Started $APP"
fi
post_update_to_api "done" "none"
msg_ok "Completed Successfully!\n"
diff --git a/vm/umbrel-os-vm.sh b/vm/umbrel-os-vm.sh
index daed97027..bdaca5ca2 100644
--- a/vm/umbrel-os-vm.sh
+++ b/vm/umbrel-os-vm.sh
@@ -57,341 +57,341 @@ trap cleanup EXIT
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- post_update_to_api "failed" "${command}"
- local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
- echo -e "\n$error_message\n"
- cleanup_vmid
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ post_update_to_api "failed" "${command}"
+ local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
+ echo -e "\n$error_message\n"
+ cleanup_vmid
}
function get_valid_nextid() {
- local try_id
- try_id=$(pvesh get /cluster/nextid)
- while true; do
- if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
- try_id=$((try_id + 1))
- continue
- fi
- if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
- try_id=$((try_id + 1))
- continue
- fi
- break
- done
- echo "$try_id"
+ local try_id
+ try_id=$(pvesh get /cluster/nextid)
+ while true; do
+ if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ break
+ done
+ echo "$try_id"
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- post_update_to_api "done" "none"
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ post_update_to_api "done" "none"
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Umbrel OS VM" --yesno "This will create a New Umbrel OS VM. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
+ header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
+ local msg="$1"
+ echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR}${CM}${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CM}${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
function pve_check() {
- if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
- msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
- echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then
+ msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
+ echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
- echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
+ echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
+ fi
fi
- fi
}
function exit_script() {
- clear
- echo -e "\n${CROSS}${RD}User exited script${CL}\n"
- exit
+ clear
+ echo -e "\n${CROSS}${RD}User exited script${CL}\n"
+ exit
}
function default_settings() {
- VMID=$(get_valid_nextid)
- FORMAT=",efitype=4m"
- MACHINE=""
- DISK_CACHE=""
- DISK_SIZE="32G"
- HN="umbrel-os"
- CPU_TYPE=""
- CORE_COUNT="2"
- RAM_SIZE="4096"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="yes"
- METHOD="default"
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- echo -e "${CREATING}${BOLD}${DGN}Creating a Umbrel OS VM using the above default settings${CL}"
+ VMID=$(get_valid_nextid)
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ DISK_CACHE=""
+ DISK_SIZE="32G"
+ HN="umbrel-os"
+ CPU_TYPE=""
+ CORE_COUNT="2"
+ RAM_SIZE="4096"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="yes"
+ METHOD="default"
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Umbrel OS VM using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
- [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID=$(get_valid_nextid)
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
+ METHOD="advanced"
+ [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID=$(get_valid_nextid)
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
+ else
+ exit-script
+ fi
+ done
+
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
+ "i440fx" "Machine i440fx" ON \
+ "q35" "Machine q35" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $MACH = q35 ]; then
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
+ else
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ fi
else
- exit-script
+ exit_script
fi
- done
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
- "i440fx" "Machine i440fx" ON \
- "q35" "Machine q35" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $MACH = q35 ]; then
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
+ if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
+ if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
+ DISK_SIZE="${DISK_SIZE}G"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ else
+ echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
+ exit_script
+ fi
else
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
+ exit_script
fi
- else
- exit_script
- fi
- if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
- if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
- DISK_SIZE="${DISK_SIZE}G"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
- elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None (Default)" ON \
+ "1" "Write Through" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
+ else
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
- exit_script
+ exit_script
fi
- else
- exit_script
- fi
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None (Default)" ON \
- "1" "Write Through" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 umbrel-os --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="umbrel-os"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ else
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
+ exit_script
fi
- else
- exit_script
- fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 umbrel-os --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="umbrel-os"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "KVM64 (Default)" ON \
+ "1" "Host" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $CPU_TYPE1 = "1" ]; then
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
+ else
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
+ fi
else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "KVM64 (Default)" ON \
- "1" "Host" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $CPU_TYPE1 = "1" ]; then
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ else
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ fi
else
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
+ exit_script
fi
- else
- exit_script
- fi
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="2048"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ else
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ fi
else
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="2048"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ else
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ fi
else
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ else
+ MAC="$MAC1"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ fi
else
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ else
+ VLAN=",tag=$VLAN1"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ fi
else
- MAC="$MAC1"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ else
+ MTU=",mtu=$MTU1"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ fi
else
- VLAN=",tag=$VLAN1"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ exit_script
fi
- else
- exit_script
- fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
else
- MTU=",mtu=$MTU1"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
fi
- else
- exit_script
- fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
- else
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
- fi
-
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Umbrel OS VM?" --no-button Do-Over 10 58); then
- echo -e "${CREATING}${BOLD}${DGN}Creating a Umbrel OS VM using the above advanced settings${CL}"
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Umbrel OS VM?" --no-button Do-Over 10 58); then
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Umbrel OS VM using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
arch_check
@@ -402,29 +402,29 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
@@ -437,7 +437,7 @@ curl -f#SL -o "$FILE" "$URL"
msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
if ! command -v pv &>/dev/null; then
- apt-get update &>/dev/null && apt-get install -y pv &>/dev/null
+ apt-get update &>/dev/null && apt-get install -y pv &>/dev/null
fi
msg_info "Decompressing $FILE with progress${CL}\n"
@@ -449,39 +449,39 @@ msg_ok "Decompressed to ${CL}${BL}${FILE%.xz}${CL}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in
nfs | dir)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ THIN=""
+ ;;
btrfs)
- DISK_EXT=".raw"
- DISK_REF="$VMID/"
- DISK_IMPORT="-format raw"
- FORMAT=",efitype=4m"
- THIN=""
- ;;
+ DISK_EXT=".raw"
+ DISK_REF="$VMID/"
+ DISK_IMPORT="-format raw"
+ FORMAT=",efitype=4m"
+ THIN=""
+ ;;
esac
for i in {0,1,2}; do
- disk="DISK$i"
- eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
- eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
+ disk="DISK$i"
+ eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
+ eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done
msg_info "Creating a Umbrel OS VM"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
- -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
+ -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
pvesm alloc $STORAGE $VMID $DISK0 4M >/dev/null
qm importdisk $VMID ${FILE_IMG} $STORAGE ${DISK_IMPORT:-} >/dev/null
qm set $VMID \
- -efidisk0 ${DISK0_REF}${FORMAT} \
- -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
- -boot order=scsi0 \
- -serial0 socket >/dev/null
+ -efidisk0 ${DISK0_REF}${FORMAT} \
+ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
+ -boot order=scsi0 \
+ -serial0 socket >/dev/null
qm set $VMID --agent enabled=1 >/dev/null
DESCRIPTION=$(
- cat <
@@ -513,18 +513,18 @@ EOF
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
if [ -n "$DISK_SIZE" ]; then
- msg_info "Resizing disk to $DISK_SIZE GB"
- qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
+ msg_info "Resizing disk to $DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
else
- msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
- qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
+ msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
+ qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
fi
msg_ok "Created a Umbrel OS VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting Umbrel OS VM"
- qm start $VMID
- msg_ok "Started Umbrel OS VM"
+ msg_info "Starting Umbrel OS VM"
+ qm start $VMID
+ msg_ok "Started Umbrel OS VM"
fi
post_update_to_api "done" "none"
msg_ok "Completed Successfully!\n"
diff --git a/vm/unifi-os-vm.sh b/vm/unifi-os-vm.sh
index 1a7233a6c..9ac19dbb1 100644
--- a/vm/unifi-os-vm.sh
+++ b/vm/unifi-os-vm.sh
@@ -9,8 +9,8 @@ source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-sc
source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/cloud-init.sh) 2>/dev/null || true
function header_info() {
- clear
- cat <<"EOF"
+ clear
+ cat <<"EOF"
__ __ _ _____ ____ _____ _____
/ / / /___ (_) __(_) / __ \/ ___/ / ___/___ ______ _____ _____
/ / / / __ \/ / /_/ / / / / /\__ \ \__ \/ _ \/ ___/ | / / _ \/ ___/
@@ -75,446 +75,446 @@ trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
function error_handler() {
- local exit_code="$?"
- local line_number="$1"
- local command="$2"
- post_update_to_api "failed" "${command}"
- echo -e "\n${RD}[ERROR]${CL} line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing ${YW}$command${CL}\n"
- if qm status $VMID &>/dev/null; then qm stop $VMID &>/dev/null || true; fi
+ local exit_code="$?"
+ local line_number="$1"
+ local command="$2"
+ post_update_to_api "failed" "${command}"
+ echo -e "\n${RD}[ERROR]${CL} line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing ${YW}$command${CL}\n"
+ if qm status $VMID &>/dev/null; then qm stop $VMID &>/dev/null || true; fi
}
function get_valid_nextid() {
- local try_id
- try_id=$(pvesh get /cluster/nextid)
- while true; do
- if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
- try_id=$((try_id + 1))
- continue
- fi
- if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
- try_id=$((try_id + 1))
- continue
- fi
- break
- done
- echo "$try_id"
+ local try_id
+ try_id=$(pvesh get /cluster/nextid)
+ while true; do
+ if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
+ try_id=$((try_id + 1))
+ continue
+ fi
+ break
+ done
+ echo "$try_id"
}
function cleanup_vmid() {
- if qm status $VMID &>/dev/null; then
- qm stop $VMID &>/dev/null
- qm destroy $VMID &>/dev/null
- fi
+ if qm status $VMID &>/dev/null; then
+ qm stop $VMID &>/dev/null
+ qm destroy $VMID &>/dev/null
+ fi
}
function cleanup() {
- popd >/dev/null
- post_update_to_api "done" "none"
- rm -rf $TEMP_DIR
+ popd >/dev/null
+ post_update_to_api "done" "none"
+ rm -rf $TEMP_DIR
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Unifi OS VM" --yesno "This will create a New Unifi OS VM. Proceed?" 10 58; then
- :
+ :
else
- header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
+ header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit
fi
function msg_info() {
- local msg="$1"
- echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
+ local msg="$1"
+ echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
}
function msg_ok() {
- local msg="$1"
- echo -e "${BFR}${CM}${GN}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CM}${GN}${msg}${CL}"
}
function msg_error() {
- local msg="$1"
- echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
+ local msg="$1"
+ echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
function check_root() {
- if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
- clear
- msg_error "Please run this script as root."
- echo -e "\nExiting..."
- sleep 2
- exit
- fi
+ if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
+ clear
+ msg_error "Please run this script as root."
+ echo -e "\nExiting..."
+ sleep 2
+ exit
+ fi
}
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
# Supported: Proxmox VE 8.0.x – 8.9.x and 9.0 – 9.1
pve_check() {
- local PVE_VER
- PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
+ local PVE_VER
+ PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
- # Check for Proxmox VE 8.x: allow 8.0–8.9
- if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
- local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR < 0 || MINOR > 9)); then
- msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported: Proxmox VE version 8.0 – 8.9"
- exit 1
+ # Check for Proxmox VE 8.x: allow 8.0–8.9
+ if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
+ local MINOR="${BASH_REMATCH[1]}"
+ if ((MINOR < 0 || MINOR > 9)); then
+ msg_error "This version of Proxmox VE is not supported."
+ msg_error "Supported: Proxmox VE version 8.0 – 8.9"
+ exit 1
+ fi
+ return 0
fi
- return 0
- fi
- # Check for Proxmox VE 9.x: allow 9.0–9.1
- if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
- local MINOR="${BASH_REMATCH[1]}"
- if ((MINOR < 0 || MINOR > 1)); then
- msg_error "This version of Proxmox VE is not yet supported."
- msg_error "Supported: Proxmox VE version 9.0 – 9.1"
- exit 1
+ # Check for Proxmox VE 9.x: allow 9.0–9.1
+ if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
+ local MINOR="${BASH_REMATCH[1]}"
+ if ((MINOR < 0 || MINOR > 1)); then
+ msg_error "This version of Proxmox VE is not yet supported."
+ msg_error "Supported: Proxmox VE version 9.0 – 9.1"
+ exit 1
+ fi
+ return 0
fi
- return 0
- fi
- # All other unsupported versions
- msg_error "This version of Proxmox VE is not supported."
- msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
- exit 1
+ # All other unsupported versions
+ msg_error "This version of Proxmox VE is not supported."
+ msg_error "Supported versions: Proxmox VE 8.0 – 8.x or 9.0"
+ exit 1
}
function arch_check() {
- if [ "$(dpkg --print-architecture)" != "amd64" ]; then
- echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
- echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
- echo -e "Exiting..."
- sleep 2
- exit
- fi
+ if [ "$(dpkg --print-architecture)" != "amd64" ]; then
+ echo -e "\n ${INFO}${YWB}This script will not work with PiMox! \n"
+ echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
+ echo -e "Exiting..."
+ sleep 2
+ exit
+ fi
}
function ssh_check() {
- if command -v pveversion >/dev/null 2>&1; then
- if [ -n "${SSH_CLIENT:+x}" ]; then
- if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
- echo "you've been warned"
- else
- clear
- exit
- fi
+ if command -v pveversion >/dev/null 2>&1; then
+ if [ -n "${SSH_CLIENT:+x}" ]; then
+ if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
+ echo "you've been warned"
+ else
+ clear
+ exit
+ fi
+ fi
fi
- fi
}
function exit-script() {
- clear
- echo -e "\n${CROSS}${RD}User exited script${CL}\n"
- exit
+ clear
+ echo -e "\n${CROSS}${RD}User exited script${CL}\n"
+ exit
}
function select_os() {
- if OS_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECT OS" --radiolist \
- "Choose Operating System for UniFi OS VM" 12 68 2 \
- "debian13" "Debian 13 (Trixie) - Latest" ON \
- "ubuntu2404" "Ubuntu 24.04 LTS (Noble)" OFF \
- 3>&1 1>&2 2>&3); then
- case $OS_CHOICE in
- debian13)
- OS_TYPE="debian"
- OS_VERSION="13"
- OS_CODENAME="trixie"
- OS_DISPLAY="Debian 13 (Trixie)"
- ;;
- ubuntu2404)
- OS_TYPE="ubuntu"
- OS_VERSION="24.04"
- OS_CODENAME="noble"
- OS_DISPLAY="Ubuntu 24.04 LTS"
- ;;
- esac
- echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}${OS_DISPLAY}${CL}"
- else
- exit-script
- fi
+ if OS_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECT OS" --radiolist \
+ "Choose Operating System for UniFi OS VM" 12 68 2 \
+ "debian13" "Debian 13 (Trixie) - Latest" ON \
+ "ubuntu2404" "Ubuntu 24.04 LTS (Noble)" OFF \
+ 3>&1 1>&2 2>&3); then
+ case $OS_CHOICE in
+ debian13)
+ OS_TYPE="debian"
+ OS_VERSION="13"
+ OS_CODENAME="trixie"
+ OS_DISPLAY="Debian 13 (Trixie)"
+ ;;
+ ubuntu2404)
+ OS_TYPE="ubuntu"
+ OS_VERSION="24.04"
+ OS_CODENAME="noble"
+ OS_DISPLAY="Ubuntu 24.04 LTS"
+ ;;
+ esac
+ echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}${OS_DISPLAY}${CL}"
+ else
+ exit-script
+ fi
}
function select_cloud_init() {
- # Ubuntu only has cloudimg variant (always Cloud-Init), so no choice needed
- if [ "$OS_TYPE" = "ubuntu" ]; then
- USE_CLOUD_INIT="yes"
- echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes (Ubuntu requires Cloud-Init)${CL}"
- return
- fi
+ # Ubuntu only has cloudimg variant (always Cloud-Init), so no choice needed
+ if [ "$OS_TYPE" = "ubuntu" ]; then
+ USE_CLOUD_INIT="yes"
+ echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes (Ubuntu requires Cloud-Init)${CL}"
+ return
+ fi
- # Debian has two image variants, so user can choose
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" \
- --yesno "Enable Cloud-Init for VM configuration?\n\nCloud-Init allows automatic configuration of:\n• User accounts and passwords\n• SSH keys\n• Network settings (DHCP/Static)\n• DNS configuration\n\nYou can also configure these settings later in Proxmox UI.\n\nNote: Debian without Cloud-Init will use nocloud image with console auto-login." 18 68); then
- USE_CLOUD_INIT="yes"
- echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes${CL}"
- else
- USE_CLOUD_INIT="no"
- echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}no${CL}"
- fi
+ # Debian has two image variants, so user can choose
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" \
+ --yesno "Enable Cloud-Init for VM configuration?\n\nCloud-Init allows automatic configuration of:\n• User accounts and passwords\n• SSH keys\n• Network settings (DHCP/Static)\n• DNS configuration\n\nYou can also configure these settings later in Proxmox UI.\n\nNote: Debian without Cloud-Init will use nocloud image with console auto-login." 18 68); then
+ USE_CLOUD_INIT="yes"
+ echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}yes${CL}"
+ else
+ USE_CLOUD_INIT="no"
+ echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}no${CL}"
+ fi
}
function get_image_url() {
- local arch=$(dpkg --print-architecture)
- case $OS_TYPE in
- debian)
- # Debian has two variants:
- # - generic: For Cloud-Init enabled VMs
- # - nocloud: For VMs without Cloud-Init (has console auto-login)
- if [ "$USE_CLOUD_INIT" = "yes" ]; then
- echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-generic-${arch}.qcow2"
- else
- echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-nocloud-${arch}.qcow2"
- fi
- ;;
- ubuntu)
- # Ubuntu only has cloudimg variant (always with Cloud-Init support)
- echo "https://cloud-images.ubuntu.com/${OS_CODENAME}/current/${OS_CODENAME}-server-cloudimg-${arch}.img"
- ;;
- esac
+ local arch=$(dpkg --print-architecture)
+ case $OS_TYPE in
+ debian)
+ # Debian has two variants:
+ # - generic: For Cloud-Init enabled VMs
+ # - nocloud: For VMs without Cloud-Init (has console auto-login)
+ if [ "$USE_CLOUD_INIT" = "yes" ]; then
+ echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-generic-${arch}.qcow2"
+ else
+ echo "https://cloud.debian.org/images/cloud/${OS_CODENAME}/latest/debian-${OS_VERSION}-nocloud-${arch}.qcow2"
+ fi
+ ;;
+ ubuntu)
+ # Ubuntu only has cloudimg variant (always with Cloud-Init support)
+ echo "https://cloud-images.ubuntu.com/${OS_CODENAME}/current/${OS_CODENAME}-server-cloudimg-${arch}.img"
+ ;;
+ esac
}
function default_settings() {
- # OS Selection - ALWAYS ask
- select_os
+ # OS Selection - ALWAYS ask
+ select_os
- # Cloud-Init Selection - ALWAYS ask
- select_cloud_init
+ # Cloud-Init Selection - ALWAYS ask
+ select_cloud_init
- # Set defaults for other settings
- VMID=$(get_valid_nextid)
- FORMAT=""
- MACHINE=" -machine q35"
- DISK_CACHE=""
- DISK_SIZE="32G"
- HN="unifi-server-os"
- CPU_TYPE=" -cpu host"
- CORE_COUNT="2"
- RAM_SIZE="4096"
- BRG="vmbr0"
- MAC="$GEN_MAC"
- VLAN=""
- MTU=""
- START_VM="yes"
- METHOD="default"
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- echo -e "${CREATING}${BOLD}${DGN}Creating a UniFi OS VM using the above default settings${CL}"
+ # Set defaults for other settings
+ VMID=$(get_valid_nextid)
+ FORMAT=""
+ MACHINE=" -machine q35"
+ DISK_CACHE=""
+ DISK_SIZE="32G"
+ HN="unifi-server-os"
+ CPU_TYPE=" -cpu host"
+ CORE_COUNT="2"
+ RAM_SIZE="4096"
+ BRG="vmbr0"
+ MAC="$GEN_MAC"
+ VLAN=""
+ MTU=""
+ START_VM="yes"
+ METHOD="default"
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE}${CL}"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ echo -e "${CREATING}${BOLD}${DGN}Creating a UniFi OS VM using the above default settings${CL}"
}
function advanced_settings() {
- METHOD="advanced"
+ METHOD="advanced"
- # OS Selection - ALWAYS ask
- select_os
+ # OS Selection - ALWAYS ask
+ select_os
- # Cloud-Init Selection - ALWAYS ask
- select_cloud_init
+ # Cloud-Init Selection - ALWAYS ask
+ select_cloud_init
- [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
- while true; do
- if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z "$VMID" ]; then
- VMID=$(get_valid_nextid)
- fi
- if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
- echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
- sleep 2
- continue
- fi
- echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
- break
+ [ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
+ while true; do
+ if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z "$VMID" ]; then
+ VMID=$(get_valid_nextid)
+ fi
+ if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
+ echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
+ sleep 2
+ continue
+ fi
+ echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
+ break
+ else
+ exit-script
+ fi
+ done
+
+ if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
+ "q35" "Q35 (Modern, PCIe, UEFI)" ON \
+ "i440fx" "i440fx (Legacy)" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ "$MACH" = "q35" ]; then
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
+ FORMAT=""
+ MACHINE=" -machine q35"
+ else
+ echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx (Legacy)${CL}"
+ FORMAT=",efitype=4m"
+ MACHINE=""
+ fi
else
- exit-script
+ exit-script
fi
- done
- if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
- "q35" "Q35 (Modern, PCIe, UEFI)" ON \
- "i440fx" "i440fx (Legacy)" OFF \
- 3>&1 1>&2 2>&3); then
- if [ "$MACH" = "q35" ]; then
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}Q35 (Modern)${CL}"
- FORMAT=""
- MACHINE=" -machine q35"
+ if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
+ if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
+ DISK_SIZE="${DISK_SIZE}G"
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ else
+ echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
+ exit-script
+ fi
else
- echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx (Legacy)${CL}"
- FORMAT=",efitype=4m"
- MACHINE=""
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ')
- if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
- DISK_SIZE="${DISK_SIZE}G"
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
- elif [[ "$DISK_SIZE" =~ ^[0-9]+G$ ]]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}$DISK_SIZE${CL}"
+ if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
+ "0" "None (Default)" ON \
+ "1" "Write Through" OFF \
+ 3>&1 1>&2 2>&3); then
+ if [ $DISK_CACHE = "1" ]; then
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
+ DISK_CACHE="cache=writethrough,"
+ else
+ echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
+ DISK_CACHE=""
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${RD}Invalid Disk Size. Please use a number (e.g., 10 or 10G).${CL}"
- exit-script
+ exit-script
fi
- else
- exit-script
- fi
- if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
- "0" "None (Default)" ON \
- "1" "Write Through" OFF \
- 3>&1 1>&2 2>&3); then
- if [ $DISK_CACHE = "1" ]; then
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}Write Through${CL}"
- DISK_CACHE="cache=writethrough,"
+ if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 unifi-os-server --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VM_NAME ]; then
+ HN="unifi-os-server"
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ else
+ HN=$(echo ${VM_NAME,,} | tr -d ' ')
+ echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ fi
else
- echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
- DISK_CACHE=""
+ exit-script
fi
- else
- exit-script
- fi
- if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 unifi-os-server --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VM_NAME ]; then
- HN="unifi-os-server"
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
+ "Host" "Host (Faster, recommended)" ON \
+ "KVM64" "KVM64 (Compatibility)" OFF \
+ 3>&1 1>&2 2>&3); then
+ case "$CPU_TYPE1" in
+ Host)
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
+ CPU_TYPE=" -cpu host"
+ ;;
+ *)
+ echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
+ CPU_TYPE=""
+ ;;
+ esac
else
- HN=$(echo ${VM_NAME,,} | tr -d ' ')
- echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
- "Host" "Host (Faster, recommended)" ON \
- "KVM64" "KVM64 (Compatibility)" OFF \
- 3>&1 1>&2 2>&3); then
- case "$CPU_TYPE1" in
- Host)
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
- CPU_TYPE=" -cpu host"
- ;;
- *)
- echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
- CPU_TYPE=""
- ;;
- esac
- else
- exit-script
- fi
-
- if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $CORE_COUNT ]; then
- CORE_COUNT="2"
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $CORE_COUNT ]; then
+ CORE_COUNT="2"
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ else
+ echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ fi
else
- echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $RAM_SIZE ]; then
- RAM_SIZE="2048"
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 2048 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $RAM_SIZE ]; then
+ RAM_SIZE="2048"
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ else
+ echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ fi
else
- echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}$RAM_SIZE${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $BRG ]; then
- BRG="vmbr0"
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $BRG ]; then
+ BRG="vmbr0"
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ else
+ echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ fi
else
- echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MAC1 ]; then
- MAC="$GEN_MAC"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MAC1 ]; then
+ MAC="$GEN_MAC"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}"
+ else
+ MAC="$MAC1"
+ echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ fi
else
- MAC="$MAC1"
- echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $VLAN1 ]; then
- VLAN1="Default"
- VLAN=""
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $VLAN1 ]; then
+ VLAN1="Default"
+ VLAN=""
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ else
+ VLAN=",tag=$VLAN1"
+ echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ fi
else
- VLAN=",tag=$VLAN1"
- echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}$VLAN1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
- if [ -z $MTU1 ]; then
- MTU1="Default"
- MTU=""
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
+ if [ -z $MTU1 ]; then
+ MTU1="Default"
+ MTU=""
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ else
+ MTU=",mtu=$MTU1"
+ echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ fi
else
- MTU=",mtu=$MTU1"
- echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}$MTU1${CL}"
+ exit-script
fi
- else
- exit-script
- fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
- START_VM="yes"
- else
- echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
- START_VM="no"
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
+ START_VM="yes"
+ else
+ echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}no${CL}"
+ START_VM="no"
+ fi
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Unifi OS VM?" --no-button Do-Over 10 58); then
- echo -e "${CREATING}${BOLD}${DGN}Creating a Unifi OS VM using the above advanced settings${CL}"
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Unifi OS VM?" --no-button Do-Over 10 58); then
+ echo -e "${CREATING}${BOLD}${DGN}Creating a Unifi OS VM using the above advanced settings${CL}"
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
function start_script() {
- if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
- header_info
- echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
- default_settings
- else
- header_info
- echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
- advanced_settings
- fi
+ if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then
+ header_info
+ echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
+ default_settings
+ else
+ header_info
+ echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
+ advanced_settings
+ fi
}
check_root
arch_check
@@ -525,31 +525,31 @@ post_to_api_vm
msg_info "Validating Storage"
while read -r line; do
- TAG=$(echo $line | awk '{print $1}')
- TYPE=$(echo $line | awk '{printf "%-10s", $2}')
- FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- ITEM=" Type: $TYPE Free: $FREE "
- OFFSET=2
- if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
- MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
- fi
- STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
+ TAG=$(echo $line | awk '{print $1}')
+ TYPE=$(echo $line | awk '{printf "%-10s", $2}')
+ FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
+ ITEM=" Type: $TYPE Free: $FREE "
+ OFFSET=2
+ if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
+ MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
+ fi
+ STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content images | awk 'NR>1')
VALID=$(pvesm status -content images | awk 'NR>1')
if [ -z "$VALID" ]; then
- msg_error "Unable to detect a valid storage location."
- exit
+ msg_error "Unable to detect a valid storage location."
+ exit
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
- STORAGE=${STORAGE_MENU[0]}
+ STORAGE=${STORAGE_MENU[0]}
else
- while [ -z "${STORAGE:+x}" ]; do
- #if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
- printf "\e[?25h"
- STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
- "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
- 16 $(($MSG_MAX_LENGTH + 23)) 6 \
- "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
- done
+ while [ -z "${STORAGE:+x}" ]; do
+ #if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
+ printf "\e[?25h"
+ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
+ "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
+ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
+ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
+ done
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
@@ -559,9 +559,9 @@ msg_info "Fetching latest UniFi OS Server version"
# Install jq if not available
if ! command -v jq &>/dev/null; then
- msg_info "Installing jq for JSON parsing"
- apt-get update -qq >/dev/null 2>&1
- apt-get install -y jq -qq >/dev/null 2>&1
+ msg_info "Installing jq for JSON parsing"
+ apt-get update -qq >/dev/null 2>&1
+ apt-get install -y jq -qq >/dev/null 2>&1
fi
# Download firmware list from Ubiquiti API
@@ -569,9 +569,9 @@ API_URL="https://fw-update.ui.com/api/firmware-latest"
TEMP_JSON=$(mktemp)
if ! curl -fsSL "$API_URL" -o "$TEMP_JSON"; then
- rm -f "$TEMP_JSON"
- msg_error "Failed to fetch data from Ubiquiti API"
- exit 1
+ rm -f "$TEMP_JSON"
+ msg_error "Failed to fetch data from Ubiquiti API"
+ exit 1
fi
# Parse JSON to find latest unifi-os-server linux-x64 version
@@ -590,8 +590,8 @@ UOS_URL=$(echo "$LATEST" | jq -r '._links.data.href')
rm -f "$TEMP_JSON"
if [ -z "$UOS_URL" ] || [ -z "$UOS_VERSION" ]; then
- msg_error "Failed to parse UniFi OS Server version or download URL"
- exit 1
+ msg_error "Failed to parse UniFi OS Server version or download URL"
+ exit 1
fi
UOS_INSTALLER="unifi-os-server-${UOS_VERSION}.bin"
@@ -609,10 +609,10 @@ msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
# --- Inject UniFi Installer ---
if ! command -v virt-customize &>/dev/null; then
- msg_info "Installing libguestfs-tools on host"
- apt-get -qq update >/dev/null
- apt-get -qq install libguestfs-tools -y >/dev/null
- msg_ok "Installed libguestfs-tools"
+ msg_info "Installing libguestfs-tools on host"
+ apt-get -qq update >/dev/null
+ apt-get -qq install libguestfs-tools -y >/dev/null
+ msg_ok "Installed libguestfs-tools"
fi
msg_info "Preparing ${OS_DISPLAY} Qcow2 Disk Image"
@@ -775,16 +775,16 @@ UNIFI_PREINSTALLED="no"
msg_info "Pre-installing base packages (qemu-guest-agent, podman, curl)"
if virt-customize -a "${FILE}" --install qemu-guest-agent,curl,ca-certificates,podman,uidmap,slirp4netns >/dev/null 2>&1; then
- msg_ok "Pre-installed base packages (UniFi OS will install on first boot)"
+ msg_ok "Pre-installed base packages (UniFi OS will install on first boot)"
else
- msg_info "Pre-installation not possible, packages will install on first boot"
+ msg_info "Pre-installation not possible, packages will install on first boot"
fi
# Add auto-login if Cloud-Init is disabled
if [ "$USE_CLOUD_INIT" != "yes" ]; then
- virt-customize -q -a "${FILE}" \
- --run-command 'mkdir -p /etc/systemd/system/getty@tty1.service.d' \
- --run-command "bash -c 'echo -e \"[Service]\nExecStart=\nExecStart=-/sbin/agetty --autologin root --noclear %I \\\$TERM\" > /etc/systemd/system/getty@tty1.service.d/override.conf'" 2>/dev/null
+ virt-customize -q -a "${FILE}" \
+ --run-command 'mkdir -p /etc/systemd/system/getty@tty1.service.d' \
+ --run-command "bash -c 'echo -e \"[Service]\nExecStart=\nExecStart=-/sbin/agetty --autologin root --noclear %I \\\$TERM\" > /etc/systemd/system/getty@tty1.service.d/override.conf'" 2>/dev/null
fi
msg_ok "UniFi OS Server will be installed on first boot"
@@ -796,7 +796,7 @@ qemu-img create -f qcow2 expanded.qcow2 ${DISK_SIZE} >/dev/null 2>&1
# Detect partition device (sda1 for Ubuntu, vda1 for Debian)
PARTITION_DEV=$(virt-filesystems --long -h --all -a "${FILE}" | grep -oP '/dev/\K(s|v)da1' | head -1)
if [ -z "$PARTITION_DEV" ]; then
- PARTITION_DEV="sda1" # fallback
+ PARTITION_DEV="sda1" # fallback
fi
virt-resize --quiet --expand /dev/${PARTITION_DEV} ${FILE} expanded.qcow2 >/dev/null 2>&1
@@ -805,35 +805,35 @@ msg_ok "Expanded disk image to ${DISK_SIZE}"
msg_info "Creating UniFi OS VM"
qm create "$VMID" -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf \
- ${CPU_TYPE} -cores "$CORE_COUNT" -memory "$RAM_SIZE" \
- -name "$HN" -tags community-script \
- -net0 virtio,bridge="$BRG",macaddr="$MAC""$VLAN""$MTU" \
- -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
+ ${CPU_TYPE} -cores "$CORE_COUNT" -memory "$RAM_SIZE" \
+ -name "$HN" -tags community-script \
+ -net0 virtio,bridge="$BRG",macaddr="$MAC""$VLAN""$MTU" \
+ -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc "$STORAGE" "$VMID" "vm-$VMID-disk-0" 4M >/dev/null
IMPORT_OUT="$(qm importdisk "$VMID" "$FILE" "$STORAGE" --format qcow2 2>&1 || true)"
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p")"
if [[ -z "$DISK_REF" ]]; then
- DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$1 ~ ("vm-"id"-disk-") {print $1}' | sort | tail -n1)"
+ DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$1 ~ ("vm-"id"-disk-") {print $1}' | sort | tail -n1)"
fi
qm set "$VMID" \
- -efidisk0 "${STORAGE}:0${FORMAT},size=4M" \
- -scsi0 "${DISK_REF},${DISK_CACHE}size=${DISK_SIZE}" \
- -boot order=scsi0 -serial0 socket >/dev/null
+ -efidisk0 "${STORAGE}:0${FORMAT},size=4M" \
+ -scsi0 "${DISK_REF},${DISK_CACHE}size=${DISK_SIZE}" \
+ -boot order=scsi0 -serial0 socket >/dev/null
qm resize "$VMID" scsi0 "$DISK_SIZE" >/dev/null
qm set "$VMID" --agent enabled=1 >/dev/null
# Add Cloud-Init drive if enabled
if [ "$USE_CLOUD_INIT" = "yes" ]; then
- msg_info "Configuring Cloud-Init"
- setup_cloud_init "$VMID" "$STORAGE" "$HN" "yes" >/dev/null 2>&1
- msg_ok "Cloud-Init configured"
+ msg_info "Configuring Cloud-Init"
+ setup_cloud_init "$VMID" "$STORAGE" "$HN" "yes" >/dev/null 2>&1
+ msg_ok "Cloud-Init configured"
fi
DESCRIPTION=$(
- cat <
@@ -869,71 +869,71 @@ msg_info "Operating System: ${OS_DISPLAY}"
msg_info "Cloud-Init: ${USE_CLOUD_INIT}"
if [ "$START_VM" == "yes" ]; then
- msg_info "Starting UniFi OS VM"
- qm start $VMID
- msg_ok "Started UniFi OS VM"
+ msg_info "Starting UniFi OS VM"
+ qm start $VMID
+ msg_ok "Started UniFi OS VM"
- msg_info "Waiting for VM to boot (30 seconds)"
- sleep 30
- msg_ok "VM should be booting now"
+ msg_info "Waiting for VM to boot (30 seconds)"
+ sleep 30
+ msg_ok "VM should be booting now"
- msg_info "Detecting VM IP address (may take up to 60 seconds)"
- VM_IP=""
- for i in {1..30}; do
- VM_IP=$(qm guest cmd $VMID network-get-interfaces 2>/dev/null | jq -r '.[1]["ip-addresses"][]? | select(.["ip-address-type"] == "ipv4") | .["ip-address"]' 2>/dev/null | grep -v "127.0.0.1" | head -1 || echo "")
+ msg_info "Detecting VM IP address (may take up to 60 seconds)"
+ VM_IP=""
+ for i in {1..30}; do
+ VM_IP=$(qm guest cmd $VMID network-get-interfaces 2>/dev/null | jq -r '.[1]["ip-addresses"][]? | select(.["ip-address-type"] == "ipv4") | .["ip-address"]' 2>/dev/null | grep -v "127.0.0.1" | head -1 || echo "")
- if [ -n "$VM_IP" ]; then
- msg_ok "VM IP Address detected: ${VM_IP}"
- break
- fi
- sleep 2
- done
-
- if [ -n "$VM_IP" ]; then
- msg_info "Waiting for UniFi OS installation to complete (this takes 3-5 minutes)"
-
- WAIT_COUNT=0
- MAX_WAIT=300 # 5 minutes max
- PORT_OPEN=0
- LAST_MSG_TIME=0
-
- while [ $WAIT_COUNT -lt $MAX_WAIT ]; do
- if timeout 2 bash -c ">/dev/tcp/${VM_IP}/11443" 2>/dev/null; then
- PORT_OPEN=1
- msg_ok "UniFi OS Server installation completed successfully"
- break
- fi
-
- sleep 5
- WAIT_COUNT=$((WAIT_COUNT + 5))
-
- # Update message every 20 seconds
- if [ $((WAIT_COUNT - LAST_MSG_TIME)) -ge 20 ]; then
- echo -e "${BFR}${TAB}${YW}${HOLD}Installation in progress... ${WAIT_COUNT}s elapsed (check: tail -f /var/log/install-unifi.log in VM)${CL}"
- LAST_MSG_TIME=$WAIT_COUNT
- fi
+ if [ -n "$VM_IP" ]; then
+ msg_ok "VM IP Address detected: ${VM_IP}"
+ break
+ fi
+ sleep 2
done
- if [ $PORT_OPEN -eq 1 ]; then
- echo -e "\n${TAB}${GATEWAY}${BOLD}${GN}✓ UniFi OS Server is ready!${CL}"
- echo -e "${TAB}${GATEWAY}${BOLD}${GN}✓ Access at: ${BGN}https://${VM_IP}:11443${CL}\n"
+ if [ -n "$VM_IP" ]; then
+ msg_info "Waiting for UniFi OS installation to complete (this takes 3-5 minutes)"
+
+ WAIT_COUNT=0
+ MAX_WAIT=300 # 5 minutes max
+ PORT_OPEN=0
+ LAST_MSG_TIME=0
+
+ while [ $WAIT_COUNT -lt $MAX_WAIT ]; do
+ if timeout 2 bash -c ">/dev/tcp/${VM_IP}/11443" 2>/dev/null; then
+ PORT_OPEN=1
+ msg_ok "UniFi OS Server installation completed successfully"
+ break
+ fi
+
+ sleep 5
+ WAIT_COUNT=$((WAIT_COUNT + 5))
+
+ # Update message every 20 seconds
+ if [ $((WAIT_COUNT - LAST_MSG_TIME)) -ge 20 ]; then
+ echo -e "${BFR}${TAB}${YW}${HOLD}Installation in progress... ${WAIT_COUNT}s elapsed (check: tail -f /var/log/install-unifi.log in VM)${CL}"
+ LAST_MSG_TIME=$WAIT_COUNT
+ fi
+ done
+
+ if [ $PORT_OPEN -eq 1 ]; then
+ echo -e "\n${TAB}${GATEWAY}${BOLD}${GN}✓ UniFi OS Server is ready!${CL}"
+ echo -e "${TAB}${GATEWAY}${BOLD}${GN}✓ Access at: ${BGN}https://${VM_IP}:11443${CL}\n"
+ else
+ msg_ok "VM is running, but installation is still in progress"
+ echo -e "${TAB}${INFO}${YW}Installation takes 3-5 minutes after first boot${CL}"
+ echo -e "${TAB}${INFO}${YW}Check progress: ${BL}qm guest exec ${VMID} -- tail -f /var/log/install-unifi.log${CL}"
+ echo -e "${TAB}${INFO}${YW}Or SSH to: ${BL}${VM_IP}${CL} and run: ${BL}tail -f /var/log/install-unifi.log${CL}"
+ echo -e "${TAB}${INFO}${YW}Access will be at: ${BGN}https://${VM_IP}:11443${CL}"
+ fi
else
- msg_ok "VM is running, but installation is still in progress"
- echo -e "${TAB}${INFO}${YW}Installation takes 3-5 minutes after first boot${CL}"
- echo -e "${TAB}${INFO}${YW}Check progress: ${BL}qm guest exec ${VMID} -- tail -f /var/log/install-unifi.log${CL}"
- echo -e "${TAB}${INFO}${YW}Or SSH to: ${BL}${VM_IP}${CL} and run: ${BL}tail -f /var/log/install-unifi.log${CL}"
- echo -e "${TAB}${INFO}${YW}Access will be at: ${BGN}https://${VM_IP}:11443${CL}"
+ msg_ok "VM is running (ID: ${VMID})"
+ echo -e "${TAB}${INFO}${YW}Could not auto-detect IP address${CL}"
+ echo -e "${TAB}${INFO}${YW}Access VM console in Proxmox to check status${CL}"
+ echo -e "${TAB}${INFO}${YW}Or check installation log: ${BL}tail -f /var/log/install-unifi.log${CL}"
fi
- else
- msg_ok "VM is running (ID: ${VMID})"
- echo -e "${TAB}${INFO}${YW}Could not auto-detect IP address${CL}"
- echo -e "${TAB}${INFO}${YW}Access VM console in Proxmox to check status${CL}"
- echo -e "${TAB}${INFO}${YW}Or check installation log: ${BL}tail -f /var/log/install-unifi.log${CL}"
- fi
fi
if [ "$USE_CLOUD_INIT" = "yes" ]; then
- display_cloud_init_info "$VMID" "$HN"
+ display_cloud_init_info "$VMID" "$HN"
fi
post_update_to_api "done" "none"