#!/bin/sh

# Post-installation script for the passthru driver in "SUNWlmon"
AWK=/usr/bin/awk
CAT=/usr/bin/cat
CHMOD=/usr/bin/chmod
COMPRESS=/usr/bin/compress
GREP=/usr/bin/grep
MKDIR=/usr/bin/mkdir
MV=/usr/bin/mv
PKGINFO=/usr/bin/pkginfo
RM=/usr/bin/rm
SED=/usr/bin/sed
TAR=/usr/bin/tar
UNCOMPRESS=/usr/bin/uncompress


# Set needed variables
PATCHNO=105850-01
PKGDB=/var/sadm/pkg
PKGNAME=SUNWlmon


# Get the package base dir
BASEDIR=`${CAT} $PKGDB/$PKGNAME/pkginfo | ${GREP} BASEDIR | ${AWK} -F"=" '{print $2}'`

# Get the CLIENTROOT dir
CLIENTROOTDIR=`${CAT} $PKGDB/$PKGNAME/pkginfo | ${GREP} CLIENTROOT | ${AWK} -F"=" '{print $2}'`

# Get the package save db 
PATCH_UNDO_ARCHIVE=`${CAT} $PKGDB/$PKGNAME/pkginfo | ${GREP} PATCH_UNDO_ARCHIVE | ${AWK} -F"=" '{print $2}'`
if [ "$PATCH_UNDO_ARCHIVE" = "none" ]; then
    PKGSAVEDB=$PKGDB/$PKGNAME/save/$PATCHNO
else
    PKGSAVEDB=$PATCH_UNDO_ARCHIVE/$PATCHNO/$PKGNAME
fi


# Get the undo flag 
PATCH_NO_UNDO=`${CAT} $PKGDB/$PKGNAME/pkginfo | ${GREP} PATCH_NO_UNDO | ${AWK} -F"=" '{print $2}'`

#
# These things are for patch backout do them if the PATCH_NO_UNDO = false
#
if [ "$PATCH_NO_UNDO" = "false" ]; then

    #
    # Store the old preremove script
    #
    echo "Storing old preremove script ..."
    TMP_PKGINSTALL=/tmp/$PATCHNO/$PKGNAME
    ${MKDIR} -p $PKGSAVEDB/install
    ${MV} -f $TMP_PKGINSTALL/preremove $PKGSAVEDB/install
    ${RM} -fr $TMP_PKGINSTALL

    #
    # Store the old JDK for backout
    #
    echo "Storing JDK ..."
    JDK_ARCHIVE=JDK-1.0.2.tar
    JDK_DIR=JDK
    JDK_TMP=/tmp/JDK$$
    ${MKDIR} $JDK_TMP
    (cd $BASEDIR/SUNWlmon; ${TAR} -cf $JDK_TMP/$JDK_ARCHIVE $JDK_DIR)
    ${COMPRESS} $JDK_TMP/$JDK_ARCHIVE
    ${MV} $JDK_TMP/$JDK_ARCHIVE.Z $PKGSAVEDB
    ${RM} -fr $JDK_TMP

    #
    # Store the obsolete CLIENTROOT files
    #
    echo "Storing obsolete CLIENTROOT files ..."
    CLIENTROOT_DELETE_FILES=`${CAT} $PKGDB/$PKGNAME/install/deletes_CLIENTROOT`
    CLIENTROOT_ARCHIVE=CLIENTROOT.tar
    CLIENTROOT_TMP=/tmp/CLIENTROOT$$
    ${MKDIR} $CLIENTROOT_TMP
    (cd $CLIENTROOTDIR; ${TAR} -cf $CLIENTROOT_TMP/$CLIENTROOT_ARCHIVE $CLIENTROOT_DELETE_FILES)
    ${COMPRESS} $CLIENTROOT_TMP/$CLIENTROOT_ARCHIVE
    ${MV} $CLIENTROOT_TMP/$CLIENTROOT_ARCHIVE.Z $PKGSAVEDB
    ${RM} -rf $CLIENTROOT_TMP

fi

#
# Remove JDK
#
JDK_DIR=JDK
${RM} -fr $BASEDIR/SUNWlmon/$JDK_DIR

#
# Extract JRE from archive
#
# [Note: JRE archive is moved to /tmp before extracting to 
#        reduce the disk space requirment.]
#
echo "Extracting JRE from archive ..."
JRE_ARCHIVE=$BASEDIR/SUNWlmon/JRE-1.1.5.tar 
JRE_TMP=/tmp/JRE$$
${MV} $JRE_ARCHIVE $JRE_TMP
(cd $BASEDIR/SUNWlmon; ${TAR} -xf ${JRE_TMP})
${RM} -f $JRE_TMP

#
# Remove old product variable files directory: /var/opt/SUNWlmon
#
echo "Removing old '/var/opt/SUNWlmon' ..."
${RM} -rf /var/opt/SUNWlmon

#
# Create /var/opt/SUNWlmon/db , /var/opt/SUNWlmon/log ,
#        /var/opt/SUNWlmon/simdb and /var/opt/SUNWlmon/simlog
#
echo "Creating database and log dir ..."
${MKDIR} -p /var/opt/SUNWlmon/db
${MKDIR} -p /var/opt/SUNWlmon/log
${MKDIR} -p /var/opt/SUNWlmon/simdb
${MKDIR} -p /var/opt/SUNWlmon/simlog
	
#
# Modify server START script
#
# [Note: The more appropiate way to handle the substitution is 
#        through a class action script.]
#
echo "Modifying server start scripts ..."
START_SH=$BASEDIR/SUNWlmon/START-LibMON
TMPFILE=/tmp/$$SUNWlmon
${SED} -e 's|__BASEDIR__|'$BASEDIR'|g' $START_SH > $TMPFILE
${RM} $START_SH
${MV} $TMPFILE $START_SH
${CHMOD} 755 $START_SH

echo "Modifying server stop scripts ..."
STOP_SH=$BASEDIR/SUNWlmon/STOP-LibMON
TMPFILE=/tmp/$$SUNWlmon
${SED} -e 's|__BASEDIR__|'$BASEDIR'|g' $STOP_SH > $TMPFILE
${RM} $STOP_SH
${MV} $TMPFILE $STOP_SH
${CHMOD} 755 $STOP_SH

echo "Modifying scan devices script ..."
SCAN_DEV_SH=$BASEDIR/SUNWlmon/SCAN-DEVICES
TMPFILE=/tmp/$$SUNWlmon
${SED} -e 's|__BASEDIR__|'$BASEDIR'|g' $SCAN_DEV_SH > $TMPFILE
${RM} $SCAN_DEV_SH
${MV} $TMPFILE $SCAN_DEV_SH
${CHMOD} 755 $SCAN_DEV_SH

#
# Delete the obsolete CLIENTROOT files
#
echo "Removing obsolete CLIENTROOT files ..."
CLIENTROOT_DELETE_FILES=`${CAT} $PKGDB/$PKGNAME/install/deletes_CLIENTROOT`
for DELETE_FILE in $CLIENTROOT_DELETE_FILES
do
    ${RM} -f $CLIENTROOTDIR/$DELETE_FILE 
done

#
# There is a bug in install patch that does not remove the files deletes 
# if the PATCH_NO_UNDO is set to true
#
if [ "$PATCH_NO_UNDO" = "true" ]; then
    
    SCRIPTS_DIR=`${CAT} $PKGDB/$PKGNAME/pkginfo | ${GREP} SCRIPTS_DIR | ${AWK} -F"=" '{print $2}'`
    echo "Removing obsolete BASEDIR files ..."
    DELETE_FILES=`${CAT} $SCRIPTS_DIR/deletes`
    for DELETE_FILE in $DELETE_FILES
    do
        ${RM} -f $BASEDIR/$DELETE_FILE 
    done
fi

