
#!/bin/sh
#
# ESX 3.0.1
#
#  Purpose: Script to apply ESX 3.x patches 
#  Author : MichaelJKnight@gmail.com                                         
#  Version: 1.0 
#  Release: 09/03/2007                                                         
#  No warranty is provided with this script, test and use at your own risk      
#  This script is freeware, please contact me with any bugs.
#

# Ensure ESX Patches have been MD5SUM checked and precopied into /var/updates.....

if [`vmware -v | grep -i "Server 3." | wc -l` -eq 0 ]

then
     echo 
     echo This script requires an ESX 3.x platform, this server is on
     echo
     vmware -v
     echo
     echo Exiting.
     echo
     exit
fi     

esxpatches=`ls /var/updates/ESX*.tgz 2>/dev/null | wc -l`

echo
echo Found $esxpatches ESX patches in /var/updates/
echo

 if [ $esxpatches -ne "0" ]  

    then
    
	pcount=0
        
        cd /var/updates/

        # Start creation of patch bundle script....

        echo "#!/bin/bash" > /tmp/patchbundle.sh
        echo "# Start of patch bundle of $esxpatches ESX Patches " >> /tmp/patchbundle.sh
         
	for i in `ls -l ESX*.tgz 2>/dev/null | awk '{ print $9} '`
	 do

	  # Now expand each patch found into its corresponding folder

	    let "pcount = $pcount + 1"
	    
	    echo
	    echo Found patch $pcount / $esxpatches $i
	    echo Now Expanding....$i
	    echo

	    tar -xvzf "$i"

	 done

         chmod +x /tmp/patchbundle.sh
         
         rm -rf /var/updates/ESX*.tgz
         
        # Cycle through patches and determine release date and then set datestamp on patch directory to ensure patch sequence is in release date order.

        cd /var/updates/
     
	for i in `ls -ltr  2>/dev/null | awk '{ print $9} '`

         do
             tstamp=`cat /var/updates/$i/descriptor.xml | grep "<releasedate>" | cut -f2 -d">" | cut -f1 -d"<"`
             echo
             echo Patch $i release date is $tstamp  
             echo
             touch /var/updates/$i -d"$tstamp"
         done
 
        # Update patch bundle script with patches now in release date equence....

        pcount=1

        echo
        
	for i in `ls -ltr  2>/dev/null | awk '{ print $9} '`
         do
            echo Sequencing $i into patch bundle script

	    echo cd /var/updates/`echo $i |cut -f1 -d. `>> /tmp/patchbundle.sh
	    
	    echo echo ' `date +%e/%m/%y" "%H:%M:%S` ' "Patch `echo $i |cut -f1 -d. ` ` echo $pcount of $esxpatches ` Installation Started   " >> /tmp/patchbundle.sh

	    echo "esxupdate -v 20 -n update" >> /tmp/patchbundle.sh

	    echo echo ' `date +%e/%m/%y" "%H:%M:%S` ' "Patch `echo $i |cut -f1 -d. ` Installation Completed   " >> /tmp/patchbundle.sh

            let "pcount = $pcount + 1"


         done

         echo "# End of patch bundle" >> /tmp/patchbundle.sh
  
         echo
         echo Applying patches, please wait....
	 echo
         
         /tmp/patchbundle.sh 
         
# Tidy up post installs

         rm -rf /tmp/patchbundle.sh
         rm -rf /var/updates/ESX*             

	 echo
         echo All $esxpatches patches applied. Schedule reboot asap..
	 echo

else

	echo No ESX Patches to be applied...
	
fi




