@ -48,16 +48,19 @@ function error_handler() {
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
}
function cleanup( ) {
popd >/dev/null
rm -rf $TEMP_DIR
}
TEMP_DIR = $( mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --title "HOME ASSISTANT OS VM" --yesno "This will create a New Home Assistant OS VM. Proceed?" 10 58; then
@ -70,15 +73,18 @@ function msg_info() {
local msg = " $1 "
echo -ne " ${ HOLD } ${ YW } ${ msg } ... "
}
function msg_ok( ) {
local msg = " $1 "
echo -e " ${ BFR } ${ CM } ${ GN } ${ msg } ${ CL } "
}
function msg_error( ) {
local msg = " $1 "
echo -e " ${ BFR } ${ CROSS } ${ RD } ${ msg } ${ CL } "
}
function PVE_CHECK( ) {
function pve_check( ) {
if [ $( pveversion | grep -c "pve-manager/7\.[2-9]" ) -eq 0 ] ; then
echo -e " ${ CROSS } This version of Proxmox Virtual Environment is not supported "
echo -e "Requires PVE Version 7.2 or higher"
@ -87,7 +93,8 @@ function PVE_CHECK() {
exit
fi
}
function ARCH_CHECK( ) {
function arch_check( ) {
if [ " $( dpkg --print-architecture) " != "amd64" ] ; then
echo -e " \n ${ CROSS } This script will not work with PiMox! \n "
echo -e "Exiting..."
@ -95,7 +102,8 @@ function ARCH_CHECK() {
exit
fi
}
function SSH_CHECK( ) {
function ssh_check( ) {
if command -v pveversion >/dev/null 2>& 1; then
if [ -n " ${ SSH_CLIENT : +x } " ] ; then
if whiptail --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
@ -107,6 +115,13 @@ function SSH_CHECK() {
fi
fi
}
exit-script( ) {
clear
echo -e "⚠ User exited script \n"
exit
}
function default_settings( ) {
BRANCH = " $stable "
VMID = " $NEXTID "
@ -136,133 +151,149 @@ function default_settings() {
echo -e " ${ BL } Creating a HAOS VM using the above default settings ${ CL } "
}
function advanced_settings( ) {
BRANCH = $( whiptail --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
if BRANCH = $( whiptail --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
" $stable " "Stable " ON \
" $beta " "Beta " OFF \
" $dev " "Dev " OFF \
3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ $exitstatus = 0 ] ; then echo -e " ${ DGN } Using HAOS Version: ${ BGN } $BRANCH ${ CL } " ; fi
3>& 1 1>& 2 2>& 3) ; then
echo -e " ${ DGN } Using HAOS Version: ${ BGN } $BRANCH ${ CL } "
else
exit-script
fi
while true; do
VMID = $( whiptail --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z " $VMID " ] ; then
VMID = " $NEXTID "
echo -e " ${ DGN } Virtual Machine ID: ${ BGN } $VMID ${ CL } "
break
else
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
if VMID = $( whiptail --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 "
echo -e " ${ DGN } Virtual Machine ID: ${ BGN } $VMID ${ CL } "
break
else
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
fi
echo -e " ${ DGN } Virtual Machine ID: ${ BGN } $VMID ${ CL } "
break
else
exit-script
fi
done
MACH = $( whiptail --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
if MACH = $( whiptail --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)
exitstatus = $?
if [ $MACH = q35 ] ; then
echo -e " ${ DGN } Using Machine Type: ${ BGN } $MACH ${ CL } "
FORMAT = ""
MACHINE = " -machine q35"
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
echo -e " ${ DGN } Using Machine Type: ${ BGN } $MACH ${ CL } "
FORMAT = ",efitype=4m"
MACHINE = ""
exit-script
fi
DISK_CACHE1 = $( whiptail --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
if DISK_CACHE1 = $( whiptail --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
"0" "Default" ON \
"1" "Write Through" OFF \
3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ $DISK_CACHE1 = "1" ] ; then
echo -e " ${ DGN } Using Disk Cache: ${ BGN } Write Through ${ CL } "
DISK_CACHE = "cache=writethrough,"
3>& 1 1>& 2 2>& 3) ; then
if [ $DISK_CACHE1 = "1" ] ; then
echo -e " ${ DGN } Using Disk Cache: ${ BGN } Write Through ${ CL } "
DISK_CACHE = "cache=writethrough,"
else
echo -e " ${ DGN } Using Disk Cache: ${ BGN } Default ${ CL } "
DISK_CACHE = ""
fi
else
echo -e " ${ DGN } Using Disk Cache: ${ BGN } Default ${ CL } "
DISK_CACHE = ""
exit-script
fi
VM_NAME = $( whiptail --inputbox "Set Hostname" 8 58 haos${ BRANCH } --title "HOSTNAME" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z $VM_NAME ] ; then
HN = " haos ${ BRANCH } "
echo -e " ${ DGN } Using Hostname: ${ BGN } $HN ${ CL } "
else
if [ $exitstatus = 0 ] ; then
if VM_NAME = $( whiptail --inputbox "Set Hostname" 8 58 haos${ BRANCH } --title "HOSTNAME" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3) ; then
if [ -z $VM_NAME ] ; then
HN = " haos ${ BRANCH } "
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
exit-script
fi
CORE_COUNT = $( whiptail --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z $CORE_COUNT ] ; then
CORE_COUNT = "2"
echo -e " ${ DGN } Allocated Cores: ${ BGN } $CORE_COUNT ${ CL } "
if CORE_COUNT = $( whiptail --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
if [ $exitstatus = 0 ] ; then echo -e " ${ DGN } Allocated Cores: ${ BGN } $CORE_COUNT ${ CL } " ; fi
exit-script
fi
RAM_SIZE = $( whiptail --inputbox "Allocate RAM in MiB" 8 58 4096 --title "RAM" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z $RAM_SIZE ] ; then
RAM_SIZE = "4096"
echo -e " ${ DGN } Allocated RAM: ${ BGN } $RAM_SIZE ${ CL } "
if RAM_SIZE = $( whiptail --inputbox "Allocate RAM in MiB" 8 58 4096 --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
else
if [ $exitstatus = 0 ] ; then echo -e " ${ DGN } Allocated RAM: ${ BGN } $RAM_SIZE ${ CL } " ; fi
exit-script
fi
BRG = $( whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z $BRG ] ; then
BRG = "vmbr0"
echo -e " ${ DGN } Using Bridge: ${ BGN } $BRG ${ CL } "
if BRG = $( whiptail --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
if [ $exitstatus = 0 ] ; then echo -e " ${ DGN } Using Bridge: ${ BGN } $BRG ${ CL } " ; fi
exit-script
fi
MAC1 = $( whiptail --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ -z $MAC1 ] ; then
MAC = " $GEN_MAC "
echo -e " ${ DGN } Using MAC Address: ${ BGN } $MAC ${ CL } "
else
if [ $exitstatus = 0 ] ; then
if MAC1 = $( whiptail --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
exit-script
fi
VLAN1 = $( whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ $exitstatus = 0 ] ; then
if VLAN1 = $( whiptail --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 = ""
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
exit-script
fi
MTU1 = $( whiptail --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>& 1 1>& 2 2>& 3)
exitstatus = $?
if [ $exitstatus = 0 ] ; then
if MTU1 = $( whiptail --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 = ""
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
exit-script
fi
if ( whiptail --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58) ; then
@ -281,7 +312,8 @@ function advanced_settings() {
advanced_settings
fi
}
function START_SCRIPT( ) {
function start_script( ) {
if ( whiptail --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58) ; then
header_info
echo -e " ${ BL } Using Default Settings ${ CL } "
@ -292,10 +324,11 @@ function START_SCRIPT() {
advanced_settings
fi
}
ARCH_CHECK
PVE_CHECK
SSH_CHECK
START_SCRIPT
arch_check
pve_check
ssh_check
start_script
msg_info "Validating Storage"
while read -r line; do
TAG = $( echo $line | awk '{print $1}' )