#!/bin/csh 

# Install Site/SunNet/Domain Manager 2.3 jumbo patch.
#
# Usage: install_patch
#
# Note: You should change directory to the patch directory before running
#       this script.
#
# History:  Jun. 15, 1999, 1.0 - Initial release.

# Initial message.

echo " "
echo "This script will install the Site/SunNet/Domain Manager 2.3 Jumbo"
echo "Patch 104020-07"
echo " "

# 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 Site/SunNet/Domain"
  echo "  Manager is installed on your system e.g. /usr/snm "
  echo "  This script cannot update your installation without knowing "
  echo "  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/104020-07

# 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 2.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 snmver23 = `$SNMHOME/bin/snm_version $SNMHOME/bin/snm |grep 2.3 | awk '{print $2}'`

if ("$snmver23" != "2.3") then
  echo "This patch is not for this version of Site/SunNet/Domain Manager"
  echo "Terminating the installation of this patch."
  exit 1
endif

#determine the patch level

# Kill all SNM daemons.
echo " "
start:
echo "  Have you stopped all running Site/SunNet/Domain Manager applications,"
echo -n "  including the grapher, browser and discover tools <y or n>? "
set answer = $<
if ("$answer" != "y" && "$answer" != "Y") then
  echo " "
  echo "  Then please stop all Site/SunNet/Domain Manager applications now..."
  echo " "
  goto start
else
  echo " "
endif

echo "  Killing all Site/SunNet/Domain 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

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

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

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

set daemonpids  = `ps ax | grep cc_receiver | grep -v grep | awk '{print $1}'`
set daemonnames = `ps ax | grep cc_receiver | 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 Site/SunNet/Domain Manager files to be updated..."
if ("$snmver23" != "") then
mv $SNMHOME/5.x/agents/na.activity    $SNMHOME/5.x/agents/na.activity_2.3
mv $SNMHOME/5.x/agents/na.cpustat     $SNMHOME/5.x/agents/na.cpustat2_2.3
mv $SNMHOME/5.x/agents/na.diskinfo    $SNMHOME/5.x/agents/na.diskinfo2_2.3
mv $SNMHOME/5.x/agents/na.hostif      $SNMHOME/5.x/agents/na.hostif2_2.3
mv $SNMHOME/5.x/agents/na.iproutes    $SNMHOME/5.x/agents/na.iproutes2_2.3
mv $SNMHOME/5.x/agents/na.iostat2     $SNMHOME/5.x/agents/na.iostat22_2.3
mv $SNMHOME/5.x/agents/na.event       $SNMHOME/5.x/agents/na.event2_2.3
mv $SNMHOME/5.x/agents/na.hostmem2    $SNMHOME/5.x/agents/na.hostmem2_2.3
mv $SNMHOME/5.x/agents/na.ping        $SNMHOME/5.x/agents/na.ping2_2.3
mv $SNMHOME/5.x/agents/na.logger      $SNMHOME/5.x/agents/na.logger_2.3
mv $SNMHOME/5.x/agents/na.snmp        $SNMHOME/5.x/agents/na.snmp_2.3
mv $SNMHOME/5.x/agents/na.snmp-trap   $SNMHOME/5.x/agents/na.snmp-trap_2.3
mv $SNMHOME/5.x/agents/na.snmpv2      $SNMHOME/5.x/agents/na.snmpv2_2.3
mv $SNMHOME/5.x/agents/snmpd          $SNMHOME/5.x/agents/snmpd_2.3
mv $SNMHOME/5.x/agents/snmpd.conf     $SNMHOME/5.x/agents/snmpd.conf_2.3
mv $SNMHOME/5.x/lib/libnetmgt.so.3    $SNMHOME/5.x/lib/libnetmgt.so.3_2.3
mv $SNMHOME/5.x/lib/libnetmgt_db.so.2 $SNMHOME/5.x/lib/libnetmgt_db.so.2_2.3
mv $SNMHOME/agents/cc_sender          $SNMHOME/agents/cc_sender_2.3
mv $SNMHOME/agents/na.diskinfo        $SNMHOME/agents/na.diskinfo_2.3
mv $SNMHOME/agents/na.hostif          $SNMHOME/agents/na.hostif2_2.3
mv $SNMHOME/agents/na.iproutes        $SNMHOME/agents/na.iproutes2_2.3
mv $SNMHOME/agents/na.event           $SNMHOME/agents/na.event_2.3
mv $SNMHOME/agents/na.ping            $SNMHOME/agents/na.ping_2.3
mv $SNMHOME/agents/na.snmp            $SNMHOME/agents/na.snmp_2.3
mv $SNMHOME/agents/na.snmp-trap       $SNMHOME/agents/na.snmp-trap_2.3
mv $SNMHOME/agents/na.logger          $SNMHOME/agents/na.logger_2.3
mv $SNMHOME/agents/na.activity        $SNMHOME/agents/na.activity_2.3
mv $SNMHOME/agents/snmpd              $SNMHOME/agents/snmpd_2.3
mv $SNMHOME/agents/snmpd.conf         $SNMHOME/agents/snmpd.conf_2.3
mv $SNMHOME/agents/tt.dbase           $SNMHOME/agents/tt.dbase_2.3
mv $SNMHOME/bin/build_tt              $SNMHOME/bin/build_tt_2.3
mv $SNMHOME/bin/cc_config             $SNMHOME/bin/cc_config_2.3
mv $SNMHOME/bin/cc_receiver           $SNMHOME/bin/cc_receiver_2.3
mv $SNMHOME/bin/mib2schema            $SNMHOME/bin/mib2schema_2.3
mv $SNMHOME/bin/snm                   $SNMHOME/bin/snm_2.3
mv $SNMHOME/bin/snm_br                $SNMHOME/bin/snm_br_2.3
mv $SNMHOME/bin/snm_cmd               $SNMHOME/bin/snm_cmd_2.3
mv $SNMHOME/bin/snm_set               $SNMHOME/bin/snm_set_2.3
mv $SNMHOME/bin/snm_discover          $SNMHOME/bin/snm_discover_2.3
mv $SNMHOME/bin/v2mib2schema          $SNMHOME/bin/v2mib2schema_2.3
mv $SNMHOME/filter/infrastructure.ccf $SNMHOME/filter/infrastructure.ccf_2.3
mv $SNMHOME/filter/routers-only.ccf   $SNMHOME/filter/routers-only.ccf_2.3
mv $SNMHOME/lib/libnetmgt.a           $SNMHOME/lib/libnetmgt.a_2.3
mv $SNMHOME/lib/libnetmgt.sa.3.0      $SNMHOME/lib/libnetmgt.sa.3.0_2.3
mv $SNMHOME/lib/libnetmgt.so.3.0      $SNMHOME/lib/libnetmgt.so.3.0_2.3
mv $SNMHOME/lib/libnetmgt_db.sa.2.0   $SNMHOME/lib/libnetmgt_db.sa.2.0_2.3
mv $SNMHOME/lib/libnetmgt_db.so.2.0   $SNMHOME/lib/libnetmgt_db.so.2.0_2.3
mv $SNMHOME/man/man8/cc_sender.8      $SNMHOME/man/man8/cc_sender.8_2.3
mv $SNMHOME/man/man1/v2mib2schema.1   $SNMHOME/man/man1/v2mib2schema.1_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.

set verify = ( \
 65153 \
 25996 \
 53841 \
 54419 \
 02706 \
 47967 \
 22388 \
 20923 \
 55688 \
 01362 \
 36366 \
 41026 \
 19799 \
 45012 \
 11073 \
 46916 \
 56262 \
 53236 \
 14941 \
 03730 \
 14544 \
 35718 \
 13176 \
 48923 \
 09233 \
 57840 \
 23001 \
 24821 \
 07523 \
 64233 \
 55738 \
 21618 \
 17055 \
 16580 \
 58591 \
 54271 \
 16155 \
 46557 \
 28824 \
 04078 \
 49252 \
 06988 \
 57210 \
 34699 \
 48669 \
 62707 \
 03518 \
 09502 \
 11883 \
)


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



 
# The following checksums are computed from the installed files.

set sums = `/bin/sum  $SNMHOME/5.x/agents/na.activity | awk '{print $1}'`
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.cpustat | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.diskinfo | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.hostif | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.iproutes | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.iostat2 | 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.ping | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/na.logger | 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/agents/snmpd | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/agents/snmpd.conf | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/5.x/lib/libnetmgt.so.3 | 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/cc_sender | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/na.diskinfo | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/na.hostif | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/na.iproutes | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/na.event | 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/na.logger | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/na.activity | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/snmpd | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/snmpd.conf | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/agents/tt.dbase | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/build_tt | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/cc_config | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/cc_receiver | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/mib2schema | 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_set | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/snm_discover | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/bin/v2mib2schema | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/filter/infrastructure.ccf | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/filter/routers-only.ccf | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/lib/libnetmgt.a | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/lib/libnetmgt.sa.3.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/lib/libnetmgt.so.3.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/lib/libnetmgt_db.sa.2.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/lib/libnetmgt_db.so.2.0 | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/man/man8/cc_sender.8 | awk '{print $1}'`)
set sums = ($sums `/bin/sum  $SNMHOME/man/man1/v2mib2schema.1 | awk '{print $1}'`)

# The following names correspond the to above checksums.

set filenames = ( \
   5.x/agents/na.activity \
   5.x/agents/na.cpustat \
   5.x/agents/na.diskinfo \
   5.x/agents/na.hostif \
   5.x/agents/na.iproutes \
   5.x/agents/na.iostat2 \
   5.x/agents/na.event \
   5.x/agents/na.hostmem2 \
   5.x/agents/na.ping \
   5.x/agents/na.logger \
   5.x/agents/na.snmp \
   5.x/agents/na.snmp-trap \
   5.x/agents/na.snmpv2 \
   5.x/agents/snmpd \
   5.x/agents/snmpd.conf \
   5.x/lib/libnetmgt.so.3 \
   5.x/lib/libnetmgt_db.so.2 \
   agents/cc_sender \
   agents/na.diskinfo \
   agents/na.hostif \
   agents/na.iproutes \
   agents/na.event \
   agents/na.ping \
   agents/na.snmp \
   agents/na.snmp-trap \
   agents/na.logger \
   agents/na.activity \
   agents/snmpd \
   agents/snmpd.conf \
   agents/tt.dbase \
   bin/build_tt \
   bin/cc_config \
   bin/cc_receiver \
   bin/mib2schema \
   bin/snm \
   bin/snm_br \
   bin/snm_cmd \
   bin/snm_set \
   bin/snm_discover \
   bin/v2mib2schema \
   filter/infrastructure.ccf \
   filter/routers-only.ccf \
   lib/libnetmgt.a \
   lib/libnetmgt.sa.3.0 \
   lib/libnetmgt.so.3.0 \
   lib/libnetmgt_db.sa.2.0 \
   lib/libnetmgt_db.so.2.0 \
   man/man8/cc_sender.8 \
   man/man1/v2mib2schema.1 \
   )

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 "  Building tt.dbase..."
  set var_dir=`/bin/grep snmdb-directory /etc/snm.conf | /bin/awk '{print $2}'`
  cp $SNMHOME/agents/tt.dbase $var_dir
  chmod 644 $var_dir/tt.dbase
  echo "done"
  cd /tmp
  echo -n "  Running ranlib..."
  ranlib $SNMHOME/lib/libnetmgt.sa.3.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 104020-07 for Site/SunNet/Domain Manager 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 Site/SunNet/Domain Manager now."
echo " "
exit
