#!/bin/sh # esxcli system maintenanceMode set --enable true # esxcli system maintenanceMode get # wget --no-check-certificate https://git.gethome.at/max/esx_Update_Script/raw/branch/main/update.sh # esxcli network firewall ruleset list -r httpClient # esxcli network firewall ruleset set -e true -r httpClient # grep 'mem=' /usr/lib/vmware/esxcli-software # esxcli system settings advanced set -o /VisorFS/VisorFSPristineTardisk -i 0 # cp /usr/lib/vmware/esxcli-software /usr/lib/vmware/esxcli-software.bak # sed -i 's/mem=500/mem=300/g' /usr/lib/vmware/esxcli-software.bak # mv /usr/lib/vmware/esxcli-software.bak /usr/lib/vmware/esxcli-software -f # esxcli system settings advanced set -o /VisorFS/VisorFSPristineTardisk -i 1 # esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p ESXi-8.0U3c-24414501-standard echo "ESX Update Script" echo "*****************" echo echo "checking ESXCLI memory limit ..." mem="$(grep 'mem=' /usr/lib/vmware/esxcli-software | cut -d'=' -f3)" updatemem=false if [ ${mem} -lt 500 ] then echo "ESXCLI memory ${mem}MB is too small" read -p "Update ESXCLI memory from ${mem}MB to 500MB? (y/N): " confirm case "$confirm" in [yY] | [yY][eE][Ss]) updatemem=true;; *) ;; esac if [ "$updatemem" = true ] then echo "Update ESXCLI memory to 500MB ..." esxcli system settings advanced set -o /VisorFS/VisorFSPristineTardisk -i 0 cp /usr/lib/vmware/esxcli-software /usr/lib/vmware/esxcli-software.bak sed -i 's/mem=300/mem=500/g' /usr/lib/vmware/esxcli-software.bak mv /usr/lib/vmware/esxcli-software.bak /usr/lib/vmware/esxcli-software -f esxcli system settings advanced set -o /VisorFS/VisorFSPristineTardisk -i 1 else echo "ESXCLI memory is ${mem}MB" echo "Script can't run with this config" exit 1 fi else echo "ESXCLI memory ${mem}MB is big enough" fi echo echo "checking Current version ..." echo current="$(esxcli software profile get | sed '1!d' \ | cut -d' ' -f2)" echo "Current Version: ${current}" echo echo "checking Latest version of ESXi ..." echo "this may take some time" echo latest="$(esxcli software sources profile list \ --depot=https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml \ | sort -k4 \ | tail -2 | head -1 \ | sed \ -e 's/VMware.*$//' )" echo "Latest Version: ${latest}" echo if [ ${current}=${latest} ] then echo "System is Up to date" echo exit 1 else read -p "Update host from ${current} to ${latest}? (y/N): " confirm case "$confirm" in [yY] | [yY][eE][Ss]) update=true;; *) exit 1;; esac fi if [ "$update" = true ] then #esxcli system maintenanceMode get mmode="$(esxcli system maintenanceMode get)" echo "Maintenance Mode: ${mmode}" if [ ${mmode}=='Disabled' ] then changemode = false echo "Maintenance Mode needs to be enabled" read -p "enable Maintenance Mode? (y/N): " confirm case "$confirm" in [yY] | [yY][eE][Ss]) changemode=true;; *) ;; esac if [ "$changemode" = true ] then esxcli system maintenanceMode set --enable true else echo "Maintenance Mode needs to be enabled" echo "Script can't run with this config" exit 1 fi else echo "Updating to ${latest}..." esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p ${latest} fi fi