Wie man einen saprouter als eigenes System oder eigene Instanz installieren kann

Auf den saprouter selbst möchte ich hier gar nicht weiter eingehen. Seine Funktionen etc. sind unter help.sap.com ganz gut beschrieben. Da ich ein Freund von Automatisierung und möglichst einfachen Administrationslösungen bin habe ich mich dazu entschlossen den saprouter nicht etwa als Unixdaemon laufen zu lassen oder irgendwie per Script zu starten, sondern das Framework der SAP mit SAP Kernel dafür zu nutzen.

Die Vorteile dieser Lösung liegen für mich in dem Einheitlichen Starten und Stoppen des Systems und sogar der Möglichkeit der Prozessüberwachung per sapcontrol. Wenn jemand ein reguläres SAP System per startsap oder stopsap stoppen kann, so kann er auch den saprouter in dieser Lösung mit genau dem gleichen Vorgehen starten und stoppen. Die Anmeldung als <sid>adm ist analog zu einem SAP System. Der Rest ist ebenfalls analog zu betrachten.

Was benötigt man für die Umsetzung? Etwa 3-4 GB Plattenplatz, das SAP Standard Filesystem Layout mit /sapmnt sowie /usr/sap, einen <sid>adm mit Gruppe sapsys und als Software ein zur Hardware passendes SAP Kernel Exe Patch SAR Archive (SAPEXE_*.SAR) als Unicode Ausführung. Es reicht aus den Plattenplatz komplett unter /sapmnt/ zur Verfügung zu stellen wenn man keine zwei Filesysteme (zusätzliches /usr/sap/) einrichten möchte kann man hier auch mit Links arbeiten.

Unser Beispiel System nennen wir hier mal SR1 – passend für Saprouter 1. Es bekommt eine Instanz Namens W97. Der <sid>adm User heißt entsprechend sr1adm ebenso die Filesysteme. Der User wird entsprechend mit dem Home-Verzeichnis /home/sr1adm angelegt, bekommt die Gruppe sapsys als primäre Gruppe sowie die csh-Shell.

Das könnte dann zum Beispiel so aussehen:

sapserver:sr1adm 2> grep -i sr1adm /etc/passwd /etc/group
/etc/passwd:sr1adm:!:10001:15000:SAP System Administrator:/home/sr1adm:/usr/bin/csh
/etc/group:sapsys:!:15000:sr1adm

Im Homeverzeichnis brauchen wir lediglich die Standard Environment Dateien:

sapserver:sr1adm 3> ls -altr 
-rw-r-----    1 sr1adm   sapsys         1315 Feb 25 2013  .sapsrc.sh
-rw-r-----    1 sr1adm   sapsys         1548 Feb 25 2013  .sapsrc.csh
-rw-r-----    1 sr1adm   sapsys         1801 Feb 25 2013  .cshrc
-rw-r-----    1 sr1adm   sapsys         1660 Feb 27 2013  .profile
-rw-r-----    1 sr1adm   sapsys        11141 Feb 27 2013  .sapenv.csh
-rw-r-----    1 sr1adm   sapsys        10103 Feb 27 2013  .sapenv.sh
-rwxr--r--    1 sr1adm   sapsys         2052 Feb 27 2013  .login
sapserver:sr1adm 4>

In der sapenv.csh/sh habe ich folgende Änderungen hinzugefügt (beispielhaft wird hier die .csh als Auszug angezeigt):

setenv SAPSYSTEMNAME SR1

set _UC_NUC=uc
set _DEF_EXE1=/usr/sap/"$SAPSYSTEMNAME"/SYS/exe/"$_UC_NUC"/"$_PLATFORM"
set _DEF_EXE2=/usr/sap/"$SAPSYSTEMNAME"/SYS/exe/run
set _DEF_EXE="$_DEF_EXE1 $_DEF_EXE2"

setenv DIR_LIBRARY ${_DEF_EXE2}

setenv RSEC_SSFS_DATAPATH /usr/sap/"$SAPSYSTEMNAME"/SYS/global/security/rsecssfs/data
setenv RSEC_SSFS_KEYPATH /usr/sap/"$SAPSYSTEMNAME"/SYS/global/security/rsecssfs/key
setenv SNC_LIB /usr/sap/"$SAPSYSTEMNAME"/W97/exe/libsapcrypto.so
setenv SECUDIR /usr/sap/"$SAPSYSTEMNAME"/W97/sec
[...]
# define some nice aliases
alias pd pushd
alias pop popd
alias dir 'ls -l'
alias l 'ls -abxCF'
alias h 'history'
alias Pwd '/bin/pwd'
alias Su "rlogin `hostname` -l"
alias cdexe 'cd $_DEF_EXE2'
alias cdpro 'cd /usr/sap/$SAPSYSTEMNAME/SYS/profile'
alias cdglo 'cd /usr/sap/$SAPSYSTEMNAME/SYS/global'
alias cdput 'cd /usr/sap/$SAPSYSTEMNAME/put'
alias cdW 'cd /usr/sap/$SAPSYSTEMNAME/W97'
alias cdwork 'cd /usr/sap/$SAPSYSTEMNAME/W97/work'

ls -d /usr/sap/$SAPSYSTEMNAME/[D,G,S,J,T,A]*[0-9][0-9] >& /dev/null
if ( $status == 0 ) then
  set INSTANCEDIR_LIST=`ls -d /usr/sap/$SAPSYSTEMNAME/[D,G,S,J,T,A,W]*[0-9][0-9]`
  set INSTANCEDIR_CI="/usr/sap/$SAPSYSTEMNAME/DVEBM"
  set INSTANCEDIR_DI="/usr/sap/$SAPSYSTEMNAME/D"
  set INSTANCEDIR_GW="/usr/sap/$SAPSYSTEMNAME/G"
  set INSTANCEDIR_S="/usr/sap/$SAPSYSTEMNAME/SCS"
  set INSTANCEDIR_JC="/usr/sap/$SAPSYSTEMNAME/JC"
  set INSTANCEDIR_J="/usr/sap/$SAPSYSTEMNAME/J"
  set INSTANCEDIR_T="/usr/sap/$SAPSYSTEMNAME/TRX"
  set INSTANCEDIR_AS="/usr/sap/$SAPSYSTEMNAME/ASCS"
  set INSTANCEDIR_W="/usr/sap/$SAPSYSTEMNAME/W"

  foreach d ( $INSTANCEDIR_LIST )
    echo $d | grep `echo $INSTANCEDIR_CI` > /dev/null
    set rc1 = $status
    echo $d | grep `echo $INSTANCEDIR_DI` > /dev/null
    set rc2 = $status
    echo $d | grep `echo $INSTANCEDIR_GW` > /dev/null
    set rc3 = $status
    echo $d | grep `echo $INSTANCEDIR_S` > /dev/null
    set rc4 = $status
    echo $d | grep `echo $INSTANCEDIR_JC` > /dev/null
    set rc5 = $status
    echo $d | grep `echo $INSTANCEDIR_J` > /dev/null
    set rc6 = $status
    echo $d | grep `echo $INSTANCEDIR_T` > /dev/null
    set rc7 = $status
    echo $d | grep `echo $INSTANCEDIR_AS` > /dev/null
    set rc8 = $status
    echo $d | grep `echo $INSTANCEDIR_W` > /dev/null
    set rc9 = $status
    if ( $rc1 == 0 ) then
      alias cdD 'cd /usr/sap/$SAPSYSTEMNAME/DVEBM*[0-9][0-9]'
    else if ( $rc2 == 0 ) then
      alias cdDi 'cd /usr/sap/$SAPSYSTEMNAME/D[0-9][0-9]'
    else if ( $rc3 == 0) then
      alias cdG 'cd /usr/sap/$SAPSYSTEMNAME/G[0-9][0-9]'
    else if ( $rc4 == 0) then
      alias cdS 'cd /usr/sap/$SAPSYSTEMNAME/SCS[0-9][0-9]'
    else if ( $rc5 == 0) then
      alias cdJC 'cd /usr/sap/$SAPSYSTEMNAME/JC[0-9][0-9]'
    else if ( $rc6 == 0) then
      alias cdJ 'cd /usr/sap/$SAPSYSTEMNAME/J[0-9][0-9]'
    else if ( $rc7 == 0) then
      alias cdT 'cd /usr/sap/$SAPSYSTEMNAME/TRX[0-9][0-9]'
    else if ( $rc8 == 0) then
      alias cdAS 'cd /usr/sap/$SAPSYSTEMNAME/ASCS[0-9][0-9]'
    else if ( $rc9 == 0) then
      alias cdW 'cd /usr/sap/$SAPSYSTEMNAME/W[0-9][0-9]'
    endif
  end
endif

Unter /sapmnt muss dann das neue Filesystem SR1 eingerichtet werden.
Das System bekommt ganz regulär SYS, exe, global und profile.

sapserver:sr1adm 32> ls -altr
total 16
drwxr-xr-x    2 sr1adm   sapsys          256 Jun 22 2013  lost+found
drwxr-xr-x   12 root     sapsys         4096 Jun 22 2013  ..
drwxr-xr-x    4 sr1adm   sapsys          256 Jun 25 2013  exe
drwxr-xr-x    4 sr1adm   sapsys          256 Jun 25 2013  global
drwxr-xr-x    5 sr1adm   sapsys          256 Jun 25 2013  SYS
drwxr-xr-x    8 sr1adm   sapsys         4096 Jun 25 2013  .
drwxr-xr-x    3 sr1adm   sapsys          256 Jun 25 2013 profile

Im exe Ordner wird dann entsprechend der Architektur der Unterordner uc und der Architekturordner angelegt und der SAP Kernel Exe Patch (SAR Package) entpackt:

/sapmnt/SR1/exe/uc/linuxx86_64

Außerdem kommt noch das saprouter Binary in das Exe Verzeichnis. Am Ende wie gewohnt saproot.sh als root ausführen unter Angabe der SID.

Im SYS Ordner werden dann die folgenden Ordner bzw. Links angelegt:

sapserver:sr1adm 58> ls -altr
total 8
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  src
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  gen
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  exe
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  profile -> /sapmnt/SR1/profile
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  global -> /sapmnt/SR1/global
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    8 sr1adm   sapsys         4096 Feb 25 2013  ..

Die Inhalte der Unterordner sehen dann wie folgt aus:

sapserver:sr1adm 61> find . -exec ls -altr {} \;
total 8
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  src
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  gen
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  exe
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  profile -> /sapmnt/SR1/profile
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  global -> /sapmnt/SR1/global
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    8 sr1adm   sapsys         4096 Feb 25 2013  ..
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  opt
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  .
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  uc -> /sapmnt/SR1/exe/uc
lrwxrwxrwx    1 sr1adm   sapsys            3 Feb 25 2013  run -> dbg
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  nuc -> /sapmnt/SR1/exe/nuc
lrwxrwxrwx    1 sr1adm   sapsys           12 Feb 25 2013  dbg -> uc/linuxx86_64
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  ..
lrwxrwxrwx    1 sr1adm   sapsys           12 Feb 25 2013  ./exe/dbg -> uc/linuxx86_64
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  ./exe/nuc -> /sapmnt/SR1/exe/nuc
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  ..
lrwxrwxrwx    1 sr1adm   sapsys            3 Feb 25 2013  ./exe/run -> dbg
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  ./exe/uc -> /sapmnt/SR1/exe/uc
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  dbg
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  ..
total 0
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  ..
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  .
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  ./global -> /sapmnt/SR1/global
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  ./profile -> /sapmnt/SR1/profile
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  ..

Weiter geht es unterhalb von /usr/sap. Hier wird zunächst (wenn noch nicht angelegt) eine Datei Namens sapservices mit mindestens folgendem Inhalt benötigt und ausführbar sein muss:

#!/bin/sh

LIBPATH=/usr/sap/SR1/W97/exe:$LIBPATH; export LIBPATH; /usr/sap/SR1/W97/exe/sapstartsrv pf=/usr/sap/SR1/SYS/profile/SR1_W97_sapserver -D -u sr1adm

Die Datei sollte wie folgt berechtigt sein, so dass nur root diese schreiben, alle anderen sie lesen und ausführen dürfen. Über die Datei wird der sapstartsrv Daemon beim Systemstart automatisch gestartet, so dass der sapcontrol Prozess sich verbinden und den Status abfragen kann (SAP Standard):

-rwxr-xr-x    1 root     sapsys          799 Feb 25 2013 sapservices

Unter /usr/sap wird ein neues Filesystem SR1 angelegt und entsprechend berechtigt:

drwxr-xr-x    8 sr1adm   sapsys         4096 Jul 25 2016  SR1

Der Inhalt des Filesystems /usr/sap/SR1 sieht dann wie folgt aus:

sapserver:sr1adm 12> ls -altr
total 16
drwxr-xr-x 2 root root 256 Feb 22 2013 lost+found
drwxr-xr-x 12 root sapsys 4096 Feb 22 2013 ..
drwxr-xr-x 7 sr1adm sapsys 256 Feb 25 2013 W97
drwxr-xr-x 5 sr1adm sapsys 256 Feb 25 2013 SYS
ldrwxr-xr-x 8 sr1adm sapsys 4096 Feb 25 2013 .
sapserver:sr1adm 13>

Unter SYS finden sich folgende Ordner und Links:

sapserver:sr1adm 61> find . -exec ls -altr {} \;
total 8
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  src
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  gen
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  exe
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  profile -> /sapmnt/SR1/profile
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  global -> /sapmnt/SR1/global
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    8 sr1adm   sapsys         4096 Feb 25 2013  ..
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  opt
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  .
lrwxrwxrwx    1 sr1adm   sapsys           18 Feb 25 2013  uc -> /sapmnt/SR1/exe/uc
lrwxrwxrwx    1 sr1adm   sapsys            3 Feb 25 2013  run -> dbg
lrwxrwxrwx    1 sr1adm   sapsys           19 Feb 25 2013  nuc -> /sapmnt/SR1/exe/nuc
lrwxrwxrwx    1 sr1adm   sapsys           12 Feb 25 2013  dbg -> uc/linuxx86_64
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  ..
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  ..
total 0
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  dbg
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  ..

Das Instanzverzeichnis W97 sieht so aus:

sapserver:sr1adm 29> ls -altr
total 40
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  sec
drwxr-xr-x    2 sr1adm   sapsys          256 Feb 25 2013  data
drwxr-xr-x    7 sr1adm   sapsys          256 Feb 25 2013  .
drwxr-xr-x    5 sr1adm   sapsys        12288 Feb 25 2013  exe
drwxr-xr-x    5 sr1adm   sapsys          256 Feb 25 2013  log
drwxr-xr-x    8 sr1adm   sapsys         4096 Feb 25 2013  ..
drwxr-xr-x    2 sr1adm   sapsys         4096 Feb 25 2013 work

In das Verzeichnis exe wird beim Start per sapcpe der Kernel aus /sapmnt/SR1/exe/uc/86_64 kopiert – das saprouter Binary muss entweder in eine der sapcpe Steuerdateien mit aufgenommen werden, manuell kopiert oder gelinkt werden. Je nach Vorliebe – die sapcpe Steuerdateien sind natürlich der saubere Weg. Das saprouter Binary wird aus dem /usr/sap/SR1/W97/exe gestartet – man muss entsprechend dafür sorgen, dass es immer das aktuelle Binary ist. Wenn man einfach ein neueres saprouter Binary unterhalb von /sapmnt/SR1/exe… ablegt genügt dies nicht, da das Runtime-Verzeichnis eben ein anderes ist.

Kommen wir nun zur Pflege der Profile unter /sapmnt/SR1/profile. Im Profile Ordner habe ich die Profile des SAP Systems SR1 sowie die saprouttab abgelegt:

sapserver:sr1adm 9> ls -altr
total 40
-rw-r--r--    1 sr1adm   sapsys         1339 Feb 25 2013  DEFAULT.PFL
drwxr-xr-x    8 sr1adm   sapsys         4096 Feb 25 2013  ..
-rw-r--r--    1 sr1adm   sapsys         3185 Feb 25 2013  sr1_W97_sapserver
drwxr-xr-x    3 sr1adm   sapsys          256 Feb 25 2013  .
-rw-r--r--    1 sr1adm   sapsys         6382 Feb 25 2013  saprouttab
sapserver:sr1adm 10>

Das DEFAULT.PFL sieht so aus:
#.******************************************************************************************************************************
#.* *
#.* Defaultprofil DEFAULT *
#.* *
#.* Version = 000001 *
#.* Generiert von Benutzer = Admin *
#.* Datum der Generierung = 25.02.2013 , 18:04:42 *
#.* *
#.******************************************************************************************************************************
rslg/unix_syslog/active = 0
SAPSYSTEMNAME = SR1
SAPGLOBALHOST = sapserver
SAPFQDN = sapdomain
SAPLOCALHOST = sapserver
SAPLOCALHOSTFULL = $(SAPLOCALHOST).$(SAPFQDN)

Das Instanzprofil für die Instanz W97, innerhalb der die saprouter-Instanz läuft sieht so aus:

#.******************************************************************************************************************************
#.*                                                                                                                            *
#.*       Instanzprofil SR1_W97_saprouter                                                                                *
#.*                                                                                                                            *
#.*       Version                 = 000001                                                                                     *
#.*       Generiert von Benutzer  = Admin                                                                                   *
#.*       Datum der Generierung   = 25.02.2013 , 18:04:42                                                                      *
#.*                                                                                                                            *
#.******************************************************************************************************************************
rslg/unix_syslog/active = 0

# host information virtuell ip
SAPGLOBALHOST = sapserver
SAPFQDN = sapdomain
SAPLOCALHOST = sapserver
SAPLOCALHOSTFULL = $(SAPLOCALHOST).$(SAPFQDN)

# unique instance identifier
INSTANCE_NAME = W97
SAPSYSTEMNAME = SR1

# unique instance number
SAPSYSTEM = 97

DIR_INSTANCE = $(DIR_SEP)usr$(DIR_SEP)sap$(DIR_SEP)SP2$(DIR_SEP)W97
DIR_CT_RUN = $(DIR_EXE_ROOT)$(DIR_SEP)$(OS_UNICODE)$(DIR_SEP)linux86_64
DIR_EXECUTABLE = $(DIR_INSTANCE)$(DIR_SEP)exe
DIR_WORK = $(DIR_INSTANCE)$(DIR_SEP)work
DIR_PROFILE = $(DIR_INSTALL)$(DIR_SEP)profile
_PF = $(DIR_PROFILE)$(DIR_SEP)SR1_W97_sapserver
DIR_LIBRARY = $(DIR_INSTANCE)$(DIR_SEP)exe
SETENV_00 = DIR_LIBRARY=$(DIR_LIBRARY)
SETENV_01 = LD_LIBRARY_PATH=$(DIR_LIBRARY):%(LD_LIBRARY_PATH)
SETENV_02 = SHLIB_PATH=$(DIR_LIBRARY):%(SHLIB_PATH)
SETENV_03 = LIBPATH=$(DIR_LIBRARY):%(LIBPATH)
SETENV_04 = PATH=$(DIR_EXECUTABLE):%(PATH)
SETENV_05 = SNC_LIB=$(DIR_LIBRARY)$(DIR_SEP)libsapcrypto.so
SETENV_06 = SECUDIR=$(DIR_INSTANCE)$(DIR_SEP)sec

#-----------------------------------------------------------------------
# saprouter options
#-----------------------------------------------------------------------
LOGFILE=$(DIR_WORK)$(DIR_SEP)dev_saprouter
TRACEFILE=$(DIR_WORK)$(DIR_SEP)saprouter.trc
SAPROUTTAB=$(DIR_PROFILE)$(DIR_SEP)saprouttab
TRACELEVEL=1
SAPROUTERHOSTNAME=$(SAPLOCALHOSTFULL)
SAPROUTERPORT=3299
MAXNUMCLIENTS=2048
LOGFILESIZE=16777216
OUTGOING_IP=192.168.0.1
TIMEOUTWAIT=30000

#-----------------------------------------------------------------------
# Start saprouter
#-----------------------------------------------------------------------
_SR = sr.sap$(SAPSYSTEMNAME)_$(INSTANCE_NAME)
Execute_00 = local rm -f $(_SR)
Execute_01 = local ln -s -f $(DIR_EXECUTABLE)$(DIR_SEP)saprouter$(FT_EXE) $(_SR)
Start_Program_00 = local $(_SR) -r -G  $(LOGFILE) -J $(LOGFILESIZE) -C $(MAXNUMCLIENTS) -W $(TIMEOUTWAIT) -E -T $(TRACEFILE) -R $(SAPROUTTAB) -V $(TRACELEVEL) -H $(SAPROUTERHOSTNAME) -S $(SAPROUTERPORT) -I $(OUTGOING_IP)

Die saprouttab sieht entsprechend so aus:

# saprouttab
# Beispiel:
# erlaubt       von             nach            Service         Passwort
#
# P          147.204.2.5        1.1.1.1         3200
#
#
# Erlaubt alles - zum Testen
#
#P       *                 *            *
#
#Uebesericht SAPSERVs
#sapserv1 (194.117.106.129) connection via Internet VPN
#sapserv2 (194.39.131.34) connection via Internet SNC
#sapserv3 (147.204.2.5) for customers with connection to Germany
#sapserv4 (204.79.199.2) for customers in America
#sapserv5 (194.39.138.2) for customers with connection to Japan
#xsapserv6 (194.39.139.16) for customers in Australia and New Zealand
#sapserv7 (194.39.134.35) for customers in Asia
#

Das System wird ganz regulär per startsap / stopsap gestartet oder beendet. Die Logfiles des saprouters werden im Workverzeichnis abgelegt. Die saprouttab wird im Ordner /sapmnt/SR1/profile erwartet. Verantwortlich dafür sind die folgenden Parameter im Instanzprofil:

LOGFILE=$(DIR_WORK)$(DIR_SEP)dev_saprouter
TRACEFILE=$(DIR_WORK)$(DIR_SEP)saprouter.trc
SAPROUTTAB=$(DIR_PROFILE)$(DIR_SEP)saprouttab

Wenn das System erfolgreich gestartet wurde kann man eine entsprechende Abfrage per sapcontrol vornehmen:

sapserver:sr1adm 1> sapcontrol -nr 97 -function GetProcessList

25.02.2013 22:23:00
GetProcessList
OK
name, description, dispstatus, textstatus, starttime, elapsedtime, pid
saprouter, , GREEN, Running, 2013 02 25 08:53:19, 2743:29:41, 15663332
sapserver:sr1adm 2>

Ein Blick auf die Prozesse offenbart folgendes:

sr1adm  6553802        1   0   Oct 18      -  0:00 sapstart pf=/usr/sap/SR1/SYS/profile/SR1_W97_sapserver
  sr1adm 15663332  6553802   0   Oct 18      -  0:22 sr.sapsr1_W97 -r -G /usr/sap/SR1/W97/work/dev_saprouter -J 16777216 -C 2048 -W 30000 -E -T /usr/sap/SR1/W97/work/saprouter.trc -R /usr/sap/SR1/SYS/profile/saprouttab -V 1 -H sapserver.sapdomain -S 3299 -I 192.168.0.1

Das SAP System SR1 besteht also aus einem sapstartsrv Prozess für die sapcontrol Kommunikation/Steuerung sowie dem saprouter, der hier saplike gelinkt sr.sapsr1_W97 heißt. Das Format sieht ähnlich aus wie bei den Workprozessen und dürfte bekannt sein.

Um einige Sonderfunktionen des saprouters komfortabel nutzen zu können wurde noch zusätzlich ein Script erstellt um verschiedene Funktionen bereit zu stellen. Über das Script lässt sich die saprouttab neu einlesen ohne die Instanz neu starten zu müssen, es können die aktuell über den saprouter laufenden Verbindungen angezeigt werden und der Prozess (per stopsap/startsap) neu gestartet werden. Das Script liegt bei dieser Installation im Homeverzeichnis des <sid>adm Benutzers und sie wie folgt aus:

-rwxrwxr-x    4 sr1adm   sapsys          529 Feb 25 2013  StopSaprouter
lrwxrwxrwx    1 sr1adm   sapsys           30 Feb 25 2013  StartSaprouter -> /home/sr1adm/StopSaprouter
lrwxrwxrwx    1 sr1adm   sapsys           30 Feb 25 2013  ShowConnections -> /home/sr1adm/StopSaprouter
lrwxrwxrwx    1 sr1adm   sapsys           30 Feb 25 2013  ReloadSaprouttab -> /home/sr1adm/StopSaprouter

Das Script erkennt anhand des Namens mit dem es aufgerufen wurde die gewünschte Funktion, so kann man die Übergabe von Parametern obsolet machen:

#!/bin/bash
#Erweiterte saprouter Steuerung

MYNAME=$(basename $0)
DIRNAME=$(dirname $0)

if [ $(whoami) != "sr1adm" ]
    then
    echo "Bitte das Script $MYNAME als Benutzer sr1adm aufrufen!"
    exit 8
fi

case $MYNAME in
StartSaprouter)
    cd $HOME
    startsap
    ;;

StopSaprouter)
    stopsap
    ;;

ReloadSaprouttab)
    /usr/sap/SR1/W97/work/sr.sapSR1_W97 -n -H sapserver -S 3299 -I 192.168.0.1
    ;;

ShowConnections)
    usr/sap/SR1/W97/work/sr.sapSR1_W97 -l -H sapserver-S 3299 -I 192.168.0.1
    ;;

*)
    ;;
esac

 

About the author