#!/bin/ksh #set -x HOSTNAME="`hostname`" OS="`uname -r | nawk -F'.' '{print $2}'`" PLATFORM="`uname -p`" if [ ${PLATFORM} == "i386" ]; then RELEASE="${OS}_x86" else RELEASE=$OS fi #Get a list of current installed patches showrev -p | nawk '{print $2}' | sort -n > current.patches.$$ #Cycle through the current patches and get list of major numbers cat current.patches.$$ | nawk -F'-' '{print $1}' | sort -u > current.major.$$ CURRENTCOUNT=0 OBSCOUNT=0 DOWNCOUNT=0 SECCOUNT=0 REQCOUNT=0 #Print out a header,etc for an html file echo "">> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "

Patch Report for $HOSTNAME

" >> $HOSTNAME.patch.html echo "

Generated on `date` by `echo $LOGNAME`

" >> $HOSTNAME.patch.html echo "
" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html #Take the list of current majors and cycle through them, get the most recent installed and #compare to patchdiag.xref for i in `cat current.major.$$` do LASTInstalled="`grep $i current.patches.$$ | tail -1 | nawk -F'-' '{print $2}'`" #Get current version from patchdiag.xref CURRENTRelease="`grep \"^$i|\" patchdiag.xref|tail -1 | nawk -F'|' '{print $2}'`" ISOBS="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $6}'`" ISSEC="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $5}'`" ISREQ="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $4}'`" DESC="`grep \"$i|\" patchdiag.xref | nawk -F'|' '{print $11}'`" if [ -z ${CURRENTRelease} ]; then CURRENTRelease=0 fi if [ -z ${DESC} ]; then DESC="Patch not found in patchdiag.xref" fi DOWNREV="NO" #is the installed less than the current if [ ${LASTInstalled} -lt ${CURRENTRelease} ]; then DOWNREV="YES" fi if [ ! -z ${ISOBS} ]; then OBSCOUNT="`expr $OBSCOUNT + 1`" echo "" >> $HOSTNAME.patch.html else if [ ${DOWNREV} = "YES" ]; then DOWNCOUNT="`expr $DOWNCOUNT + 1`" echo "" >> $HOSTNAME.patch.html else CURRENTCOUNT="`expr $CURRENTCOUNT + 1`" echo "" >> $HOSTNAME.patch.html fi fi echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html LASTInstalled= CURRENTRelease= ISOBS= ISREQ= DESC= done echo "" >> $HOSTNAME.patch.html echo "
Patch NumberirevcrevflagDescription
Installed Patches
$i$LASTInstalled$CURRENTRelease " >> $HOSTNAME.patch.html if [ ! -z ${ISOBS} ]; then echo "O " >> $HOSTNAME.patch.html fi if [ ! -z ${ISSEC} ]; then SECCOUNT="`expr $SECCOUNT + 1`" echo "S " >> $HOSTNAME.patch.html fi if [ ! -z ${ISREQ} ]; then REQCOUNT="`expr $REQCOUNT + 1`" echo "R" >> $HOSTNAME.patch.html fi echo "$DESC
Current Patches:$CURRENTCOUNT Down Rev Patches:$DOWNCOUNT Obsolete Patches:$OBSCOUNT | Security Patches $SECCOUNT Recommended Patches $REQCOUNT
" >> $HOSTNAME.patch.html UNINSTALLEDCOUNT=0 SECCOUNT=0 REQCOUNT=0 #Now for patches that are not installed but are in the patchdiag for that release #Get the list of patches that are available for the specific release and not Obsolete cat patchdiag.xref | grep "|$RELEASE|" | grep -v "|O|" | nawk -F'|' '{print $1}' | sort -u > available.patches.$$ echo "

" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html #Cycle through available patches and see if they are in the current major ones. if they are not, add them for i in `cat available.patches.$$` do grep $i current.major.$$ > /dev/null if [ $? -eq 1 ]; then UNINSTALLEDCOUNT="`expr $UNINSTALLEDCOUNT + 1`" #Patch is not installed, add it DESC="`grep \"$i|\" patchdiag.xref | tail -1 | nawk -F'|' '{print $11}'`" CURRENTRelease="`grep \"^$i|\" patchdiag.xref | tail -1 |nawk -F'|' '{print $2}'`" ISOBS="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $6}'`" ISSEC="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $5}'`" ISREQ="`grep \"^$i|\" patchdiag.xref | nawk -F'|' '{print $4}'`" echo "Patch:$i CR:$CURRENTRelease" if [ -z ${ISOBS} ]; then echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html echo "" >> $HOSTNAME.patch.html LASTInstalled= CURRENTRelease= ISOBS= ISREQ= DESC= fi fi done echo "" >> $HOSTNAME.patch.html echo "
Patch NumberirevcrevflagDescription
Patches Not Installed
$iNA$CURRENTRelease " >> $HOSTNAME.patch.html if [ ! -z ${ISOBS} ]; then echo "O " >> $HOSTNAME.patch.html fi if [ ! -z ${ISSEC} ]; then SECCOUNT="`expr $SECCOUNT + 1`" echo "S " >> $HOSTNAME.patch.html fi if [ ! -z ${ISREQ} ]; then REQCOUNT="`expr $REQCOUNT + 1`" echo "R" >> $HOSTNAME.patch.html fi echo "$DESC
Uninstalled Patches:$UNINSTALLEDCOUNT Security Patches: $SECCOUNT Recommended Patches:$REQCOUNT
" >> $HOSTNAME.patch.html rm -f current.major.$$ current.patches.$$ available.patches.$$