#!/bin/sh

# localconfig.sbs for local CSS
#
# This script file should be run for following three cases:
#  1) add:    When you are configuring the CSS for the first time
#  2) delete: When there is only one single instance Oracle home on a node and
#             you are deleting/deinstalling that Oracle home
#  3) reset:  When there are more than two single instance Oracle homes on a 
#             node and you are deleting/deconfiguring the Oracle home that 
#             currently runs CSS daemon but you want CSS to run from a 
#             different Oracle home
# NOTE: When using 'reset' option. This script can be run from 
#       source Oracle home or destination (Where CSS is to be reset to) Oracle
#       home.

SILENT=%SILENT%
CSS_ORACLE_HOME=%ORACLE_HOME%
CSS_ORACLE_OWNER=%ORACLE_OWNER%
CSS_DBA_GROUP=%ORA_DBA_GROUP%
CSS_LANGUAGE_ID=%LANGUAGE_ID%

CSS_PARAMS="CSS_ORACLE_HOME CSS_ORACLE_OWNER CSS_DBA_GROUP CSS_LANGUAGE_ID"

if [ -z "$CP" ]; then CP=/bin/cp; fi
if [ -z "$ECHO" ]; then ECHO=/bin/echo; fi
if [ -z "$CHOWN" ]; then CHOWN=/bin/chown; fi
if [ -z "$CHGRP" ]; then CHGRP=/bin/chgrp; fi
if [ -z "$CHMOD" ]; then CHMOD=/bin/chmod; fi
if [ -z "$MKDIR" ]; then MKDIR=/bin/mkdir; fi
if [ -z "$MKDIRP" ]; then MKDIRP="/bin/mkdir -p"; fi
if [ -z "$RMF" ]; then RMF="/bin/rm -f"; fi
if [ -z "$RMRF" ]; then RMRF="/bin/rm -rf"; fi
if [ -z "$RM" ]; then RM=/bin/rm; fi
if [ -z "$CAT" ]; then CAT=/bin/cat; fi
if [ -z "$GREP" ]; then GREP=/bin/grep; fi
if [ -z "$AWK" ]; then AWK=/bin/awk; fi
if [ -z "$LN" ]; then LN=/bin/ln; fi
if [ -z "$LNS" ]; then LNS="/bin/ln -s"; fi
if [ -z "$SLEEP" ]; then SLEEP="/bin/sleep"; fi
if [ -z "$PSE" ]; then PSE="/bin/ps -e"; fi
if [ -z "$CSSDKILL" ]; then CSSDKILL=/bin/kill; fi
if [ -z "$ID" ]; then ID=/usr/bin/id; fi
if [ -z "$TOUCH" ]; then TOUCH=/bin/touch; fi
if [ -z "$HOSTN" ]; then HOSTN=/bin/hostname; fi
if [ -z "$EXPRN" ]; then EXPRN=/usr/bin/expr; fi
if [ -z "$LS1" ]; then LS1="/bin/ls -1"; fi
if [ -z "$WCL" ]; then WCL="/usr/bin/wc -l"; fi


if [ -z "$TR" ]; then TR=/bin/tr; fi
#solaris on amd has issue with /bin/tr
[ 'SunOS' = `/bin/uname` ] && [ 'i86pc' = `/bin/uname -i` ] && TR=/usr/xpg4/bin/tr 
#on linux tr is at /usr/bin/tr
[ 'Linux' = `/bin/uname` ] && TR=/usr/bin/tr


###Function for displaying usage of this script
usage()
{
   printf "Usage:"
   printf "$0 [add] [delete] [ reset <destination Oracle home> ]"
   printf "   [-silent]"
   printf "   [-paramfile <Complete path of file specifying parameter values>]"
}

##Function for parsing the command line arguments
parseArgs()
{
   USER_ARGS=$*

   ###Defaults
   CFG_OPTION="reset"
   DEST_ORACLE_HOME=""

   if [ $# -eq 0 ];
   then
      usage;
      exit 2;
   fi

   while [ $# -gt 0 ];
   do
     if [ $1 = "-silent" ]; then
       SILENT=1;
       shift;
     elif [ $1 = "add" ]; then
       CFG_OPTION="add";
       shift;
     elif [ $1 = "delete" ]; then
       CFG_OPTION="delete";
       shift;
     elif [ $1 = "reset" ]; then
       CFG_OPTION="reset"
       if [ $# -ge 2 ]; then
         if [ $2 != "-paramfile" ]; then
           CSS_ORACLE_HOME=$2;
           shift;
         fi
       fi
       shift;
     elif [ $1 = "-paramfile" ]; then
       USE_FILE=true
       if [ $# -ge 2 ]; then
         CSS_ENV_FILE=$2
         shift;
       else
         usage;
         exit 2
       fi
       shift;
     else
       usage;
       exit 2
     fi
   done
}

##Function for reading CRS parameters from the given param file
readparamfile()
{
  $ECHO "Reading $CSS_ENV_FILE.."
  ## Make sure that this input file has only "LHS=RHS" and empty lines
  ## Any other lines will be considered improper input for root script
  awkOutput=`$AWK 'BEGIN { Ni=0 } \
                     /^#/   { next } \
                     /[A-Z]\=\`*\`/ { printf("\"%s\"\n", $0); next } \
                     /[A-Z_]\=/ { next } \
                     /^$/   { next } \
                            { printf("\"%s\"\n", $0); next }' $CSS_ENV_FILE`

  if [ "x$awkOutput" != "x" ]; then
     $ECHO "The following unexpected input found in CSS parameter file: $awkOutput"
     exit 1
  fi

  . $CSS_ENV_FILE

  $ECHO "File ($CSS_ENV_FILE) is used for setting variables."
  $ECHO "CSS_ORACLE_HOME=$CSS_ORACLE_HOME"
  $ECHO "CSS_ORACLE_OWNER=$CSS_ORACLE_OWNER"
  $ECHO "CSS_DBA_GROUP=$CSS_DBA_GROUP"
  $ECHO "CSS_LANGUAGE_ID=$CSS_LANGUAGE_ID"
}

validateInput()
{
   ##validates if any value is assigned to the script variables
   for i in `$ECHO $CSS_PARAMS`;
   do
      PARAM_NAME=$i
      PARAM_VALUE=`eval $ECHO \\$$i`
      valid=`$ECHO $PARAM_VALUE | $AWK '/^%/ { print "false"; }'`
      if [ "$valid" = "false" ];
      then
         $ECHO "No value set for the parameter $PARAM_NAME. Use parameter file to set values";
         usage;
         return 1;
      fi
    done

   return 0;
}

validateRAC()
{
  RAC=false;
  if [ -f "$OCRCONFIG" ]; then
    # ocr.loc file exists and ocr location set here is
    OCRCONFIG_LOC=`$AWK -F= '/ocrconfig_loc/ {print $2}' < $OCRCONFIG`

    # ocr.loc already has a location specified. Check if it is used for
    # single instance CSS/ASM
    LOCAL_FLAG=`$AWK -F= '/local_only/ {print $2}' < $OCRCONFIG`
    LOCAL_ONLY=`$ECHO $LOCAL_FLAG | $AWK '/[fF][aA][lL][sS][eE]/ { print "FALSE" }
                                         /[tT][rR][uU][eE]/ { print "TRUE" }'`
    # Previous installation of 10g single instance
    if [ "$LOCAL_ONLY" = "FALSE" ];then
       RAC=true;
    fi
  fi

  ret=0;
  if $RAC; 
   then
     # OCR and CSS running is configured for CRS services
     $ECHO "Oracle Cluster Registry (OCR) and CSS are configured for Oracle Cluster Ready (CRS) services. There is no need for local CSS configuration."
     ret=1;
  fi

  return $ret;
}


NSSetup()
{
  $ECHO "Setting up Network socket directories"

  for dir in /var/tmp/.oracle /tmp/oracle
  do
    if [ ! -d $dir ];
    then
       $MKDIRP $dir || { return 1; };
    fi

    $CHMOD 01777 $dir || { return 1; }
    $CHOWN root  $dir || { return 1; }
  done

  return 0;
}

NSReset()
{
  $ECHO "Cleaning up Network socket directories"

  for dir in /var/tmp/.oracle /tmp/.oracle
  do
    if [  -d $dir ];
    then
      $RMF $dir/*CSS*
      $RMF $dir/*CRS*
      $RMF $dir/*EVM*
      $RMF $dir/*PROC*
      $RMF $dir/*css*
      $RMF $dir/*crs*
      $RMF $dir/*evm*
      $RMF $dir/*proc*

      NoFiles=`$LS1 $dir | $WCL | $AWK '{print $1}'`
      if [ "$NoFiles" = "0" ];
      then
  	  $RMRF $dir
      fi
    fi
  done

  return 0;
}

# This script is intended to be run by root.

RUID=`$ID|$AWK -F\( '{print $2}'|$AWK -F\) '{print $1}'`
if [ ${RUID} != "root" ];then
  $ECHO "You must be logged in as root to run $0."
  $ECHO "Log in as root and restart $0 execution."
  exit 1
fi

USE_FILE=false

# print obsolete msg
printf "*********************************************************\n"
printf "* NOTES: This script is obsolete. Please use roothas.pl *\n"
printf "* 	 to configure Oracle Restart			*\n"
printf "*********************************************************\n"
exit 1

##Parsing command line arguments (if any)
parseArgs $* 

if $USE_FILE;
then
  if [ ! -f $CSS_ENV_FILE ]; then
     $ECHO "The input file($CSS_ENV_FILE) specifying the parameter values for variables is not found"
     exit 1
  fi

  ###Read CRS parameter values from param file
  readparamfile
fi

###validating input params
validateInput || { $ECHO $?; exit 1; }

ORACLE_HOME=$CSS_ORACLE_HOME
export ORACLE_HOME

#if DEST_ORACLE_HOME was not set when using reset option then it means
#user is running thie script from target Oracle home
if [ -z "$DEST_ORACLE_HOME" ]; then
  DEST_ORACLE_HOME=$CSS_ORACLE_HOME
fi

ORA_CRS_HOME=$CSS_ORACLE_HOME

CH=$DEST_ORACLE_HOME

ADDITAB="$CAT \$IT | $GREP -v 'init\.cssd' > \$IT.no_cssd; \
         $CP \$IT.no_cssd \$IT; \
         $RM \$IT.no_cssd 2>/dev/null; \
         $CAT \$IT \$CH/css/admin/inittab_local > \$IT.cssd; \
         $ECHO \"Adding to inittab \" ; \
         $CP \$IT.cssd \$IT"
RMITAB="$CAT \$IT | $GREP -v 'init\.cssd' > \$IT.no_cssd; \
        $CP \$IT.no_cssd \$IT"

UNAME=/bin/uname
PLATFORM=`$UNAME`

case $PLATFORM in
Linux) LD_LIBRARY_PATH=$ORA_CRS_HOME/lib
       DIRNAME=/usr/bin/dirname
       ID=/etc/init.d

       # RCSDIR. Directories where we want to invoke "start" (which is
       # misleadingly named) to do boot time checking.
       # RCKDIR. Directories where we want to invoke "stop" to stop CRS/CSS.
       # RCALLDIR. Directories where we want to clean CRS/CSS script entries.
       RCSDIR="/etc/rc.d/rc3.d /etc/rc.d/rc5.d"
       RCKDIR="/etc/rc.d/rc0.d /etc/rc.d/rc1.d /etc/rc.d/rc2.d /etc/rc.d/rc4.d /etc/rc.d/rc6.d"
       RCALLDIR="/etc/rc.d/rc0.d /etc/rc.d/rc1.d /etc/rc.d/rc2.d /etc/rc.d/rc3.d /etc/rc.d/rc4.d /etc/rc.d/rc5.d /etc/rc.d/rc6.d"
       RC_START=S96
       RC_KILL=K19
       RC_KILL_OLD=K96
       IT=/etc/inittab
       INIT=/sbin/init
       export LD_LIBRARY_PATH
       ORACLUSTERDIR=$ORA_CRS_HOME/lib
       OCRCONFIGDIR=/etc/oracle
       SCRBASE=/etc/oracle/scls_scr
       ;;
HP-UX) MACH_HARDWARE=`/bin/uname -m`
       if [ "$MACH_HARDWARE" = "ia64" ]; then
          NMAPIDIR_64=/opt/nmapi/nmapi2/lib/hpux64
          NMAPIDIR_32=/opt/nmapi/nmapi2/lib/hpux32
       else
          NMAPIDIR_64=/opt/nmapi/nmapi2/lib/pa20_64
          NMAPIDIR_32=/opt/nmapi/nmapi2/lib
       fi 
       LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:$NMAPIDIR_64:/usr/lib:$LD_LIBRARY_PATH
       SHLIB_PATH=$ORA_CRS_HOME/lib32:$NMAPIDIR_32:$SHLIB_PATH
       DIRNAME=/bin/dirname
       ID=/sbin/init.d
       RCSDIR="/sbin/rc3.d"
       RCKDIR="/sbin/rc2.d"
       RCALLDIR="/sbin/rc2.d /sbin/rc3.d"
       RC_START=S960
       RC_KILL=K190
       RC_KILL_OLD=K001
       IT=/etc/inittab
       INIT=/sbin/init
       export LD_LIBRARY_PATH
       export SHLIB_PATH
       ORACLUSTERDIR=$ORA_CRS_HOME/lib32
       OCRCONFIGDIR=/var/opt/oracle
       SCRBASE=/var/opt/oracle/scls_scr
       ;;
SunOS) case `/bin/uname -i` in
       i86pc)
         LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH
         export LD_LIBRARY_PATH
         ;;
       *)
         LD_LIBRARY_PATH=$ORA_CRS_HOME/lib32:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH
         LD_LIBRARY_PATH_64=$ORA_CRS_HOME/lib:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH_64
         export LD_LIBRARY_PATH
         export LD_LIBRARY_PATH_64
         ;;
       esac
       DIRNAME=/bin/dirname
       ID=/etc/init.d
       RCSDIR="/etc/rc3.d"
       RCKDIR="/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rcS.d"
       RCALLDIR="/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rcS.d"
       RC_START=S96
       RC_KILL=K19
       RC_KILL_OLD=K96
       IT=/etc/inittab  
       INIT=/sbin/init
       ORACLUSTERDIR=/opt/ORCLcluster/lib
       OCRCONFIGDIR=/var/opt/oracle
       SCRBASE=/var/opt/oracle/scls_scr
       ;;
AIX)   LIBPATH=$ORA_CRS_HOME/lib:/opt/ORCLcluster/lib:$ORA_CRS_HOME/lib32:/opt/ORCLcluster/lib32:/usr/lib:$LIBPATH
       LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH
       DIRNAME=/bin/dirname
       ID=/etc
       RCSDIR="/etc/rc.d/rc2.d"
       RCKDIR="/etc/rc.d/rc2.d"
       RCALLDIR="/etc/rc.d/rc2.d"
       RC_START=S96
       RC_KILL=K19
       RC_KILL_OLD=K96
       IT=/etc/inittab
       INIT=/usr/sbin/init
       ADDITAB="$ECHO \"Adding to inittab\"; \
                while read line; \
                do \
                rflds=\`echo \$line | cut -d ':' -f 1-3\`; \
                lfld=\`echo \$line | cut -d ':' -f 4-\`; \
                mkitab \$rflds:\"\$lfld\"; \
                done < \$CH/css/admin/inittab_local"
       RMITAB="while read line; \
                do \
                identifier=\`echo \$line | cut -d ':' -f 1\`; \
                rmitab \$identifier 2>/dev/null; \
                done < \$CH/css/admin/inittab_local"
       export LIBPATH
       export LD_LIBRARY_PATH
       ORACLUSTERDIR=$ORA_CRS_HOME/lib32
       OCRCONFIGDIR=/etc/oracle
       SCRBASE=/etc/oracle/scls_scr
       ;;
OSF1)  LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:/shlib:/usr/lib
       DIRNAME=/usr/bin/dirname
       ID=/sbin/init.d
       RCSDIR="/sbin/rc3.d"
       RCKDIR="/sbin/rc3.d"
       RCALLDIR="/sbin/rc3.d"
       RC_START=S96
       RC_KILL=K19
       RC_KILL_OLD=K96
       IT=/etc/inittab
       INIT=/sbin/init
       export LD_LIBRARY_PATH
       ORACLUSTERDIR=/usr/ccs/lib
       OCRCONFIGDIR=/var/opt/oracle
       SCRBASE=/var/opt/oracle/scls_scr
       ;;
*)     /bin/echo "ERROR: Unknown Operating System"
       exit -1
       ;;
esac

#convert host name to lower case
#If the hostname is an IP address, let hostname
#remain as IP address
HOST=`$HOSTN`
len1=`$EXPRN "$HOST" : '.*'`
len2=`$EXPRN match $HOST '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'`
                                                                                
# Strip off domain name in case /bin/hostname returns
# FQDN hostname
if [ $len1 != $len2 ]; then
 HOST=`$ECHO $HOST | cut -d'.' -f1 `
fi
 
HOST=`$ECHO $HOST | $TR '[:upper:]' '[:lower:]'`

SCRDIR=$SCRBASE/$HOST

$CHMOD 644 $IT $IT.orig $IT.no_cssd $IT.cssd $IT.crs $IT.no_crs 2>/dev/null

##Validating if CSS is configured for RAC
validateRAC || { $ECHO $?; exit 1; }

ORA_CRS_HOME=$DEST_ORACLE_HOME
export ORA_CRS_HOME

case $PLATFORM in
Linux) LD_LIBRARY_PATH=$ORA_CRS_HOME/lib
       export LD_LIBRARY_PATH
       ;;
HP-UX) MACH_HARDWARE=`/bin/uname -m`
       if [ "$MACH_HARDWARE" = "ia64" ]; then
          NMAPIDIR_64=/opt/nmapi/nmapi2/lib/hpux64
          NMAPIDIR_32=/opt/nmapi/nmapi2/lib/hpux32
       else
          NMAPIDIR_64=/opt/nmapi/nmapi2/lib/pa20_64
          NMAPIDIR_32=/opt/nmapi/nmapi2/lib
       fi 
       LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:$NMAPIDIR_64:/usr/lib:$LD_LIBRARY_PATH
       SHLIB_PATH=$ORA_CRS_HOME/lib32:$NMAPIDIR_32:$SHLIB_PATH
       export LD_LIBRARY_PATH
       export SHLIB_PATH
       ;;
SunOS) case `/bin/uname -i` in
       i86pc)
         LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH
         export LD_LIBRARY_PATH
         ;;
       *)
         LD_LIBRARY_PATH=$ORA_CRS_HOME/lib32:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH
         LD_LIBRARY_PATH_64=$ORA_CRS_HOME/lib:/opt/ORCLcluster/lib:/usr/lib:/usr/ucblib:$LD_LIBRARY_PATH_64
         export LD_LIBRARY_PATH
         export LD_LIBRARY_PATH_64
         ;;
       esac
       ;;
AIX)   LIBPATH=$ORA_CRS_HOME/lib:$ORA_CRS_HOME/lib32:/usr/lib:$LIBPATH
       LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH
       export LIBPATH
       export LD_LIBRARY_PATH
       ;;
OSF1)  LD_LIBRARY_PATH=$ORA_CRS_HOME/lib:/shlib:/usr/lib
       export LD_LIBRARY_PATH
       ;;
*)     /bin/echo "ERROR: Unknown Operating System"
       exit -1
       ;;
esac

OCRCONFIG=$OCRCONFIGDIR/ocr.loc
OCRLOC=$ORACLE_HOME/cdata/localhost/local.ocr

if [ ! -d "$OCRCONFIGDIR" ];then
  $ECHO "$OCRCONFIGDIR does not exist. Creating it now."
  $MKDIR -p $OCRCONFIGDIR 
fi

$CHOWN root $OCRCONFIGDIR 
$CHGRP $CSS_DBA_GROUP $OCRCONFIGDIR 
$CHMOD 755 $OCRCONFIGDIR 

INIT_OCR=FALSE
RESET_CSS=TRUE
RESET_OCR=TRUE
CREATE_KEYS=FALSE

if [ "$CFG_OPTION" = "add" ];
then
   # OCR & CSS will be initialized
   INIT_OCR=TRUE
   CREATE_KEYS=TRUE
elif [ "$CFG_OPTION" = "delete" ];
then
   # This case if for delete option.
   RESET_OCR=FALSE
   RESET_CSS=FALSE
else
   # OCR and CSS will not be deleted but reset to new Oracle home
   RESET_OCR=TRUE
   RESET_CSS=TRUE
fi

# Check if we have to create/update ocr.loc for single node CSS
if [ "$INIT_OCR" = "TRUE" ]; then
  echo ocrconfig_loc=$OCRLOC > $OCRCONFIG
  echo local_only=TRUE >> $OCRCONFIG
  $CHOWN $CSS_ORACLE_OWNER $OCRCONFIG
  $CHGRP $CSS_DBA_GROUP $OCRCONFIG
  $CHMOD 644 $OCRCONFIG

  # check if cdata directory exists
  if [ ! -d "$ORACLE_HOME/cdata" ]; then
    $MKDIR -p $ORACLE_HOME/cdata
    $CHOWN $CSS_ORACLE_OWNER $ORACLE_HOME/cdata
    $CHGRP $CSS_DBA_GROUP $ORACLE_HOME/cdata
    $CHMOD 755 $ORACLE_HOME/cdata
  fi

  # Check if localhost dierctory under cdata exists
  if [ ! -d "$ORACLE_HOME/cdata/localhost" ]; then
    $MKDIR -p $ORACLE_HOME/cdata/localhost
    $CHOWN $CSS_ORACLE_OWNER $ORACLE_HOME/cdata/localhost
    $CHGRP $CSS_DBA_GROUP $ORACLE_HOME/cdata/localhost
    $CHMOD 755 $ORACLE_HOME/cdata/localhost
  fi

  # Check if localhost dierctory under cdata exists
  if [ ! -f "$ORACLE_HOME/cdata/localhost/local.ocr" ]; then
    $CP /dev/null $ORACLE_HOME/cdata/localhost/local.ocr
    $CHOWN $CSS_ORACLE_OWNER $ORACLE_HOME/cdata/localhost
    $CHGRP $CSS_DBA_GROUP $ORACLE_HOME/cdata/localhost
    $CHMOD 755 $ORACLE_HOME/cdata/localhost
  fi
  
  $CHOWN $CSS_ORACLE_OWNER $OCRLOC
  $CHGRP $CSS_DBA_GROUP $OCRLOC
  $CHMOD 644 $OCRLOC

  BASE_LOGDIR=$ORACLE_HOME/log
  LOGDIR=$BASE_LOGDIR/$HOST
  CSS_LOGDIR=$LOGDIR/cssd
  OCR_LOGDIR=$LOGDIR/client

  # Create CRS log directories

  for d in $BASE_LOGDIR $LOGDIR $CSS_LOGDIR $OCR_LOGDIR
  do
    $MKDIRP $d  || { $ECHO $?; exit 1; }
  done

  for d in $BASE_LOGDIR $LOGDIR $CSS_LOGDIR $OCR_LOGDIR
  do
    $CHOWN $CSS_ORACLE_OWNER $d || { $ECHO $?; exit 1; }
    $CHGRP $CSS_DBA_GROUP $d || { $ECHO $?; exit 1; }
  done

  $CHMOD 1755 $BASE_LOGDIR || { $ECHO $?; exit 1; }
  $CHMOD 1755 $LOGDIR || { $ECHO $?; exit 1; }

  for d in $CSS_LOGDIR $OCR_LOGDIR
  do
    $CHMOD 770 $d || { $ECHO $?; exit 1; }
  done

  # Create an empty alert log file
  ALERTFILE=$LOGDIR/alert$HOST.log
  $TOUCH $ALERTFILE
  $CHOWN $CSS_ORACLE_OWNER $ALERTFILE || { $ECHO $?; exit 1; } 
  $CHGRP $CSS_DBA_GROUP $ALERTFILE || { $ECHO $?; exit 1; }
  $CHMOD 644 $ALERTFILE || { $ECHO $?; exit 1; }

elif [ "$RESET_OCR" = "TRUE" ];
then
   CURR_OCRLOC=`$AWK -F= '/ocrconfig_loc/ {print $2}' < $OCRCONFIG`
   NEW_OCRLOC=`echo $DEST_ORACLE_HOME`/cdata/localhost/local.ocr

   if [ ! -f $NEW_OCRLOC ];
   then
      # check if cdata directory exists
     if [ ! -d "$DEST_ORACLE_HOME/cdata" ]; then
        $MKDIR $DEST_ORACLE_HOME/cdata
        $CHOWN $CSS_ORACLE_OWNER $DEST_ORACLE_HOME/cdata
        $CHGRP $CSS_DBA_GROUP $DEST_ORACLE_HOME/cdata
        $CHMOD 755 $DEST_ORACLE_HOME/cdata
     fi

     # Check if localhost dierctory under cdata exists
     if [ ! -d "$DEST_ORACLE_HOME/cdata/localhost" ]; then
        $MKDIR $DEST_ORACLE_HOME/cdata/localhost
        $CHOWN $CSS_ORACLE_OWNER $DEST_ORACLE_HOME/cdata/localhost
        $CHGRP $CSS_DBA_GROUP $DEST_ORACLE_HOME/cdata/localhost
        $CHMOD 755 $DEST_ORACLE_HOME/cdata/localhost
     fi
   fi

   if [ -s $CURR_OCRLOC -a "$CURR_OCRLOC" != "$NEW_OCRLOC" ];
   then
      #Copying the existing OCR file to new location
      $CP $CURR_OCRLOC $NEW_OCRLOC
   fi
   # re-create OCR: the OCR datafile contains its own path.
   $CP /dev/null $NEW_OCRLOC
   CREATE_KEYS=TRUE

   $CHOWN $CSS_ORACLE_OWNER $NEW_OCRLOC
   $CHGRP $CSS_DBA_GROUP $NEW_OCRLOC
   $CHMOD 644 $NEW_OCRLOC

   $ECHO ocrconfig_loc=$NEW_OCRLOC > $OCRCONFIG
   $ECHO local_only=TRUE >> $OCRCONFIG
   $CHOWN $CSS_ORACLE_OWNER $OCRCONFIG
   $CHGRP $CSS_DBA_GROUP $OCRCONFIG
   $CHMOD 644 $OCRCONFIG

   BASE_LOGDIR=$DEST_ORACLE_HOME/log
   LOGDIR=$BASE_LOGDIR/$HOST
   CSS_LOGDIR=$LOGDIR/cssd
   OCR_LOGDIR=$LOGDIR/client

   # Create CRS log directories

   for d in $BASE_LOGDIR $LOGDIR $CSS_LOGDIR $OCR_LOGDIR
   do
     $MKDIRP $d  || { $ECHO $?; exit 1; }
   done

   for d in $BASE_LOGDIR $LOGDIR $CSS_LOGDIR $OCR_LOGDIR
   do
     $CHOWN $CSS_ORACLE_OWNER $d || { $ECHO $?; exit 1; }
     $CHGRP $CSS_DBA_GROUP $d || { $ECHO $?; exit 1; }
   done

   $CHMOD 1755 $BASE_LOGDIR || { $ECHO $?; exit 1; }
   $CHMOD 1755 $LOGDIR || { $ECHO $?; exit 1; }

   for d in $CSS_LOGDIR $OCR_LOGDIR
   do
     $CHMOD 770 $d || { $ECHO $?; exit 1; }
   done

   # Create an empty alert log file
   ALERTFILE=$LOGDIR/alert$HOST.log
   $TOUCH $ALERTFILE
   $CHOWN $CSS_ORACLE_OWNER $ALERTFILE || { $ECHO $?; exit 1; } 
   $CHGRP $CSS_DBA_GROUP $ALERTFILE || { $ECHO $?; exit 1; }
   $CHMOD 644 $ALERTFILE || { $ECHO $?; exit 1; }

fi

if [ "$RESET_CSS" = "TRUE" ];
then
    #Create SCR Home dir, owned by root 755
    $MKDIR -p   $SCRDIR  || { $ECHO $?; exit 1; }
    $CHOWN root $SCRBASE || { $ECHO $?; exit 1; }
    $CHOWN root $SCRDIR  || { $ECHO $?; exit 1; }
    $CHMOD 755  $SCRBASE || { $ECHO $?; exit 1; }
    $CHMOD 755  $SCRDIR  || { $ECHO $?; exit 1; }

   #Reset the configuration of CSS
   CH=$DEST_ORACLE_HOME
   CRSCTL=$CH/bin/crsctl

   # Initialize the system SCR settings
   $CRSCTL create scr $CSS_ORACLE_OWNER

   for d in css css/init css/log css/auth
   do
      $CHMOD 711 $CH/$d
   done

   # Initialize the OCR repository the first time we come through the script.

   SCRIPT_STATUS=0
   CLSCFG=$CH/bin/clscfg

   if [ "$CREATE_KEYS" = "TRUE" ];
   then
       #Create CSS keys only if needed to
       $CLSCFG -local -o $CH -l "$CSS_LANGUAGE_ID"
       SCRIPT_STATUS=$?
       case $? in
         0) $ECHO "Configuration for local CSS has been initialized";;
       105) $ECHO "Configuration for local CSS has already been initialized";;
         *) $ECHO "Failed to initialize configuration for local CSS";;
       esac
   fi


     if [ $SCRIPT_STATUS = 0 ];
     then
      OCSSDPID=`$PSE | $GREP 'ocssd' | $GREP -v grep | $AWK '{print $1}'`
      if [ "$OCSSDPID" = "" ];
      then
         $ECHO ""
      elif [ "$RESET_OCR" = "TRUE" ]; then
         $ECHO "Stale CSS daemon is running... killing it now"

         $CP $IT "$IT".orig
         eval $RMITAB
         $INIT q

         $CSSDKILL -9 $OCSSDPID
      fi

      #cleanup previous NS endpoints; could be different owner
      NSReset

      # create NS endpoint directories if necessary
      NSSetup || { $ECHO $?; exit 1; }

      $RMF $ID/init.cssd

      # basic copies first...
      $CP $CH/css/admin/init.cssd $ID/init.cssd

      for rc in $RCALLDIR
      do
        $RMF $rc/"$RC_START"init.cssd
        $RMF $rc/"$RC_KILL"init.cssd
        $RMF $rc/"$RC_KILL_OLD"init.cssd
      done
      for rc in $RCSDIR
      do
        $LNS $ID/init.cssd $rc/"$RC_START"init.cssd || { $ECHO $?; exit 1; }
      done
      for rc in $RCKDIR
      do
        $LNS $ID/init.cssd $rc/"$RC_KILL"init.cssd  || { $ECHO $?; exit 1; }
      done

      $CP $IT "$IT".orig
      eval $RMITAB 
      $INIT q
      $SLEEP 10
      eval $ADDITAB

      # installl CSS and start it up.
      $ID/init.cssd start
      $INIT q
  
      # Now wait for it to come up
      $ECHO "Checking the status of new Oracle init process..."
      if $CRSCTL check install -wait 600 
      then
         $ECHO "Oracle CSS service is installed and running under init(1M)"    
      else	# problems, clean up.
         $ECHO "Giving up: Oracle CSS stack appears NOT to be running."
  
         for rc in $RCALLDIR
         do
           $RMF $rc/"$RC_START"init.cssd
           $RMF $rc/"$RC_KILL"init.cssd
           $RMF $rc/"$RC_KILL_OLD"init.cssd
         done
  
         $ECHO "Oracle CSS service would not start as installed"
         $ECHO "Automatic Storage Management(ASM) cannot be used until Oracle CSS service is started"
      fi
   else 
      $ECHO "Failed configure CSS. Fix the problem and rerun this script from destination Oracle home with 'reset' argument"
      exit 1
   fi
else 
   #if RESET_CSS=FALSE, means delete CSS. Remove init scripts here
   eval $RMITAB
   $RMF $IT.no_cssd

   $ID/init.cssd stop

   for rc in $RCALLDIR
   do
     $RMF $rc/"$RC_START"init.cssd
     $RMF $rc/"$RC_KILL"init.cssd
     $RMF $rc/"$RC_KILL_OLD"init.cssd
   done

   $RMF $ID/init.cssd
   $INIT q

   #cleanup SCR directories
   $RMRF $SCRBASE

   #cleanup NS endpoints
   NSReset
fi

if [ "$RESET_OCR" = "FALSE" ];
then
   #Deleteing OCR here so CSS is deconfigured/deinstalled
   if [ -f $OCRCONFIG ]; then
      OCRLOC=`$AWK -F= '/ocrconfig_loc/ {print $2}' < $OCRCONFIG`
      $RMF $OCRCONFIG

      if [ ! -z "$OCRLOC" ]; then
        $RMF $OCRLOC
      fi
   fi
fi