From 58db0a3be9f4866b3bd6dfe658cf8f1b1d32d47b Mon Sep 17 00:00:00 2001 From: tteckster Date: Wed, 25 Jan 2023 10:42:35 -0500 Subject: [PATCH] Update Home Assistant VM's (#983) --- vm/{haos-vm-v4.sh => haos-vm-v5.sh} | 65 +++-- vm/haos.sh.gpg | Bin 3852 -> 0 bytes vm/haos_vm.sh | 272 ------------------ ...imox-haos-vm-v4.sh => pimox-haos-vm-v5.sh} | 77 ++++- 4 files changed, 112 insertions(+), 302 deletions(-) rename vm/{haos-vm-v4.sh => haos-vm-v5.sh} (87%) delete mode 100644 vm/haos.sh.gpg delete mode 100644 vm/haos_vm.sh rename vm/{pimox-haos-vm-v4.sh => pimox-haos-vm-v5.sh} (78%) diff --git a/vm/haos-vm-v4.sh b/vm/haos-vm-v5.sh similarity index 87% rename from vm/haos-vm-v4.sh rename to vm/haos-vm-v5.sh index 8dbf2889..2f41df72 100644 --- a/vm/haos-vm-v4.sh +++ b/vm/haos-vm-v5.sh @@ -2,7 +2,7 @@ function header_info { cat <<"EOF" __ __ ___ _ __ __ ____ _____ - / / / /___ ____ ___ ___ v4 / | __________(_)____/ /_____ _____ / /_ / __ \/ ___/ + / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____v5/ /_ / __ \/ ___/ / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ / / / /\__ \ / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ / /_/ /___/ / /_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____//____/ @@ -13,6 +13,7 @@ clear header_info echo -e "\n Loading..." GEN_MAC=$(echo 'AE 1A 60'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') +USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }') NEXTID=$(pvesh get /cluster/nextid) STABLE=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') BETA=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') @@ -62,13 +63,6 @@ function cleanup() { } TEMP_DIR=$(mktemp -d) pushd $TEMP_DIR >/dev/null -if [ `pveversion | grep "pve-manager/7.2\|7.3" | wc -l` -ne 1 ]; then - echo "⚠ This version of Proxmox Virtual Environment is not supported" - echo "Requires PVE Version: =>7.2" - echo "Exiting..." - sleep 3 - exit -fi if (whiptail --title "HOME ASSISTANT OS VM" --yesno "This will create a New Home Assistant OS VM. Proceed?" 10 58); then echo "User selected Yes" else @@ -76,7 +70,6 @@ else echo -e "⚠ User exited script \n" exit fi - function msg_info() { local msg="$1" echo -ne " ${HOLD} ${YW}${msg}..." @@ -89,7 +82,24 @@ function msg_error() { local msg="$1" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" } - +function PVE_CHECK() { +if [ `pveversion | grep "pve-manager/7.2\|7.3" | wc -l` -ne 1 ]; then + echo "⚠ This version of Proxmox Virtual Environment is not supported" + echo "Requires PVE Version: =>7.2" + echo "Exiting..." + sleep 2 + exit +fi +} +function ARCH_CHECK() { + ARCH=$(dpkg --print-architecture) + if [[ "$ARCH" != "amd64" ]]; then + echo -e "\n ❌ This script will not work with PiMox! \n" + echo -e "Exiting..." + sleep 2 + exit + fi +} function default_settings() { echo -e "${DGN}Using HAOS Version: ${BGN}${STABLE}${CL}" BRANCH=${STABLE} @@ -110,6 +120,8 @@ function default_settings() { MAC=$GEN_MAC echo -e "${DGN}Using VLAN: ${BGN}Default${CL}" VLAN="" + echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}" + MTU="" echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}" START_VM="yes" echo -e "${BL}Creating a HAOS VM using the above default settings${CL}" @@ -126,8 +138,16 @@ if [ $exitstatus = 0 ]; then echo -e "${DGN}Using HAOS Version: ${BGN}$BRANCH${C 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: ${BGN}$VMID${CL}"; -else - if [ $exitstatus = 0 ]; then echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"; fi; + else + if echo "$USEDID" | egrep -q "$VMID" + then + echo -e "\n🚨 ${RD}ID $VMID is already in use${CL} \n" + echo -e "Exiting Script \n" + sleep 2; + exit + else + if [ $exitstatus = 0 ]; then echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"; fi; + fi fi MACH=$(whiptail --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \ "i440fx" "Machine i440fx" ON \ @@ -183,6 +203,17 @@ else echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}" fi 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 [ -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 +fi if (whiptail --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" @@ -199,7 +230,7 @@ else advanced_settings fi } -function start_script() { +function START_SCRIPT() { if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then clear header_info @@ -212,7 +243,9 @@ else advanced_settings fi } -start_script +ARCH_CHECK +PVE_CHECK +START_SCRIPT msg_info "Validating Storage" while read -r line; do TAG=$(echo $line | awk '{print $1}') @@ -278,8 +311,8 @@ for i in {0,1}; do done msg_ok "Extracted KVM Disk Image" msg_info "Creating HAOS VM" -qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf -cores $CORE_COUNT -memory $RAM_SIZE -name $HN -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN \ - -onboot 1 -ostype l26 -scsihw virtio-scsi-pci +qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf -cores $CORE_COUNT -memory $RAM_SIZE \ + -name $HN -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 \ diff --git a/vm/haos.sh.gpg b/vm/haos.sh.gpg deleted file mode 100644 index c887542bcb808d9e1094be86e8b595681a0ba1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3852 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 OV|9-rFHVs{mGX|rqg5RM diff --git a/vm/haos_vm.sh b/vm/haos_vm.sh deleted file mode 100644 index 5f204f69..00000000 --- a/vm/haos_vm.sh +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env bash -echo -e "Loading..." -GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') -NEXTID=$(pvesh get /cluster/nextid) -STABLE=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') -BETA=$(curl -sX GET "https://api.github.com/repos/home-assistant/operating-system/releases" | awk '/tag_name/{print $4;exit}' FS='[""]') -DEV=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/dev.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') -YW=`echo "\033[33m"` -BL=`echo "\033[36m"` -HA=`echo "\033[1;34m"` -RD=`echo "\033[01;31m"` -BGN=`echo "\033[4;92m"` -GN=`echo "\033[1;92m"` -DGN=`echo "\033[32m"` -CL=`echo "\033[m"` -BFR="\\r\\033[K" -HOLD="-" -CM="${GN}✓${CL}" -set -o errexit -set -o errtrace -set -o nounset -set -o pipefail -shopt -s expand_aliases -alias die='EXIT=$? LINE=$LINENO error_exit' -trap die ERR -trap cleanup EXIT -function error_exit() { - trap - ERR - local reason="Unknown failure occurred." - local msg="${1:-$reason}" - local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE" - echo -e "$flag $msg" 1>&2 - [ ! -z ${VMID-} ] && cleanup_vmid - exit $EXIT -} -function cleanup_vmid() { - if $(qm status $VMID &>/dev/null); then - if [ "$(qm status $VMID | awk '{print $2}')" == "running" ]; then - qm stop $VMID - fi - qm destroy $VMID - fi -} -function cleanup() { - popd >/dev/null - rm -rf $TEMP_DIR -} -TEMP_DIR=$(mktemp -d) -pushd $TEMP_DIR >/dev/null -if [ `pveversion | grep "pve-manager/7" | wc -l` -eq 1 ]; then - echo -e "\n🚨 ${RD} This script is for Proxmox Virtual Environment 6.xx${CL}\n" - echo "Exiting..." - sleep 3 - exit -fi -if (whiptail --title "HOME ASSISTANT OS VM" --yesno "This will create a New Home Assistant OS VM. Proceed?" 10 58); then - echo "User selected Yes" -else - clear - echo -e "⚠ User exited script \n" - exit -fi -function header_info { -echo -e "${HA} - __ _____ ____ _____ - / / / / | / __ \/ ___/ - / /_/ / /| |/ / / /\__ \ - / __ / ___ / /_/ /___/ / -/_/ /_/_/v4|_\____//____/ - Home Assistant OS -${CL}" -} -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 default_settings() { - echo -e "${DGN}Using HAOS Version: ${BGN}${STABLE}${CL}" - BRANCH=${STABLE} - echo -e "${DGN}Using Virtual Machine ID: ${BGN}$NEXTID${CL}" - VMID=$NEXTID - echo -e "${DGN}Using Hostname: ${BGN}haos${STABLE}${CL}" - HN=haos${STABLE} - echo -e "${DGN}Allocated Cores: ${BGN}2${CL}" - CORE_COUNT="2" - echo -e "${DGN}Allocated RAM: ${BGN}4096${CL}" - RAM_SIZE="4096" - echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}" - BRG="vmbr0" - echo -e "${DGN}Using MAC Address: ${BGN}$GEN_MAC${CL}" - MAC=$GEN_MAC - echo -e "${DGN}Using VLAN: ${BGN}Default${CL}" - VLAN="" - echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}" - START_VM="yes" - echo -e "${BL}Creating a HAOS VM using the above default settings${CL}" -} -function advanced_settings() { -BRANCH=$(whiptail --title "HAOS VERSION" --radiolist "Choose Version" 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}" -else - exit -fi -VMID=$(whiptail --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - echo -e "${DGN}Using Virtual Machine ID: ${BGN}$VMID${CL}" -else - exit -fi -VM_NAME=$(whiptail --inputbox "Set Hostname" 8 58 haos${BRANCH} --title "HOSTNAME" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - HN=$(echo ${VM_NAME,,} | tr -d ' ') - echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}" -else - exit -fi -CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}" -else - exit -fi -RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 4096 --title "RAM" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}" -else - exit -fi -BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}" -else - exit -fi -MAC1=$(whiptail --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; then - MAC="$MAC1" - echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}" -else - exit -fi -VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3) -exitstatus=$? -if [ $exitstatus = 0 ]; 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 -fi -if (whiptail --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 --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create HAOS ${BRANCH} VM?" 10 58); then - echo -e "${RD}Creating a HAOS VM using the above advanced settings${CL}" -else - clear - header_info - echo -e "${RD}Using Advanced Settings${CL}" - advanced_settings -fi -} -function start_script() { -if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then - clear - header_info - echo -e "${BL}Using Default Settings${CL}" - default_settings -else - clear - header_info - echo -e "${RD}Using Advanced Settings${CL}" - advanced_settings -fi -} -start_script -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" ) -done < <(pvesm status -content images | awk 'NR>1') -VALID=$(pvesm status -content images | awk 'NR>1') -if [ -z "$VALID" ]; then - echo -e "\n${RD}⚠ Unable to detect a valid storage location.${CL}" - echo -e "Exiting..." - exit -elif [ $((${#STORAGE_MENU[@]}/3)) -eq 1 ]; then - STORAGE=${STORAGE_MENU[0]} -else - while [ -z "${STORAGE:+x}" ]; do - STORAGE=$(whiptail --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the HAOS VM?\n\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}." -msg_info "Getting URL for Home Assistant ${BRANCH} Disk Image" -if [ "$BRANCH" == "$DEV" ]; then -URL=https://os-builds.home-assistant.io/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz -else -URL=https://github.com/home-assistant/operating-system/releases/download/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz -fi -sleep 2 -msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL -echo -en "\e[1A\e[0K" -FILE=$(basename $URL) -msg_ok "Downloaded ${CL}${BL}haos_ova-${BRANCH}.qcow2.xz${CL}" -msg_info "Extracting KVM Disk Image" -unxz $FILE -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" -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} -done -msg_ok "Extracted KVM Disk Image" -msg_info "Creating HAOS VM" -qm create $VMID -agent 1 -bios ovmf -cores $CORE_COUNT -memory $RAM_SIZE -name $HN -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN \ - -onboot 1 -ostype l26 -scsihw virtio-scsi-pci -pvesm alloc $STORAGE $VMID $DISK0 128 1>&/dev/null -qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null -qm set $VMID \ - -efidisk0 ${DISK0_REF},size=128K \ - -scsi0 ${DISK1_REF},size=32G >/dev/null -qm set $VMID \ - -boot order=scsi0 >/dev/null -qm set $VMID -description "# Home Assistant OS -### https://github.com/tteck/Proxmox" >/dev/null -msg_ok "Created HAOS VM ${CL}${BL}(${HN})" -if [ "$START_VM" == "yes" ]; then -msg_info "Starting Home Assistant OS VM" -qm start $VMID -msg_ok "Started Home Assistant OS VM" -fi -msg_ok "Completed Successfully!\n" diff --git a/vm/pimox-haos-vm-v4.sh b/vm/pimox-haos-vm-v5.sh similarity index 78% rename from vm/pimox-haos-vm-v4.sh rename to vm/pimox-haos-vm-v5.sh index 97dc8369..cebce5e2 100644 --- a/vm/pimox-haos-vm-v4.sh +++ b/vm/pimox-haos-vm-v5.sh @@ -1,6 +1,23 @@ #!/usr/bin/env bash +function header_info { +cat <<"EOF" + ____ _ __ ___ + / __ \(_) |/ /___ _ __ + / /_/ / / /|_/ / __ \| |/_/ + / ____/ / / / / /_/ /> < + __ __ /_/_ /_/_/ /_/\____/_/|_| __ ____ _____ + / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____v5/ /_ / __ \/ ___/ + / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ / / / /\__ \ + / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ / /_/ /___/ / +/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____//____/ + +EOF +} +clear +header_info echo -e "Loading..." GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') +USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }') NEXTID=$(pvesh get /cluster/nextid) STABLE=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') BETA=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') @@ -55,14 +72,23 @@ else echo -e "⚠ User exited script \n" exit fi -function header_info { -echo -e "${RD} - ____ _ __ ___ __ _____ ____ _____ - / __ \(_) / |/ /___ _ __ / / / / | / __ \/ ___/ - / /_/ / /v4_/ /|_/ / __ \| |/_/ / /_/ / /| |/ / / /\__ \ - / ____/ /___/ / / / /_/ /> < / __ / ___ / /_/ /___/ / -/_/ /_/ /_/ /_/\____/_/|_| /_/ /_/_/ |_\____//____/ -${CL}" +function PVE_CHECK() { +if [ `pveversion | grep "pve-manager/7.2\|7.3" | wc -l` -ne 1 ]; then + echo "⚠ This version of Proxmox Virtual Environment is not supported" + echo "Requires PVE Version: =>7.2" + echo "Exiting..." + sleep 2 + exit +fi +} +function ARCH_CHECK() { + ARCH=$(dpkg --print-architecture) + if [[ "$ARCH" == "amd64" ]]; then + echo -e "\n ❌ This script only works with PiMox! \n" + echo -e "Exiting..." + sleep 2 + exit + fi } function msg_info() { local msg="$1" @@ -94,6 +120,8 @@ function default_settings() { MAC=$GEN_MAC echo -e "${DGN}Using VLAN: ${BGN}Default${CL}" VLAN="" + echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}" + MTU="" echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}" START_VM="yes" echo -e "${BL}Creating a HAOS VM using the above default settings${CL}" @@ -109,8 +137,16 @@ if [ $exitstatus = 0 ]; then echo -e "${DGN}Using HAOS Version: ${BGN}$BRANCH${C 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: ${BGN}$VMID${CL}"; -else - if [ $exitstatus = 0 ]; then echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"; fi; + else + if echo "$USEDID" | egrep -q "$VMID" + then + echo -e "\n🚨 ${RD}ID $VMID is already in use${CL} \n" + echo -e "Exiting Script \n" + sleep 2; + exit + else + if [ $exitstatus = 0 ]; then echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"; fi; + fi fi VM_NAME=$(whiptail --inputbox "Set Hostname" 8 58 haos${BRANCH} --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3) exitstatus=$? @@ -152,6 +188,17 @@ else echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}" fi 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 [ -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 +fi if (whiptail --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" @@ -168,7 +215,7 @@ else advanced_settings fi } -function start_script() { +function START_SCRIPT() { if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58); then clear header_info @@ -181,7 +228,9 @@ else advanced_settings fi } -start_script +ARCH_CHECK +PVE_CHECK +START_SCRIPT while read -r line; do TAG=$(echo $line | awk '{print $1}') TYPE=$(echo $line | awk '{printf "%-10s", $2}') @@ -232,8 +281,8 @@ for i in {0,1}; do done msg_ok "Extracted Disk Image" msg_info "Creating HAOS VM" -qm create $VMID -bios ovmf -cores $CORE_COUNT -memory $RAM_SIZE -name $HN -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN \ - -onboot 1 -ostype l26 -scsihw virtio-scsi-pci +qm create $VMID -bios ovmf -cores $CORE_COUNT -memory $RAM_SIZE -name $HN \ + -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci pvesm alloc $STORAGE $VMID $DISK0 64M 1>&/dev/null qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null qm set $VMID \