#!/bin/csh 

# Install SNM 2.2.3 jumbo patch.
#
# Usage: install_patch
#
# Note: You should change directory to the patch directory before running
#       this script.
#
# History:  Sep. 16, 1996, 1.0 - Initial release.

# Initial message.

echo " "
echo "This script will install the SunNet Manager 2.2.3 jumbo patch 103924-03"

# Check to see if we are root.  Exit if we're not with a message.

if (`whoami` != "root") then
  echo " "
  echo "  You must to be user root to run this script.  Please become root"
  echo "  and retry this script."
  echo " "
  exit 1
endif

# Check to see if the SNMHOME environment variable is set.  This script
# will not work unless SNMHOME is set.

if (! $?SNMHOME) then
  echo " "
  echo "  The SNMHOME environment variable is not defined."
  echo " "
  echo "  This environment variable indicates where SunNet Manager is"
  echo "  installed on your system e.g. /usr/snm  This script cannot"
  echo "  update your installation without knowing this information."
  echo " "
  echo "  Please define SNMHOME and then re-run this script."
  echo " "
  exit 1
endif

if (! -e $SNMHOME) then
  echo " "
  echo "  The directory that the SNMHOME environment variable refers to"
  echo "  ($SNMHOME) was not found"
  echo " "
  echo "  Please correct SNMHOME and then re-run this script."
  echo " "
  exit 1
endif

# Local variables.

# The following variable needs to be set to the directory into which you have
# copied the jumbo patch raw files (usually from a patch tape), or possibly
# you have ftp'd these files from The Internet somewhere.

set patchdir = /tmp/103924-03

# If you have not explicity set the previous variable, or if it is set to a
# non-existent directory, this script will try to operate with the current
# working directory as the patch directory.

echo " "
echo "Checking that patch is accessable..."
if (! -e $patchdir) then
  echo " "
  echo "  The patch was not found at $patchdir"
  echo " "
  echo "  Assuming that the patch is located in the present directory"
  echo " "
  set patchdir = . 
endif


echo -n "Have you reserved 6.5 MB space under the $SNMHOME directory <y or n>? "
set answer = $<
if ("$answer" != "y" && "$answer" != "Y") then
  echo " "
  echo "  Aborting patch installation to avoid filling file system."
  echo " "
  echo "  Free up sufficient space on the file system and then re-run"
  echo "  this script"
  echo " "
  exit 1 
endif

# determine  OS
echo " "
echo -n "Checking that machine is running SunOS..."
set os_level = `uname -r 2>/dev/null`
switch ($os_level)
    case '':
        echo " done"
        breaksw
    case 4.*:
        echo " done"
        breaksw
    case 5.*:
        echo This patch is not for SVR4
        exit 1
    case *:
        echo This patch is not for SVR4
        exit
    default:
        echo "no such OS\n
        exit 1
endsw
 
# determine the SNM version

set snmver223 = `$SNMHOME/bin/snm_version $SNMHOME/bin/snm |grep 2.2.3 | awk '{print $2}'`

if ("$snmver223" != "2.2.3") then
  echo "this patch is not for your SNM product"
  exit 1
endif

#determine the patch level

#set patchlvl0 = `$SNMHOME/bin/snm_version $SNMHOME/bin/snm |grep 2.2.3 | awk '{print $9}'`
 
#if ($patchlvl0 > 0 ) then
#  echo "this patch is not for your SNM product"
#  exit 1
#endif

# Kill all SNM daemons.
echo " "
start:
echo "  Have you killed the SunNet Manager application, the grapher, browser,"
echo -n "  discover tool, and any other SunNet Manager applications <y or n>? "
set answer = $<
if ("$answer" != "y" && "$answer" != "Y") then
  echo " "
  echo "  Then please kill those applications now..."
  echo " "
  goto start
else
  echo " "
endif

echo "  Killing all SunNet Manager daemons..."

# Kill all na.* daemons.

set daemonpids  = `ps ax | grep na"\." | awk '{print $1}'`
set daemonnames = `ps ax | grep na"\." | awk '{print $5}'`
set index = 1

foreach daemon ($daemonpids)
  (kill -9 $daemon > /dev/null)
  echo "    $daemonnames[$index]"
  @ index++
end

# Kill any remaining processes with "snm" in their names.

set daemonpids  = `ps ax | grep snm | grep -v snmd | grep -v xnews | grep -v grep | awk '{print $1}'`
set daemonnames = `ps ax | grep snm | grep -v snmd |  grep -v xnews | grep -v grep | awk '{print $5}'`
set index = 1
foreach daemon ($daemonpids)
  (kill -9 $daemon > /dev/null)
  echo "    $daemonnames[$index]"
  @ index++
end

echo "  Done."
echo " "

# Remove activity and request log files.

echo -n "  Do you want to remove the activity and request log files <y or n>? "
set answer = $<
if ("$answer" != "n" && "$answer" != "N") then
   rm -rf /var/adm/snm/activity.log
   rm -rf /var/adm/snm/request.log
   echo "  Done."
else
   echo "  Activity and request log files will not be removed"
endif

echo " "
echo -n "  Backing up old SunNet Manager files..."
if ("$snmver223" != "") then
mv $SNMHOME/5.x/agents/na.diskinfo   $SNMHOME/5.x/agents/na.diskinfo_2.2.3
mv $SNMHOME/5.x/agents/na.event      $SNMHOME/5.x/agents/na.event_2.2.3
mv $SNMHOME/5.x/agents/na.hostmem2   $SNMHOME/5.x/agents/na.hostmem2_2.2.3
mv $SNMHOME/5.x/agents/na.hostperf   $SNMHOME/5.x/agents/na.hostperf_2.2.3 
mv $SNMHOME/5.x/agents/na.ping       $SNMHOME/5.x/agents/na.ping_2.2.3
mv $SNMHOME/5.x/agents/na.snmp       $SNMHOME/5.x/agents/na.snmp_2.2.3
mv $SNMHOME/5.x/agents/na.snmp-trap  $SNMHOME/5.x/agents/na.snmp-trap_2.2.3
mv $SNMHOME/5.x/agents/na.snmpv2     $SNMHOME/5.x/agents/na.snmpv2_2.2.3
mv $SNMHOME/5.x/lib/libnetmgt.so.2   $SNMHOME/5.x/lib/libnetmgt.so.2_2.2.3
mv $SNMHOME/5.x/lib/libnetmgt_db.so.2   $SNMHOME/5.x/lib/libnetmgt_db.so.2_2.2.3
mv $SNMHOME/agents/na.diskinfo       $SNMHOME/agents/na.diskinfo_2.2.3
mv $SNMHOME/agents/na.event          $SNMHOME/agents/na.event_2.2.3
mv $SNMHOME/agents/na.hostmem        $SNMHOME/agents/na.hostmem_2.2.3
mv $SNMHOME/agents/na.hostperf       $SNMHOME/agents/na.hostperf_2.2.3
mv $SNMHOME/agents/na.ping           $SNMHOME/agents/na.ping_2.2.3
mv $SNMHOME/agents/na.snmp           $SNMHOME/agents/na.snmp_2.2.3
mv $SNMHOME/agents/na.snmp-trap      $SNMHOME/agents/na.snmp-trap_2.2.3
mv $SNMHOME/agents/snmpd             $SNMHOME/agents/snmpd_2.2.3
mv $SNMHOME/bin/snm                  $SNMHOME/bin/snm_2.2.3
mv $SNMHOME/bin/snm_br               $SNMHOME/bin/snm_br_2.2.3
mv $SNMHOME/bin/snm_cmd              $SNMHOME/bin/snm_cmd_2.2.3
mv $SNMHOME/bin/snm_discover         $SNMHOME/bin/snm_discover_2.2.3
mv $SNMHOME/include/netmgt/netmgt_extern.h $SNMHOME/include/netmgt/netmgt_extern.h_2.2.3
mv $SNMHOME/lib/libnetmgt.sa.2.0     $SNMHOME/lib/libnetmgt.sa.2.0_2.2.3
mv $SNMHOME/lib/libnetmgt.so.2.0     $SNMHOME/lib/libnetmgt.so.2.0_2.2.3
mv $SNMHOME/man/man5/discover.conf.5 $SNMHOME/man/man5/discover.conf.5_2.2.3
mv $SNMHOME/x86/agents/na.diskinfo   $SNMHOME/x86/agents/na.diskinfo_2.2.3
mv $SNMHOME/x86/agents/na.event      $SNMHOME/x86/agents/na.event_2.2.3
mv $SNMHOME/x86/agents/na.hostmem2   $SNMHOME/x86/agents/na.hostmem2_2.2.3
mv $SNMHOME/x86/agents/na.hostperf   $SNMHOME/x86/agents/na.hostperf_2.2.3
mv $SNMHOME/x86/agents/na.ping       $SNMHOME/x86/agents/na.ping_2.2.3
mv $SNMHOME/x86/agents/na.snmp       $SNMHOME/x86/agents/na.snmp_2.2.3
mv $SNMHOME/x86/agents/na.snmp-trap  $SNMHOME/x86/agents/na.snmp-trap_2.2.3
mv $SNMHOME/x86/agents/na.snmpv2     $SNMHOME/x86/agents/na.snmpv2_2.2.3
mv $SNMHOME/x86/lib/libnetmgt.so.2   $SNMHOME/x86/lib/libnetmgt.so.2_2.2.3
mv $SNMHOME/x86/lib/libnetmgt_db.so.2   $SNMHOME/x86/lib/libnetmgt_db.so.2_2.2.3
endif
echo " done"

echo -n "  Installing patch files to $SNMHOME..."
cd $patchdir
cp -r `arch`/snm/ $SNMHOME
if ($status != 0) then
  echo "***************************************************************************"
  echo "***************************************************************************"
  echo "The patch file directory ($patchdir) does not contains the patch"
  echo "files.  Please re-run this script after changing into the patch directory."
  echo "***************************************************************************"
  echo "***************************************************************************"
  exit 1
endif

echo " done"
echo -n "  Verifying checksums of all installed patch files..."

# In the following three arrays, the order is important.  The checksums and
# filenames are listed in order of the output from the "ls" command.

# The following checksums came hard-coded with the patch tape.

set verify = ( \
    33166 \
    50773 \
    62843 \
    24921 \
    35922 \
    00691 \
    56287 \
    37640 \
    36047 \
    46862 \
    57997 \
    22470 \
    53474 \
    57645 \
    21592 \
    02476 \
    23016 \
    13508 \
    30815 \
    50183 \
    21329 \
    36660 \
    26721 \
    02455 \
    06654 \
    48410 \
    03055 \
    37529 \
    00593 \
    64461 \
    51442 \
    18253 \
    55170 \
    20693 \
    18286 \
    30512 \
    )
 
# The following checksums are computed from the installed files.

set sums = `/bin/sum $SNMHOME/5.x/agents/na.diskinfo | awk '{print $1}'`
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.event | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.hostmem2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.hostperf | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.ping | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.snmp | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.snmp-trap | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/agents/na.snmpv2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/lib/libnetmgt.so.2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/5.x/lib/libnetmgt_db.so.2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.diskinfo | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.event | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.hostmem | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.hostperf | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.ping | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.snmp | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/na.snmp-trap | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/agents/snmpd | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/bin/snm | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/bin/snm_br | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/bin/snm_cmd | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/bin/snm_discover | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/include/netmgt/netmgt_extern.h | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/lib/libnetmgt.sa.2.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/lib/libnetmgt.so.2.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/man/man5/discover.conf.5 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.diskinfo | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.event | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.hostmem2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.hostperf | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.ping | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.snmp | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.snmp-trap | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/agents/na.snmpv2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/lib/libnetmgt.so.2 | awk '{print $1}'`)
set sums = ($sums `/bin/sum $SNMHOME/x86/lib/libnetmgt_db.so.2 | awk '{print $1}'`)

# The following names correspond the to above checksums.

set filenames = ( \
    5.x/agents/na.diskinfo \
    5.x/agents/na.event \
    5.x/agents/na.hostmem2 \
    5.x/agents/na.hostperf \
    5.x/agents/na.ping \
    5.x/agents/na.snmp \
    5.x/agents/na.snmp-trap \
    5.x/agents/na.snmpv2 \
    5.x/lib/libnetmgt.so.2 \
    5.x/lib/libnetmgt_db.so.2 \
    agents/na.diskinfo \
    agents/na.event \
    agents/na.hostmem \
    agents/na.hostperf \
    agents/na.ping \
    agents/na.snmp \
    agents/na.snmp-trap \
    agents/snmpd \
    bin/snm \
    bin/snm_br \
    bin/snm_cmd \
    bin/snm_discover \
    include/netmgt/netmgt_extern.h \
    lib/libnetmgt.sa.2.0 \
    lib/libnetmgt.so.2.0 \
    man/man5/discover.conf.5 \
    x86/agents/na.diskinfo \
    x86/agents/na.event \
    x86/agents/na.hostmem2 \
    x86/agents/na.hostperf \
    x86/agents/na.ping \
    x86/agents/na.snmp \
    x86/agents/na.snmp-trap \
    x86/agents/na.snmpv2 \
    x86/lib/libnetmgt.so.2 \
    x86/lib/libnetmgt_db.so.2 \
    )

set index = 1
set err = 0
foreach check ($verify)
  if ($check != $sums[$index]) then
    echo " "
    echo "  $SNMHOME/$filenames[$index] is corrupt."
    echo "  Checksum was $sums[$index], and should have been $check"
    echo " "
    set err = 1
  endif
  @ index++
end

# Print error message and abort if any of the patch files was corrupted.

if ($err != 0) then
  echo "**********************************************************************"
  echo "One or more of the installed patch files were corrupted. See the above"
  echo "messages for details. Please check your patch files for integrity."
  echo " "
  echo "You may need to get a fresh copy of the patch."
  echo "**********************************************************************"
  exit 1

else
  echo " done"
endif

# All patch files were OK.  Installation can continue.

  echo -n "  Changing permissions on snm_discover..."
  chown root $SNMHOME/bin/snm_discover
  chmod 4755 $SNMHOME/bin/snm_discover
  echo " done"

  echo -n "  copying snm.conf ..."
  set var_dir=`/bin/grep snmdb-directory /etc/snm.conf | /bin/awk '{print $2}'`
  cp $SNMHOME/discover.conf $var_dir

  cd /tmp
  echo -n "  Running ranlib..."
  ranlib $SNMHOME/lib/libnetmgt.sa.2.0
  echo " done"

  echo -n "  Running ldconfig..."
  ldconfig
  echo " done"

set snmpddir = /etc/init.snmpd
if ( -e $snmpddir) then
echo -n "  "
         /etc/init.snmpd start
endif 
endif

echo " "
echo " "
echo "Patch 103924-03 for SunNet Manager 2.2.3 has been installed."
echo " "
echo "Please note:"
echo " "
echo "If you have previously run the getagents script to install the"
echo "SunNet Manager agents on to other systems, you must now re-run"
echo "getagents to update those systems with the new agent libraries"
echo "and binaries delivered by this patch."
echo " "
echo "Please restart your SunNet Manager now."
echo " "
exit
