#! /bin/sh 
# Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany.
#                    2002 SuSE Linux AG Nuernberg, Germany.
#
# Author: Holger Achtziger
#         Wolfgang Rosenauer
#
# /etc/init.d/sapr3
#
#   and symbolic its link
#
# /usr/sbin/rcsapr3
#
### BEGIN INIT INFO
# Provides: SAPR3 
# Required-Start: $remote_fs $syslog
# Should-Start:   sysstat
# Required-Stop:  $remote_fs $syslog
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Description:    initializes the environment for SAP system 
### END INIT INFO

test -f /etc/rc.status && . /etc/rc.status
test -f /etc/sysconfig/sapr3 && \
      . /etc/sysconfig/sapr3


rc_reset
# always sysctl if start
if [ $1 = start ]; then
  echo "Setting kernel parameters for SAP system"
  if [ -f /etc/sysctl.conf.sap -a -x /sbin/sysctl ]; then
    /sbin/sysctl -p /etc/sysctl.conf.sap
  else
    echo -n ": configuration error (sysctl not possible!)"
    rc_failed 5
  fi
  rc_status -v
fi



# define some vars
HOSTNAME="`/bin/hostname -s`"

zentr()
{
  # start/stop central instance
  ZENTRIN=`find /usr/sap/$SAPSID/* -type d -maxdepth 0 | grep \/.*M.*[0-9][0-9]$`
  ZENTRNR=`echo $ZENTRIN | sed -e "s/^.*\/[DVEBMGS]*//"`

  if [ "$ZENTRIN" != "" ]; then
    echo $1" central instance nr. $ZENTRNR"
    ADMHOME=`grep ^$ADMIN: /etc/passwd | awk -F: '{print $6}'`
    SERVICE="$ADMHOME/$1"sap_"$HOSTNAME"_"$ZENTRNR"
    if [ -x $SERVICE ]; then
      if ! su - $ADMIN -c $SERVICE; then
         rc_failed
         echo -n $SERVICE
      fi
    else
      echo -n $SERVICE" not found or not executable" 
      rc_failed 5
    fi
  else
    echo -n "No central instance found on $HOSTNAME for system $SAPSID"
  fi
  rc_status -v
}

addin()
{
  # start/stop additional instances
  ADDNR=`find /usr/sap/$SAPSID/* -type d -maxdepth 0 | grep -v \/.*M.*[0-9][0-9]$ | grep -e [DVEBGS]*[0-9][0-9]$ | sed -e "s/^.*\/[DVEBGS]*//"`

  if [ "$ADDNR" != "" ]; then
    echo $1" additional instances:"
    for J in $ADDNR; do
      echo "instance nr. $J"
      ADMHOME=`grep ^$ADMIN: /etc/passwd | awk -F: '{print $6}'`
      SERVICE="$ADMHOME/$1"sap_"$HOSTNAME"_"$J"
      if [ -x $SERVICE ]; then
         if ! su - $ADMIN -c "$SERVICE r3"; then
            rc_failed
            echo -n $SERVICE
         fi
      else
         echo -n $SERVICE" not found or not executable"
         rc_failed 5
      fi
    done
  else
    echo -n "No additional instances found"
  fi
  rc_status -v
}

sapr3()
{
  for I in $SAPCONFIG; do
    echo
    eval SAPSID=\$SAP_SAPSID$I
    LOWSID=`echo $SAPSID | tr [:upper:] [:lower:]`
    ADMIN="$LOWSID"adm""

    echo $1" system $SAPSID with user $ADMIN!"
    if [ $1 = "start" ]; then
      zentr $1
      addin $1
    else
      addin $1
      zentr $1
    fi
  done
}

rc_reset
case "$1" in
    start)
       echo -n "Starting service SAP R/3 "
       sapr3 start
       rc_status -v
       ;;
    stop)
       echo -n "Stopping service SAP R/3 "
       sapr3 stop
       rc_status -v
       ;;
    restart)
       $0 stop
       $0 start 
       rc_status
       ;;
    *)
       echo "Usage: $0 {start|stop|restart}"
       exit 1
       ;;
esac
rc_exit
