#!/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 "Patch Number | " >> $HOSTNAME.patch.html
echo "irev | " >> $HOSTNAME.patch.html
echo "crev | " >> $HOSTNAME.patch.html
echo "flag | " >> $HOSTNAME.patch.html
echo "Description |
" >> $HOSTNAME.patch.html
echo "Installed Patches |
" >> $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 "$i | " >> $HOSTNAME.patch.html
echo "$LASTInstalled | " >> $HOSTNAME.patch.html
echo "$CURRENTRelease | " >> $HOSTNAME.patch.html
echo " " >> $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 " | " >> $HOSTNAME.patch.html
echo "$DESC | " >> $HOSTNAME.patch.html
echo "
" >> $HOSTNAME.patch.html
LASTInstalled=
CURRENTRelease=
ISOBS=
ISREQ=
DESC=
done
echo "Current Patches:$CURRENTCOUNT Down Rev Patches:$DOWNCOUNT Obsolete Patches:$OBSCOUNT | Security Patches $SECCOUNT Recommended Patches $REQCOUNT |
" >> $HOSTNAME.patch.html
echo "
" >> $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 "Patch Number | " >> $HOSTNAME.patch.html
echo "irev | " >> $HOSTNAME.patch.html
echo "crev | " >> $HOSTNAME.patch.html
echo "flag | " >> $HOSTNAME.patch.html
echo "Description |
" >> $HOSTNAME.patch.html
echo "Patches Not Installed |
" >> $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 "$i | " >> $HOSTNAME.patch.html
echo "NA | " >> $HOSTNAME.patch.html
echo "$CURRENTRelease | " >> $HOSTNAME.patch.html
echo " " >> $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 " | " >> $HOSTNAME.patch.html
echo "$DESC | " >> $HOSTNAME.patch.html
echo "
" >> $HOSTNAME.patch.html
LASTInstalled=
CURRENTRelease=
ISOBS=
ISREQ=
DESC=
fi
fi
done
echo "Uninstalled Patches:$UNINSTALLEDCOUNT Security Patches: $SECCOUNT Recommended Patches:$REQCOUNT |
" >> $HOSTNAME.patch.html
echo "
" >> $HOSTNAME.patch.html
rm -f current.major.$$ current.patches.$$ available.patches.$$