Im folgenden Tutorial soll Schritt-für-Schritt erklärt werden, wie man unter Linux die OpenSource Datenbank von SAP installiert und ganz nebenbei auch noch mit PHP auf die darin abgelegten Daten zugreifen kann. Als Grundlage für diese Anleitung wird vorausgesetzt, dass ein gängiges Linux-System bereits vorinstalliert ist. Dieses Tutorial wurde von mir unter SuSE 7.1 mit Kernel 2.4 erprobt. Sofern nicht anders angegeben, wurden alle Installationsarbeiten als Benutzer "root" durchgeführt.
Homepage: www.sapdb.org
Homepage: www.apache.org
Datei: http://httpd.apache.org/dist/httpd/apache_1.3.20.tar.gz
Homepage: www.php.net
Datei: http://www.php3.de/distributions/php-4.0.5.tar.gz
Homepage: http://www.openssl.org
Datei: http://www.openssl.org/source/openssl-0.9.6a.tar.gz
Homepage: http://www.modssl.org
Datei: http://www.modssl.org/source/mod_ssl-2.8.4-1.3.20.tar.gz
rpm -i sapdb-ind-7.3.0.8-1.i386.rpmWas ist nun alles passiert? Im Verzeichnis /opt/sapdb findet man nun die installierten Dateien. Ausserdem wurde im System der Benutzer "sapdb" angelegt, der standardmässig das Passwort "sapdb" hat. Aus Sicherheitsgründen sollte dies am Ende der Installation geändert werden.rpm -i sapdb-srv-7.3.0.8-1.i386.rpm
rpm -i sapdb-web-7.3.0.8-1.i386.rpm
rpm -i sapdb-testdb-7.3.0.8-1.i386.rpm
rpm -i sapdb-callif.7.3.0.8-1.i386.rpm
SuSE Benutzer sollten folgende Zeile in der Datei /etc/rc.config ergänzen:
START_SAPDB=yesNachdem die Zeile eingefügt wurde, muss das System mit dem Befehl
SuSEconfigaktualisiert werden.
Nun müssen noch einige symbolische Links gesetzt werden, damit die Datenbank auch gestartet werden kann.
cd /etc/init.dDurch die S-Links wird sichergestellt, dass die Datenbank in den Runlevels 2 (Terminalmodus) und 3 (Grafikmodus) gestartet wird. Die K-Links sorgen dafür, dass die Datenbank beim herunterfahren des Systems "ordentlich" beendet wird.ln -s ../init.d/sapdb rc2.d/S45sapdb
ln -s ../init.d/sapdb rc2.d/K45sapdb
ln -s ../init.d/sapdb rc3.d/S45sapdb
ln -s ../init.d/sapdb rc3.d/K45sapdb
SAPDBROOT=/opt/sapdbSoviel zur Konfiguration der Bash - weiter gehts mit dem Test des Datenbankservers. Starten Sie die Datenbank mit dem BefehlPATH=$PATH:$SAPDBROOT/indep_prog/bin
. /opt/sapdb/indep_prog/demo/FirstSteps/sapdbenv.sh >/dev/null
export LD_LIBRARY_PATH=/opt/sapdb/web/lib
Wenn es keine Probleme gab, antwortet der Server nun mit "Starting sapdb services: INFO 10004: Vserver started". Sollte diese Meldung nicht erscheinen, überprüfen Sie die Schritte 3 und 4./etc/init.d/sapdb start
Die folgenden Schritte führen Sie bitte als Benutzer "sapdb" aus:
cd /opt/sapdb/indep_prog/demo/FirststepsMit etwas Glück führt das System nun ein Skript aus, an dessen Ende die Datenbank TST innerhalb der SAP-DB angelegt wurde.. sapdbenv.sh
cd /opt/sapdb/testdb
./create_demo_db.sh
Folgende Probleme sind dem Verfasser bekannt:
Sollte der Server manuell problemlos starten, muss Schritt 3 für
Ihr Linux-Distribution möglicherweise etwas tiefergehend angepasst
werden.
rpm -e --force sapdb-srv-7.3.0.8-1.i386.rpm
rpm -e --force sapdb-ind-7.3.0.8-1.i386.rpm
rpm -e --force sapdb-testdb-7.3.0.8-1.i386.rpm
rpm -e --force sapdb-callif-7.3.0.8-1.i386.rpm
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dbm,dbm db_cold
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dbm,dbm db_warm
Mit diesem Aufruf wird die Datenbank TST gestartet. Da für gewöhnlich nicht irgendein Datenbankbenutzer die Datenbank an- und ausschalten kann, muss mit dem Parameter -u ein Benutzername ("dbm") nebst Passwort (auch "dbm") angegeben werden. Der Befehlsaufruf endet anschliessend mit der Bestimmung des Datenbankstatus. Zuerst wird die Datenbank auf "kalt" gesetzt - anschliessend auf warm. Im "warm"-Level ist die Datenbank für normale Benutzer zugänglich, d.h. produktiv.
Vorsicht: Beachten Sie unbedingt das der Benutzername und das Passwort nur durch ein Komma voneinander getrennt sind. Anführungszeichen, Leerzeichen oder sonstige Trennungen sind hier nicht angebracht und führen zu Fehlern. Ausserdem hat sich im "start_testdb.sh" Skript von SAP eine merkwürdige Eigenheit eingeschlichen. Die TST-Datenbank wird nach dem Aufruf des Startskripts nur auf "db_cold" gesetzt. Die Datenbank kann so nicht benutzt werden - sie muss erst mit dem zweiten Befehl in diesem Schritt auf "db_warm" gesetzt werden.
Um die Datenbank beim hochfahren des Rechners automatisch zu starten, können Sie die beiden Befehle ganz leicht in das Start-Stop-Skript der SAP-DB integrieren. Ergänzen Sie dazu einfach die folgenden Zeilen in der Datei /etc/init.d/sapdb:
RETVAL=1
case "$1" in
start)
echo -n "Starting sapdb services: "
if [ ! -z "$X_SERVER" ]; then
$X_SERVER start
RETVAL=0fi
touch /var/lock/subsys/sapdb# Fügen Sie die folgenden beiden Zeilen ein
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dbm,dbm db_cold
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dmb,dmb db_warm
;;
stop)
echo -n "Shutting down sapdb services: "
if [ ! -z "$X_SERVER" ]; then# Fügen Sie die folgenden beiden Zeilen ebenfalls ein
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dmb,dmb db_cold
/opt/sapdb/indep_prog/bin/dbmcli -d TST -u dmb,dmb db_offline -immediate
# Achtung! Durch den Parameter -immediate werden alle laufenden Transaktionen abgebrochen.
# Dies wird deshalb gemacht, da dieser Teil des Skripts immer nur beim herunterfahren des Systems
# aufgerufen wird. D.h., das Betriebssystem wartet nicht(!) darauf, dass die SAP-DB von sich aus
# fertig wird. Es ist also besser, im Notfall eine Transaktion zu verlieren als Schaeden an der
# gesamten Datenbank in Kauf zu nehmen.$X_SERVER stop
RETVAL=0
fi
rm -f /var/lock/subsys/sapdb
;;
status)
[...]
cd /opt/sapdb/web/pgm/ wahttp&Im Terminal sollte nun eine Liste von Prozessen durchlaufen - und das ist auch gut so. Sobald die Prozessliste zum Stillstand gekommen ist, können Sie mit einem normalen Browser auf Port 9999 Ihres Linux-Rechners zugreifen. Probieren Sie nun die folgenden URLs aus:
http://<Linuxrechnername>:9999/webdbmDie erste URL führt Sie zur Administrationsoberfläche der SAP-DB. Hier können Sie untergeordnete Datenbanken (wie z.B. TST) per Mausklick starten und stoppen, neue Datenbanken anlegen, usw. Bevor Sie vollen Zugriff auf die Möglichkeiten des Webinterfaces bekommen, müssen Sie sich zunächst als Datenbankadministrator einloggen. Als Benutzername verwenden Sie bitte "dba" und als Passwort ebenfalls "dba". Diese Benutzer wurden von der Installationsroutine standardmässig eingerichtet und sollten nach Abschluss des Tutorials geändert werden. Sollte der Login mit diesen Daten nicht funktionieren, probieren Sie einfach mal als Benutzernamen "dbm" und als Passwort ebenfalls "dbm".http://<Linuxrechnername>:9999/websql
http://<Linuxrechnername>:9999/websqlBevor Sie mit der Arbeit beginnen können, müssen Sie sich natürlich abermals einloggen. Als Datenbankname nehmen Sie "TST", als Benutzername "dba" und als Passwort geben Sie "dba" an.
create table customer ( cust_id fixed(4) key , name char(12), firstname char(12) )
insert into customer values (1,'Ditze','Andreas')In der Datenbank sind nun zwei Datensätze eingetragen - und können über den Befehlinsert into customer values (2,'Walter','Andreas')
select * from customerangezeigt werden. Sollte bis hierhin alles geglückt sein, werden wir uns nun dem Thema Apache und PHP widmen.
mkdir /usr/src/lapsWas haben diese Befehle bewirkt? Zunächst wurden zwei Verzeichnisse angelegt, nämlichs laps (Linux-Apache-PHP-SAPDB) und laps/tarballs (Tarballs ist das Verzeichnis, in dem die .tar.gz Pakete aufbewahrt werden). Anschliessend wurden die in Schritt 1 heruntergeladenen Softwarepakete in das "tarballs" Verzeichnis verschoben. Achten Sie darauf, dass Sie, bevor Sie die vier "mv" Befehle eingeben, sich auch in dem Verzeichnis befinden, in dem die Dateien abgelegt wurden.mkdir /usr/src/laps/tarballs
mv apache_1.3.20.tar.gz /usr/src/laps/tarballs
mv mod_ssl-2.8.4-1.3.20.tar.gz /usr/src/laps/tarballs
mv openssl-0.9.6a.tar.gz /usr/src/laps/tarballs
mv php-4.0.5.tar.gz /usr/src/laps/tarballs
cd /usr/src/laps
tar -xzf tarballs/openssl-0.9.6a.tar.gz
tar -xzf tarballs/php-4.0.5.tar.gz
tar -xzf tarballs/mod_ssl-2.8.4-1.3.20.tar.gz
tar -xzf apache_1.3.20.tar.gz
cd /usr/src/laps/openssl-0.9.6aSollten alle Befehle korrekt abgearbeitet worden sein, sollte das Open-SSL Modul nun im Verzeichnis /usr/local/openssl/0.9.6a zu finden sein. Um spätere Updates dieses Moduls nicht unnötig zu erschweren, wurde das Verzeichnis /usr/local/openssl/0.9.6a mit dem Verzeichnis /usr/local/openssl/current verbunden. Dies ist deshalb sinnvoll, weil alle Programme, die auf Open-SSL zugreifen, anschliessend so konfiguriert werden, dass sie das Open-SSL Modul im "current" Verzeichnis suchen. Sollte also irgendwann mal eine neuere Version vom Open-SSL ins System integriert werden, muss lediglich der soeben angelegt symbolische Link aufgelöst und durch einen neuen Link (zur aktualisierten Open-SSL Version) ersetzt werden../config --prefix=/usr/local/openssl/0.9.6a
make
make test
make install
ln -s /usr/local/openssl/0.9.6a /usr/local/openssl/current
cd /usr/src/laps/mod_ssl-2.8.4-1.3.20Achten Sie bei der Eingabe des "./configure"-Befehls darauf, das der komplette Befehlsaufruf in einem Stück abgegeben werden muss. Auch sind die Leerzeichen penibel einzuhalten. Ergänzen Sie keine Leerzeichen und lassen Sie auch keine weg - der Compiler ist in dieser Beziehung alles andere als Tolerant../configure --with-apache=../apache_1.3.20 --with-ssl=../openssl-0.9.6a --prefix=/usr/local/apache/1.3.20 --datadir=/usr/local/apache/htdocs --enable-module=so --enable-shared=max --enable-module=ssl
cd /usr/src/laps/apache_1.3.20make
make certificate TYPE=customDer Make-Befehl fragt nun nach den Informationen, die Ihr Zertifikat tragen soll - tragen Sie hier Ihre(!) Daten ein:
Signature Algorithm: RNun wird das "eigentliche" Zertifikat des Webservers erstellt:Country Name: "DE"
State or Province: "Hessen"
Localty Name: "Giessen"
Organization Name: "Fachhochschule Giessen-Friedberg"
Organizational Unit Name: "TR-CA"
Common Name: "Technische Redaktion-CA"
Email Address: "andreas.ditze@gmx.de"
Certificate Validity: "365"
Certificate Version: 3
Country Name: "DE"Der Zertifikatserstellungsprozess ist nun fast geschafft - es fehlt nur noch die Angabe des Namens, unter dem der Rechner später über SSL erreichbar sein soll:State or Province: "Hessen"
Localty Name: "Giessen"
Organization Name: "Fachhochschule Giessen-Friedberg"
Organizational Unit Name: "Technische Redaktion"
Common Name: "rechnername.mni.fh-giessen.de"Zum Schluss muss nun noch festgelegt werden, ob das CA- und das Webserverzertifikat lokal verschlüsselt werden soll - oder nicht. Die Unterschiede sind schnell erklärt. Sind die Files verschlüsselt, muss bei jedem Neustart des Apache ein Passwort eingegeben werden, bevor SSL-Verschlüsselungen möglich sind. Bei nicht verschlüsselten Passwörtern entfällt dies. Ein Produktionssystem sollte natürlich "eigentlich" mit verschlüsselten Passwörtern arbeiten - wer jedoch den Administrationsaufwand gering halten will (oder muss), wird wahrscheinlich die unverschlüsselte Variante wählen.Email Address: "andreas.ditze@gmx.de"
Certificate Validity: "365"
Certificate Version: 3
make installWie in Schritt 10 bereits erläutert, wird auch der Apache "symbolisch verlinkt" mit dem "/usr/local/apache/current" Verzeichnis. In diesem Fall hat es den sehr handfesten Vorteil, dass alle Einträge in der httpd.conf Datei (der zentralen Konfigurationsdatei des Apache) nur auf das "current"-Verzeichnis verweisen. Dadurch wird sichergestellt, dass neuere Versionen des Apache jederzeit eingesetzt werden können - und die "alte" Konfigurationsdatei weiterhin vewendet werden kann. Um für etwas Übersicht im System zu sorgen, wird anschliessend die Konfigurationsdatei als symbolischer Link im /etc Verzeichnis hinterlegt - dort sollten sich bekanntermaßen alle wichtigen Dateien dieser Art befinden.
ln -s /usr/local/apache/1.3.20 /usr/local/apache/currentNachdem Sie das alles hinter sich gebracht haben, sollten Sie erstmal eine kleine Pause einlegen, bevor wir uns gleich dem Thema PHP widmen.ln -s /usr/local/apache/current/httpd.conf /etc/httpd.conf
cd /usr/src/laps/php-4.0.5Wie bereits in Schritt 11 erwähnt, habe ich mich auch diesmal darum bemüht, meiner Ansicht nach überflüssige Features gar nicht erst in den PHP Kernel zu integrieren. Dies zeigt sich insbesondere in der expliziten Anweisung den mysql Support auszusparen. Einzige Ausnahme stelllt in diesem Fall der FTP Support dar, den zwar sicherlich nicht jeder SAP-DB-PHP-Entwickler benötigt - ich jedoch wollte ihn mir für mein System offenhalten../configure --with-apxs=/usr/local/apache/current/bin/apxs --with-ftp --enable-versioning --enable-tracking-vars=yes --enable-url-includes --enable-sysvshm=yes --enable-sysvsem=yes --with-config-file-path=/etc --without-mysql --with-sapdb=/opt/sapdb/interface/odbc
make
make installcp /usr/src/laps/php-4.0.5/php.ini-dist /etc/php.ini
chmod 700 /usr/local/apache/current/bin/apachectlWie unter Schritt 3 schon einmal beschrieben, werden nun einige symbolische Links erzeugt, um den Server beim Hochfahren des Systems automatisch zu starten.
ln -s /usr/local/apache/current/bin/apachectl /etc/rc.d/init.d/apachectlBenutzer von SuSE-Distributionen sollten nun folgende Links anlegen:
Benutzer von RedHat-Distributionen sollten hingegen diese Links benutzen:cd /etc/init.d/rc2.d
ln -s ../apachectl S20apachectl
ln -s ../apachectl K20apachectl
cd /etc/init.d/rc3.d
ln -s ../apachectl S20apachectl
ln -s ../apachectl K20apachectl
Sollte auf diesem System schonmal ein Apache-Webserver installiert gewesen sein, versichern Sie sich, dass er nicht versehentlich ein zweites Mal gestartet wird. Schauen Sie dazu einfach mal in die Verzeichnisse rc2.d und rc3.d herein und suchen nach symbolischen Links, die neben den eben angelegten ebenfalls den Apache aufrufen (z.B. "S20apache oder K20apache"). Sollten Sie solche Links gefunden haben, löschen Sie sie mit dem Befehlcd /etc/init.d/rc2.d
ln -s ../apachectl S20apachectl
cd /etc/init.d/rc3.d
ln -s ../apachectl S20apachectl
cd /etc/init.d/rc5.d
ln -s ../apachectl S20apachectl
cd /etc/init.d/rc0.d
ln -s ../apachectl K20apachectl
cd /etc/init.d/rc6.d
ln -s ../apachectl K20apachectl
rm S20apacherm K20apache
start)Nun ersetzen Sie die Zeile
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: httpd (pid $PID) already running"
continue
fi
if $HTTPD ; then
echo "$0 $ARG: httpd started"
else
echo "$0 $ARG: httpd could not be started"
ERROR=3
fi
;;
$HTTPD ; thendurch den Aufruf
if $HTTPD -DSSL; thenNun wird der SSL-Server standardmässig gestartet - womit nun eigentlich fast alles erreicht wurde.
#AddType application/x-httpd-php .phpund entfernen Sie das Kommentarzeichen ("#"). Falls Sie planen, den Apache in absehbarer Zeit einem Update zu unterziehen, sollten Sie die Gelegenheit nutzen und alle Verzeichnisangaben von "/usr/local/apache/1.3.20" auf "/usr/local/apache/current" umzustellen.
user nobodyErsetzen Sie den Eintrag "user nobody" durch den Eintrag
group nogroup
user sapdbZum Hintergrund dieser Umstellung: Als "User" muss ein im System vorhandener Benutzer angegeben werden, der zumindest ein eigenes Heimatverzeichnis (/home/<username>) besitzt. In diesem Heimatverzeichnis muss sich die Datei ".odbc.ini" finden, die im nächsten Schritt angelegt wird. Unter sicherheitskritischen Aspekten ist diese Umstellung nicht ganz unbedenklich und in einer Produktionsumgebung sind an dieser Stelle sicherlich zusätzliche Sicherungsschritte notwendig.
[saptest]ServerDB = TST
ServerNode = localhost
Driver = /opt/sapdb/interfaces/odbc/lib/libsqlod.so
Description = Die SAP-DB Testdatenbank
/etc/init.d/apachectl startSollte es dabei zu keinen Problemen kommen, können Sie nun Ihr SAP System testen. Legen Sie dazu die Datei /usr/local/apache/htdocs/test.php mit folgendem Inhalt an:
<?Rufen Sie nun die Seite "test.php" in Ihrem Browser auf:echo "<b>Die Verbindung zur Datenbank wird aufgebaut.</b>";
$conn = odbc_connect("saptest","dba","dba") or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
echo "<br>Verbindung wurde hergestellt<br><br>";
echo "Lese Benutzertabelle aus Datenbank aus...<br>";
$result = odbc_do($conn,"select * from users");
odbc_result_all($result);
echo "<br>Lese Testtabelle aus...<br>";
$result = odbc_do($conn,"select * from customer");
odbc_result_all($result);
odbc_close($conn);
echo "<br><b>Verbindung abgebaut</b>";
?>
http://<Linuxrechnername>/test.phpWenn Sie nun die unter Schritt 8 angelegten Daten sehen, haben Sie es geschafft.
Zurück
zur Startseite
Diese Seite wurde seit dem 25.6.2001 Mal
aufgerufen.