#!/bin/sh
#
# $Header: opsm/cvutl/cvuhelper.sbs /st_has_pt-cvuotn12201/1 2017/11/13 20:09:27 maboddu Exp $
#
# cvuhelper.sbs 
#
# Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
#
#    NAME
#      cvuhelper.sbs - Helper tool to CVU to retrieve compatible clusterware home 
#
#    DESCRIPTION
#      This tool is a helper tool that is used by CVU to retrieve information
#      about the clusterware home. This tool is required at all times by CVU
#      to call heavyweight API's. This tool is not expected to perform any remote 
#      operations.
#
#    NOTES
#      
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH

ECHO=echo
AWK=awk
SED=sed
CUT=cut

if [ $# -lt 5 ];
then
   $ECHO "<CVH_EMSG>"
   $ECHO " "
   $ECHO "ERROR: "
   $ECHO "Usage $0 <GI_HOME> <CVUHELPER_VERSION> <JAR_FILE_PATH> <CV_HOME> <COMMAND> [<args>]"
   $ECHO "Earlier version CVU will call cvuhelper with following arguments"
   $ECHO "Usage $0 -client <GI_HOME> <GI_VERSION> <CV_HOME> <CV_HOME_VERSION> [<args>]"
   $ECHO "</CVH_EMSG><CVH_ERES>2</CVH_ERES><CVH_VRES>2</CVH_VRES>"
   exit 1
fi
  
if [ "$1" != "-client" ]; 
then 
   ORACLE_HOME=$1
   GI_VERSION=$2
   CVUHELPER_CLASS=helper$2.CVUHelper$2
   CVUHELPERJAR_PATH=$3
   CV_HOME=$4
   HELPER_ARG=$5
   shift 4
else
  #an older version cvu is calling newer version cvuhelper which is present 
  #in crshome
   ORACLE_HOME=$2
   GI_VERSION=$3
   CV_HOME=$4
   CV_HOME_VERSION=$5
   HELPER_ARG=$6
   shift 5

   #below values need to be either constructed using above values/hardcoded. An 
   #older version of CVU will not be able to supply any additional arguments that
   #might be needed by newer version cvuhelper and so they will have to be defaulted.
   CVUHELPER_CLASS=helper12201.CVUHelper12201
   CVUHELPERJAR_PATH=$ORACLE_HOME/jlib/cvuhelper122.jar
fi

export ORACLE_HOME

REM_ENV="-DCV_HOME=$CV_HOME -DGI_HOME=$ORACLE_HOME"

if [ ! -f $CVUHELPERJAR_PATH ];
then
   $ECHO "<CVH_EMSG>$CVUHELPERJAR not found in standard place </CVH_EMSG><CVH_ERES>2</CVH_ERES><CVH_VRES>2</CVH_VRES>"
   exit 1
fi

# pass the options explicitly to avoid
# _JAVA_OPTIONS message from java on cvuhelper output
JAVA_OPTS=
if [ -n "$_JAVA_OPTIONS" ];
then
   JAVA_OPTS=$_JAVA_OPTIONS
   unset _JAVA_OPTIONS
fi

setJRE14Options()
{
  PLATFORM=`/bin/uname`
  case $PLATFORM in
  SunOS)
       # Bug 4620768. Unset LD_LIBRARY_PATH_64 
       unset LD_LIBRARY_PATH_64 
       arch=`/bin/uname -i`
       if [ "$arch" != "i86pc" ]
       then
         JRE_OPTS=-d64
       fi
       ;;
      *) JRE_OPTS=
  esac
}

setDefaultJREOptions()
{
  PLATFORM=`/bin/uname`
  case $PLATFORM in
  HP-UX) arch=`/bin/uname -m`
       JRE_OPTS=-d64
       #Bug 10111014: Add  -XX:+UseC2 to JRE_OPTS on HP-IA
       if [ "$arch" = "ia64" ]
       then
         VERSION=`$JRE -fullversion 2>&1 | $CUT -d'"' -f2 | $AWK -F\- '{print $1}'`;
         DYN=" -XX:+UseC2"
         VER1=`echo $VERSION|$CUT -d'.' -f1` 
         VER2=`echo $VERSION|$CUT -d'.' -f2` 
         VER3=`echo $VERSION|$CUT -d'.' -f3` 
         VER4=`echo $VERSION|$CUT -d'.' -f4` 
         if [ $VER1 -eq 1 -a $VER2 -eq 5 -a $VER3 -eq 0 -a $VER4 -gt 5 -a $VER4 -le 20 ]
         then
           JRE_OPTS="$JRE_OPTS $DYN"
         fi 
       fi
       ;;
  AIX) 
       JRE_OPTS=-d64
     ;;
  Linux) 
       arch=`/bin/uname -m`
       if [ "$arch" = "ppc64" -o "$arch" = "x86_64" -o "$arch" = "s390x" ]
       then
         JRE_OPTS=-d64
       fi
      ;;
  SunOS)
       arch=`/bin/uname -p`
       JRE_OPTS=-d64
       ;;
  esac
}

setJREOptions()
{
  if [ $RJDKVER -le 14 ]
  then
    setJRE14Options
  else
    setDefaultJREOptions
  fi
}

getOPatchJars()
{
  #in ADE view, the opatch is located in $ORACLE_HOME/opatch/OPatch
  OPATCH_LOC=$ORACLE_HOME/opatch/OPatch
  if [ ! -d $OPATCH_LOC ]
  then
    #in an actual shiphome, the opatch is located in $ORACLE_HOME/OPatch
    OPATCH_LOC=$ORACLE_HOME/OPatch
  fi
  OPATCH_JARS=
  #first include all opatch jars
  for i in `ls -1 $OPATCH_LOC/jlib/*.jar`
  do
    OPATCH_JARS=$OPATCH_JARS:$i
  done
  # Include oplan jars
  # In 12.2 oplan jars exist at $OPATCH_LOC/opatchauto-dir/opatchautocore/jlib
  # In 12.1 oplan jars exist at $OPATCH_LOC/oplan/jlib
  if [ -d $OPATCH_LOC/opatchauto-dir/opatchautocore/jlib ]
  then 
    for i in `ls -1 $OPATCH_LOC/opatchauto-dir/opatchautocore/jlib/*.jar`
    do
      OPATCH_JARS=$OPATCH_JARS:$i
    done
  elif [ -d $OPATCH_LOC/oplan/jlib ]
  then 
    for i in `ls -1 $OPATCH_LOC/oplan/jlib/*.jar`
    do
      OPATCH_JARS=$OPATCH_JARS:$i
    done
  fi   
}

SRVMJAR=$ORACLE_HOME/jlib/srvm.jar
LDAPJAR=$ORACLE_HOME/jlib//ldapjclnt12.jar
NETCFGJAR=$ORACLE_HOME/jlib//netcfg.jar
SRVMHASJAR=$ORACLE_HOME/jlib/srvmhas.jar
SRVMASMJAR=$ORACLE_HOME/jlib/srvmasm.jar
GNSJAR=$ORACLE_HOME/jlib/gns.jar
OUIJARS=$ORACLE_HOME/oui/jlib/OraInstaller.jar:$ORACLE_HOME/oui/jlib/OraPrereq.jar:$ORACLE_HOME/oui/jlib/prov_fixup.jar:$ORACLE_HOME/oui/jlib/xmlparserv2.jar:$ORACLE_HOME/oui/jlib/share.jar:$ORACLE_HOME/oui/jlib/orai18n-mapping.jar
OUI_LIBRARY_PATH=

#retrieve all OPatch jars
getOPatchJars

if [ -d $ORACLE_HOME/jdk/jre ];
then
   JREDIR=$ORACLE_HOME/jdk/jre
else
   $ECHO "<CVH_EMSG>Directory $ORACLE_HOME/jdk/jre is not a valid JRE location</CVH_EMSG><CVH_ERES>2</CVH_ERES>"
   exit 1
fi

#Convert helper arg to lower
HELPER_ARG=`echo "$HELPER_ARG" | $AWK '{print tolower($0)}'`

#Check if helper arg is to retrieve opatch info.
if [ "$HELPER_ARG" = "-getopatchstatus" ] || [ "$HELPER_ARG" = "-getoraclepatchlist" ];
then
   # Use jre from OPatch location to run the cvuhelper
   if [ -f $OPATCH_LOC/jre/bin/java ];
   then 
      JREDIR=$OPATCH_LOC/jre
   fi
fi

JRE=$JREDIR/bin/java
JREJAR=$JREDIR/lib/rt.jar

RJDKVER=`${JRE} -Xmx32m -version 2>&1 | ${AWK} '{ if (NR==1) { print $3 }}' | ${SED} -e 's/\"//g' | ${AWK} -F. '{print $1$2}'`;

if [ $RJDKVER -eq 14 ]
then
  JDBCVER=$RJDKVER;
else
  JDBCVER=`echo ${RJDKVER} | ${AWK} '{print substr($0,2,1)}'`
fi

OJDBCJAR=$ORACLE_HOME/jdbc/lib/ojdbc${JDBCVER}.jar

CLASSPATH=$JREJAR:$CVUHELPERJAR_PATH:$LDAPJAR:$NETCFGJAR:$SRVMJAR:$SRVMHASJAR:$GNSJAR:$SRVMASMJAR:$OUIJARS:$OJDBCJAR:$OPATCH_JARS

if [ -n "$SRVM_TRACE" ]
then
   if [ "$SRVM_TRACE" = "false" ]  || [ "$SRVM_TRACE" = "FALSE" ]
   then
     TRACE="-DTRACING.ENABLED=false"
   else
       TRACE="-DTRACING.ENABLED=true -DTRACING.LEVEL=2"
   fi
fi

if [ -n "$CV_TRACELOC" ];
then
  TRACELOC="-DCV_TRACELOC=$CV_TRACELOC"
fi

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH



# Set the shared library path for JNI shared libraries
# A few platforms use an environment variable other than LD_LIBRARY_PATH
PLATFORM=`/bin/uname`
case $PLATFORM in
  HP-UX) arch=`/bin/uname -m`
       # bugfix 5404049
       if [ -z "$JAVA_HOME" ];
       then
         JAVA_HOME=$JREDIR/..
         export JAVA_HOME
       fi
       if [ -d $ORACLE_HOME/oui/lib/hpia64 ]
       then
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/hpia64
       else
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/hpunix
       fi
       SHLIB_PATH=$LD_LIBRARY_PATH
       export SHLIB_PATH
       ;;
  AIX)
       OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/aix
       LIBPATH=$LD_LIBRARY_PATH
       export LIBPATH
     ;;
  Linux) 
       if [ -d $ORACLE_HOME/oui/lib/linuxS390 ]
       then
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/linuxS390
       elif [ -d $ORACLE_HOME/oui/lib/linuxppc64 ]
       then
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/linuxppc64
       elif [ -d $ORACLE_HOME/oui/lib/linux64 ]
       then
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/linux64
       else
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/linux
       fi
       ;;
  SunOS) 
       if [ -d $ORACLE_HOME/oui/lib/intelsolaris ]
       then
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/intelsolaris
       else
         OUI_LIBRARY_PATH=$ORACLE_HOME/oui/lib/solaris
       fi
  
       # Bug 4620768. Unset LD_LIBRARY_PATH_64
       unset LD_LIBRARY_PATH_64
       ;;
esac

###################################################################################################
# For release 10.2.0.X, library search paths need to contain path(s) for 32-bit libraries as well #
###################################################################################################

if [ `expr "${GI_VERSION}" : "102"` = 3 ]
then
  PLATFORM=`uname`
  case $PLATFORM in
    HP-UX) arch=`uname -m`
       if [ "$arch" = "ia64" ]
       then
           LD_LIBRARY_PATH=$CV_HOME/lib32:$ORACLE_HOME/srvm/lib32:$LD_LIBRARY_PATH
           export LD_LIBRARY_PATH
       fi
       SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/srvm/lib32:$SHLIB_PATH
       export SHLIB_PATH
       ;;
    AIX) LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/srvm/lib32:$LIBPATH
       export LIBPATH
       ;;
    Linux) arch=`uname -m`
       # Linux ( x86_64 ) => LD_LIBRARY_PATH lib32
       if [ "$arch" = "x86_64" ] || [ "$arch" = "s390x" ]
       then
         LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/srvm/lib32:$LD_LIBRARY_PATH
         export LD_LIBRARY_PATH
       fi
       ;;
    SunOS) arch=`/usr/bin/isainfo -k`
       # Solaris  ( x86_64 ) => LD_LIBRARY_PATH lib32
       if [ "$arch" = "amd64" ]
       then
         LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/srvm/lib32:$LD_LIBRARY_PATH
         export LD_LIBRARY_PATH
       fi
       ;;
  esac

fi

if [ `expr "${GI_VERSION}" : "111"` = 3 ]
then
  PLATFORM=`uname`
  case $PLATFORM in
    # workaround for AIX bug 9216848 causing JVM crash when using JRE from 11.1 RAC home
    AIX) JAVA_COMPILER=NONE
       export JAVA_COMPILER
       ;;
  esac
fi

setJREOptions

# Run cvuhelper driver
$JRE $JRE_OPTS -classpath $CLASSPATH $REM_ENV $TRACE $TRACELOC $JAVA_OPTS oracle.ops.verification.helper.$CVUHELPER_CLASS "$@"
exit $?
