#!/bin/sh
#***************************************************************************
#  Tuning Manager
#  Copyright (C) 2007, Hitachi, Ltd.
#***************************************************************************
#***************************************************************************
#  : uninstall.sh
#  : PP uninstall command
#  : SOLARIS
#***************************************************************************
PATH=/usr/bin:$PATH
export PATH
LANG=C
export LANG
LC_ALL=C
export LC_ALL

AWK_CMD=/usr/bin/awk
CAT_CMD=/usr/bin/cat
CHMOD_CMD=/usr/bin/chmod
CHOWN_CMD=/usr/bin/chown
DATE_CMD=/usr/bin/date
ECHO_CMD=/usr/bin/echo
EGREP_CMD=/usr/bin/egrep
EXPR_CMD=/usr/bin/expr
GREP_CMD=/usr/bin/grep
ID_CMD=/usr/xpg4/bin/id
MKDIR_CMD=/usr/bin/mkdir
RMDIR_CMD=/usr/bin/rmdir
PRINTF_CMD=/usr/bin/printf
PWD_CMD=/usr/bin/pwd
TR_CMD=/usr/bin/tr
LS_CMD=/usr/bin/ls
WC_CMD=/usr/bin/wc

PKGRM_CMD=/usr/sbin/pkgrm
PKGINFO_CMD=/usr/bin/pkginfo

$PWD_CMD 2> /dev/null 1> /dev/null
RET=$?
if [ $RET -ne 0 ] ; then
    $ECHO_CMD "$PWD_CMD failed( exit code : $RET )." 1>&2
    $ECHO_CMD "The current directory is not correct." 1>&2
    $ECHO_CMD "The uninstallation failed." 1>&2
    exit 1
fi

JP1PC_HOME=/opt/jp1pc
GETPINFO=$JP1PC_HOME/bin/getpinfo
JPCCTRL=$JP1PC_HOME/tools/jpcctrl
MPFA_HITACHI_SETUP="/etc/hitachi_setup"
PGMCODE_AGTP="1518"
PP_CNT=0
PPNO_KIND=2
LIC_PACKAGE=HTMAgent
INIT_MSG_VERSION_STR=""
THIS_VER=""
PRG_NAME="HiCommand Tuning Manager - Agent"
PRG_NAME_TMP=
if [ -f $JP1PC_HOME/instagte.ini ] ; then
    PRG_NAME_TMP=`$CAT_CMD $JP1PC_HOME/instagte.ini | $GREP_CMD ProgramName | $AWK_CMD -F= '{print $2}'`
    if [ -n "$PRG_NAME_TMP" ] ; then
        PRG_NAME=$PRG_NAME_TMP
    fi
fi
EXEC_USER_ID=""
AGT_DIR_LIST=""
AGT_DIR=""
PPLISTD_VVRR=""
UNINST_ABORT=0

#####################
#### SUB ROUTINE ####
#####################
ABORT()
{
    if [ -d /var/tmp/htm_install.lck ] ; then
        $RMDIR_CMD /var/tmp/htm_install.lck
        RET=$?
        if [ $RET -ne 0 ] ; then
            $ECHO_CMD "$RMDIR_CMD failed( exit code : $RET ) : /var/tmp/htm_install.lck" 1>&2
        fi
    fi
    $ECHO_CMD "The uninstallation failed." 1>&2
    exit 1
}

TRAP()
{
    $ECHO_CMD "signal received." 1>&2
    ABORT
}

checkZero()
{
    if [ `$ECHO_CMD "$1" | $EGREP_CMD -c "^.+$"` -eq 0 ] ; then
        return 1
    fi
    return 0
}

PRE_PROC_UN()
{
    if [ -x $GETPINFO ] ; then
        for TMPLHOST in `$GETPINFO H all | $TR_CMD "," "\n"`
        do
            if [ -x $JPCCTRL ] ; then
                $JPCCTRL confirm "?*" lhost=$TMPLHOST -nolog
                RET=$?
                case $RET in
                    0)
                        $ECHO_CMD ">     The service processes are not stopped." 1>&2
                        return 1
                        ;;
                    3)
                        $ECHO_CMD ">     The service processes are not launched." 1>&2
                        ;;
                    *)
                        $ECHO_CMD ">     An error occurred.($RET)" 1>&2
                        ;;
                esac
            else
                $ECHO_CMD ">     $JPCCTRL: No such file exists or permission was denied." 1>&2
            fi
        done
    else
        $ECHO_CMD ">     $GETPINFO: No such file exists or permission was denied." 1>&2
    fi
    return 0
}

##############
#### MAIN ####
##############
trap ' TRAP ' 1 2 15

EXEC_USER_ID=`$ID_CMD -u`
if [ "$EXEC_USER_ID" != "0" ] ; then
    $ECHO_CMD "You do not have permission to execute uninstall.sh." 1>&2
    ABORT
fi

if [ -f $JP1PC_HOME/agte/pplistd ] ; then
    THIS_VER=`$CAT_CMD $JP1PC_HOME/agte/pplistd | $AWK_CMD '{ print substr( $0, 25, 6 ) }'`
    if [ -z "$THIS_VER" ] ; then
        if [ -f $JP1PC_HOME/instagte.ini ] ; then
            THIS_VER=`$CAT_CMD $JP1PC_HOME/instagte.ini | $GREP_CMD EXCurrentVersion | $AWK_CMD -F= '{print $2}'`
        fi
    fi
elif [ -f $JP1PC_HOME/instagte.ini ] ; then
    THIS_VER=`$CAT_CMD $JP1PC_HOME/instagte.ini | $GREP_CMD EXCurrentVersion | $AWK_CMD -F= '{print $2}'`
fi

if [ -n "$THIS_VER" ] ; then
    if [ $PPNO_KIND -ne 1 ] ; then
        VV=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,1,2) }' | $AWK_CMD '{printf"%d",$1}'`
        R1=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,3,1) }'`
        R2=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,4,1) }'`
        ZZ=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,5,2) }'`
        INIT_MSG_VERSION_STR="- $VV.$R1.$R2($VV.$R1.$R2-$ZZ)"
    else
        VV=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,1,2) }'`
        RR=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,3,2) }'`
        ZZ=`$ECHO_CMD $THIS_VER | $AWK_CMD '{ print substr($1,5,2) }'`
        INIT_MSG_VERSION_STR="- $VV-$RR-$ZZ"
    fi
fi

$ECHO_CMD "Uninstalling $PRG_NAME $INIT_MSG_VERSION_STR" 1>&2
$DATE_CMD

$PRINTF_CMD "\nDo you wish to start the uninstallation? \n"
while [ 1 ];
do
    USER_RESPONSE=""
    $PRINTF_CMD "To continue, enter Y. (Default Y) Y/N > "
    read USER_RESPONSE
    checkZero "$USER_RESPONSE"
    ISZERO=$?
    if [ $ISZERO -eq 1 ] ; then
        break
    fi
    case "${USER_RESPONSE}" in
        [Yy])
            break
            ;;
        [Nn])
            exit 0
            ;;
    esac
done

$PKGINFO_CMD $LIC_PACKAGE  2> /dev/null 1> /dev/null
RET=$?
if [ $RET -ne 0 ] ; then
    $ECHO_CMD "$PRG_NAME is already uninstalled( exit code : $RET )." 1>&2
    ABORT
fi

if [ $PPNO_KIND -ne 1 ] ; then
    if [ ! -d $JP1PC_HOME/mgr ] ; then
        AGT_DIR_LIST=`$LS_CMD -d $JP1PC_HOME/agt* | $GREP_CMD -v $JP1PC_HOME/agtp | $GREP_CMD -v $JP1PC_HOME/agte | $GREP_CMD -v $JP1PC_HOME/agtu`
        for AGT_DIR in $AGT_DIR_LIST
        do
            if [ ! -f $AGT_DIR/pplistd ] ; then
                UNINST_ABORT=1
            else
                PPLISTD_VVRR=`$CAT_CMD $AGT_DIR/pplistd | $AWK_CMD '{ print substr( $0, 25, 4 ) }'`
                RET=`$EXPR_CMD "$PPLISTD_VVRR" \< "0570"`
                if [ $RET -eq 1 ] ; then
                    UNINST_ABORT=1
                else
                    UNINST_ABORT=0
                    break
                fi
            fi
        done
        if [ $UNINST_ABORT -eq 1 ] ; then
            $ECHO_CMD "This product cannot be uninstalled because one or more Agents whose versions are 5.5 or earlier have been installed on this host. Before uninstalling this product, upgrade the Agents to version 5.7 or later, or uninstall them." 1>&2
            ABORT
        fi
    fi
fi

if [ ! -d /var ] ; then
    $MKDIR_CMD /var
    RET=$?
    if [ $RET -ne 0 ] ; then
        $ECHO_CMD "$MKDIR_CMD failed( exit code : $RET ) : /var" 1>&2
        ABORT
    fi
    $ECHO_CMD ">     $MKDIR_CMD /var: Completed." 1>&2
    $CHOWN_CMD root:sys /var
    $CHMOD_CMD 755 /var
fi
if [ ! -d /var/tmp ] ; then
    $MKDIR_CMD /var/tmp
    RET=$?
    if [ $RET -ne 0 ] ; then
        $ECHO_CMD "$MKDIR_CMD failed( exit code : $RET ) : /var/tmp" 1>&2
        ABORT
    fi
    $ECHO_CMD ">     $MKDIR_CMD /var/tmp: Completed." 1>&2
    $CHOWN_CMD root:sys /var/tmp
    $CHMOD_CMD 1777 /var/tmp
fi
if [ ! -d /var/tmp/htm_install.lck ] ; then
    $MKDIR_CMD /var/tmp/htm_install.lck
    RET=$?
    if [ $RET -ne 0 ] ; then
        $ECHO_CMD "$MKDIR_CMD failed( exit code : $RET ) : /var/tmp/htm_install.lck" 1>&2
        ABORT
    fi
fi

##################################################################
#### Processing from preprocessing script.(checkremove etc)
PRE_PROC_UN
RET=$?
if [ $RET -ne 0 ] ; then
    ABORT
fi
##################################################################

if [ -f /opt/jp1pc/agte/dontask ] ; then
    $PKGRM_CMD -n -a "/opt/jp1pc/agte/dontask" $LIC_PACKAGE
    CMD_RET=$?
else
    $PKGRM_CMD $LIC_PACKAGE
    CMD_RET=$?
fi
if [ $CMD_RET -ne 0 ] ; then
    $ECHO_CMD "$PKGRM_CMD failed( exit code : $CMD_RET )." 1>&2
fi

if [ $PPNO_KIND -ne 1 ] ; then
    if [ -d $JP1PC_HOME/mgr ] ; then
        PP_CNT=1
    else
        if [ -d $JP1PC_HOME/view ] ; then
            PP_CNT=1
        else
            PP_CNT=`$LS_CMD -d $JP1PC_HOME/agt* 2>/dev/null | $GREP_CMD -v $JP1PC_HOME/agtp | $WC_CMD -l`
        fi
    fi
    if [ $PP_CNT -eq 0 ] ; then
        if [ -x $MPFA_HITACHI_SETUP ] ; then
            $ECHO_CMD "Uninstalling The Common Files." 1>&2
            (cd /etc; $MPFA_HITACHI_SETUP -f -u -c $PGMCODE_AGTP 2> /dev/null 1> /dev/null)
            RET=$?
            case $RET in
                0)
                    ;;
                2)
                    $ECHO_CMD "The Common Files are already uninstalled( exit code : $RET )." 1>&2
                    ;;
                *)
                    $ECHO_CMD "$MPFA_HITACHI_SETUP failed( exit code : $RET )." 1>&2
                    $ECHO_CMD "The Common Files uninstall failed." 1>&2
                    ;;
            esac
        else
            $ECHO_CMD "$MPFA_HITACHI_SETUP: No such file exists or permission was denied." 1>&2
        fi
    fi
fi

if [ -d /var/tmp/htm_install.lck ] ; then
    $RMDIR_CMD /var/tmp/htm_install.lck
    RET=$?
    if [ $RET -ne 0 ] ; then
        $ECHO_CMD "$RMDIR_CMD failed( exit code : $RET ) : /var/tmp/htm_install.lck" 1>&2
    fi
fi
$DATE_CMD
$ECHO_CMD "Done uninstalling $PRG_NAME." 1>&2
exit 0

