mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-06-28 04:06:54 +00:00
192 lines
5.5 KiB
Bash
192 lines
5.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# ================================================
|
|
# VM Configuration Module - ProxMenux
|
|
# ================================================
|
|
|
|
|
|
|
|
BASE_DIR="/usr/local/share/proxmenux"
|
|
UTILS_FILE="$BASE_DIR/utils.sh"
|
|
VENV_PATH="/opt/googletrans-env"
|
|
|
|
if [[ -f "$UTILS_FILE" ]]; then
|
|
source "$UTILS_FILE"
|
|
fi
|
|
|
|
load_language
|
|
initialize_cache
|
|
|
|
|
|
|
|
function generate_mac() {
|
|
local GEN_MAC="02"
|
|
for i in {1..5}; do
|
|
BYTE=$(printf "%02X" $((RANDOM % 256)))
|
|
GEN_MAC="${GEN_MAC}:${BYTE}"
|
|
done
|
|
echo "$GEN_MAC"
|
|
}
|
|
|
|
function load_default_vm_config() {
|
|
local os_type="$1"
|
|
|
|
VMID=$(pvesh get /cluster/nextid 2>/dev/null || echo "100")
|
|
MAC=$(generate_mac)
|
|
|
|
case "$os_type" in
|
|
"nas")
|
|
HN="synology-nas"
|
|
CORE_COUNT="2"
|
|
RAM_SIZE="8192"
|
|
MACHINE=" -machine q35"
|
|
BIOS_TYPE=" -bios ovmf"
|
|
START_VM="no"
|
|
;;
|
|
"windows")
|
|
HN="windows-vm"
|
|
CORE_COUNT="4"
|
|
RAM_SIZE="8192"
|
|
MACHINE=" -machine q35"
|
|
BIOS_TYPE=" -bios ovmf"
|
|
START_VM="no"
|
|
;;
|
|
"linux")
|
|
HN="linux-vm"
|
|
CORE_COUNT="2"
|
|
RAM_SIZE="4096"
|
|
MACHINE=" -machine q35"
|
|
BIOS_TYPE=" -bios ovmf"
|
|
START_VM="no"
|
|
;;
|
|
"lite")
|
|
HN="lite-vm"
|
|
CORE_COUNT="1"
|
|
RAM_SIZE="2048"
|
|
MACHINE=""
|
|
BIOS_TYPE=" -bios seabios"
|
|
START_VM="no"
|
|
;;
|
|
*)
|
|
HN="vm-proxmenux"
|
|
CORE_COUNT="2"
|
|
RAM_SIZE="2048"
|
|
MACHINE=" -machine q35"
|
|
BIOS_TYPE=" -bios ovmf"
|
|
START_VM="no"
|
|
;;
|
|
esac
|
|
|
|
CPU_TYPE=" -cpu host"
|
|
BRG="vmbr0"
|
|
VLAN=""
|
|
MTU=""
|
|
SERIAL_PORT="socket"
|
|
FORMAT=""
|
|
DISK_CACHE=""
|
|
}
|
|
|
|
function apply_default_vm_config() {
|
|
echo -e "${DEF}$(translate "Applying default VM configuration")${CL}"
|
|
echo -e "${DGN}$(translate "Virtual Machine ID")${CL}: ${BGN}$VMID${CL}"
|
|
echo -e "${DGN}$(translate "Hostname")${CL}: ${BGN}$HN${CL}"
|
|
echo -e "${DGN}$(translate "CPU Cores")${CL}: ${BGN}$CORE_COUNT${CL}"
|
|
echo -e "${DGN}$(translate "RAM Size")${CL}: ${BGN}$RAM_SIZE MiB${CL}"
|
|
echo -e "${DGN}$(translate "Machine Type")${CL}: ${BGN}${MACHINE/ -machine /}${CL}"
|
|
echo -e "${DGN}$(translate "BIOS Type")${CL}: ${BGN}${BIOS_TYPE/ -bios /}${CL}"
|
|
echo -e "${DGN}$(translate "CPU Model")${CL}: ${BGN}${CPU_TYPE/ -cpu /}${CL}"
|
|
echo -e "${DGN}$(translate "Network Bridge")${CL}: ${BGN}$BRG${CL}"
|
|
echo -e "${DGN}$(translate "MAC Address")${CL}: ${BGN}$MAC${CL}"
|
|
echo -e "${DGN}$(translate "Start VM after creation")${CL}: ${BGN}$START_VM${CL}"
|
|
echo -e
|
|
}
|
|
|
|
|
|
|
|
function configure_vm_advanced() {
|
|
# VMID
|
|
while true; do
|
|
VMID=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set Virtual Machine ID")" 8 58 "$VMID" --title "VM ID" 3>&1 1>&2 2>&3) || return
|
|
if [ -z "$VMID" ]; then continue; fi
|
|
if qm status "$VMID" &>/dev/null || pct status "$VMID" &>/dev/null; then
|
|
msg_error "$(translate "ID already in use. Please choose another.")"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Hostname
|
|
HN=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set Hostname")" 8 58 "$HN" --title "Hostname" 3>&1 1>&2 2>&3) || return
|
|
[[ -z "$HN" ]] && HN="vm-proxmenux"
|
|
|
|
# Machine Type
|
|
MACHINE_TYPE=$(whiptail --backtitle "ProxMenux" --title "$(translate "MACHINE TYPE")" --radiolist \
|
|
"$(translate "Select machine type")" 10 60 2 \
|
|
"q35" "QEMU q35" ON \
|
|
"i440fx" "Legacy i440fx" OFF 3>&1 1>&2 2>&3) || return
|
|
|
|
if [ "$MACHINE_TYPE" = "q35" ]; then
|
|
MACHINE=" -machine q35"
|
|
FORMAT=""
|
|
else
|
|
MACHINE=""
|
|
FORMAT=",efitype=4m"
|
|
fi
|
|
|
|
# BIOS
|
|
BIOS=$(whiptail --backtitle "ProxMenux" --title "$(translate "BIOS TYPE")" --radiolist \
|
|
"$(translate "Choose BIOS type")" 10 60 2 \
|
|
"ovmf" "UEFI (OVMF)" ON \
|
|
"seabios" "Legacy BIOS (SeaBIOS)" OFF 3>&1 1>&2 2>&3) || return
|
|
|
|
BIOS_TYPE=" -bios $BIOS"
|
|
|
|
# CPU Type
|
|
CPU_CHOICE=$(whiptail --backtitle "ProxMenux" --title "$(translate "CPU MODEL")" --radiolist \
|
|
"$(translate "Select CPU model")" 10 60 2 \
|
|
"host" "Host (recommended)" ON \
|
|
"kvm64" "Generic KVM64" OFF 3>&1 1>&2 2>&3) || return
|
|
|
|
if [ "$CPU_CHOICE" = "host" ]; then
|
|
CPU_TYPE=" -cpu host"
|
|
else
|
|
CPU_TYPE=" -cpu kvm64"
|
|
fi
|
|
|
|
# Core Count
|
|
CORE_COUNT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Number of CPU cores")" 8 58 "$CORE_COUNT" --title "CPU Cores" 3>&1 1>&2 2>&3) || return
|
|
|
|
# RAM
|
|
RAM_SIZE=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Amount of RAM in MiB")" 8 58 "$RAM_SIZE" --title "RAM" 3>&1 1>&2 2>&3) || return
|
|
|
|
# Bridge
|
|
BRG=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set network bridge")" 8 58 "$BRG" --title "Network Bridge" 3>&1 1>&2 2>&3) || return
|
|
|
|
# MAC
|
|
MAC_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set MAC Address (leave empty for random)")" 8 58 "$MAC" --title "MAC Address" 3>&1 1>&2 2>&3) || return
|
|
if [[ -z "$MAC_INPUT" ]]; then
|
|
MAC=$(generate_mac)
|
|
else
|
|
MAC="$MAC_INPUT"
|
|
fi
|
|
|
|
# VLAN
|
|
VLAN_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set VLAN Tag (leave empty for none)")" 8 58 --title "VLAN" 3>&1 1>&2 2>&3) || return
|
|
VLAN=""
|
|
[[ -n "$VLAN_INPUT" ]] && VLAN=",tag=$VLAN_INPUT"
|
|
|
|
# MTU
|
|
MTU_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set MTU size (leave empty for default)")" 8 58 --title "MTU" 3>&1 1>&2 2>&3) || return
|
|
MTU=""
|
|
[[ -n "$MTU_INPUT" ]] && MTU=",mtu=$MTU_INPUT"
|
|
|
|
# Start VM
|
|
if (whiptail --backtitle "ProxMenux" --title "$(translate "START VM")" --yesno "$(translate "Start VM when finished?")" 10 60); then
|
|
START_VM="yes"
|
|
else
|
|
START_VM="no"
|
|
fi
|
|
|
|
msg_ok "$(translate "Advanced configuration completed.")"
|
|
}
|