# IBM DB2 Installation für Gentoo

## aZZe

Hallo!

Wie vielleicht schon einige gesehen haben, beschäftige ich mich mit der IBM DB2 Datenbank. Da ich diese DB auch unter Gentoo nutzen möchte und viele Probleme mit der Installation hatten, da die IBM sich via rpm Paketmanager installiert und dieser nunmal nicht Standard ist bei Gentoo (Gott sei gelobt  :Wink: ), habe ich mir gedacht ich schreibe hier ein HOWTO wie man die aktuelle IBM DB2 V8.2 ans laufen bekommt. Es gibt zwar hier einige Hinweise, Tips und Tricks und auch Links z.B. zur IBM Seite, diese sind aber nicht vollständig. 

Step by step:

Wir benötigen zur Installation den rpm Paketmanager, ob wir wollen oder nicht:

```
emerge rpm
```

Danach müssen wir den gesamten Inhalt von der CD in ein Verzeichnis auf der Festplatte kopieren, da wir gleich noch ein paar Scripte abändern müssen und das geht nun auf einer gebrannten CD schlecht  :Wink: 

Da Gentoo ja keine rpm Distri ist wirds auch schwierig mit dem Auflösen der Abhängigkeiten. Da sich aber alle nötigen Pakete auf der CD befinden bzw. nachher in unserem Ordner auf unserer Festplatte können wir die Pakete mittels der Option "--nodeps" installieren. 

Wenn wir also den gesamten Inhalt der CD in z.B. /home/tux/DB2 installiert haben bitte ins folgende Verzeichnis wechseln: 

```
cd /home/tux/DB2/db2/linux
```

Dort befindet sich das Install Script "db2_install". Dieses ist dafür verantwortlich die rpms zu installieren und die Abhängigkeiten zu prüfen. Hier muss nun folgende Zeile gefunden werden:

```
 # Install packages

    if [ ! "${DB2PKGLIST?}" = "" ]; then

        RPMEXTN="-8.1.0-0.i386.rpm"

        for pkg in ${DB2PKGLIST?}; do

            echo "   ${pkg?}..."

            rpm -ivh  ${INSTDEV?}/${pkg?}${RPMEXTN?} 2>&1 \  <--- die hier!!

            | tee -a ${DB2INSTLOG?}

            if [ $? -ne 0 ]

            then

                StopProg 1

            fi

        done

    fi

```

Diese Sektion muss nun ergänzt werden durch die Option "--nodeps":

```

 # Install packages

    if [ ! "${DB2PKGLIST?}" = "" ]; then

        RPMEXTN="-8.1.0-0.i386.rpm"

        for pkg in ${DB2PKGLIST?}; do

            echo "   ${pkg?}..."

            rpm --nodeps -ivh  ${INSTDEV?}/${pkg?}${RPMEXTN?} 2>&1 \

            | tee -a ${DB2INSTLOG?}

            if [ $? -ne 0 ]

            then

                StopProg 1

            fi

        done

    fi

```

Nun sind wir in der Lage das eigentliche Install Skript im Ordner /home/tux/DB2 auszuführen. Dieses Skript hat den gleichen Namen wie das, das wir gerade geändert haben. Dieses ist das Haupt Installations Skript womit man die verschiedenen Server wie Enterprise Server Application Server etc. auswählen kann. Nach Bestätigung des gewählten Servers ruft dieses Skript das Skript auf, was wir gerade geändert haben, um die rpms zu installieren.

In diesem Ordner befindet sich auch das Installationsscript "db2setup" für die grafische Installation mittels Java. Dieses Script hat so wirklich noch keiner ans laufen gebracht und kann daher gerne ignoriert werden. Sollte hier jemand erfolgreich sein gibts von der IBM ein Geschenk  :Wink: 

Nun müssen drei Benutzer angelegt werden, die die DB2 benötigt. Einen User "db2inst1" für die Instanz, um mit der Datenbank arbeiten zu können, einen fenc Benutzer "db2fenc1" für Sicherheitsmechanismen und einen Benutzer "db2as" für den Verwaltungsserver. Alle drei Benutzer benötigen aber auch eigene Gruppen, die jeweils auch ihre primäre Gruppe sein müssen. 

Die Gruppe users darf nicht primäre Gruppe dieser Benutzer sein!!!

```

groupadd db2iadm1 #Gruppe für User db2inst1
```

```
groupadd db2fadm1 #Gruppe für User db2fenc1
```

```
groupadd db2asgrp #Gruppe für User db2as
```

Nun werden die einzelnen User mit ihren Gruppen angelegt:

```
useradd -m db2inst1 -g db2iadm1
```

```
useradd -m db2fenc1 -g db2fadm1
```

```
useradd -m db2as -g db2asgrp
```

Nun muss eine Instanz und ein Verwaltungsserver angelegt werden. Hier müssen nun unter Gentoo und vielleicht auch anderen Distris alle Skripte in /opt/IBM/db2/V8.1/instance angefasst werden in denen ein "tail" aufgerufen wird. Welche das sind kann man leicht mit grep herausfinden:

```
 grep -ir tail* db2*  
```

Die Skripte rufen tail z.B. mit der Syntax "tail +2" auf. Da neuere tail Versionen von gentoo damit nicht klar kommen muss jedes tail ein "-n" enthalten. Wenn also z.B. wie im Skript db2iutil folgende Zeile steht:

```
fsname=`awk '{print $NF}' ${TMPFILE3?} | tail -1
```

muss diese abgeändert werden in:

```
fsname=`awk '{print $NF}' ${TMPFILE3?} | tail -n -1
```

Und so muss jede Zeile in allen Skripten im Verzeichnis instance abgeändert werden, die ein tail enthält. Bevor wir die Instanz und den Verwaltungsserver nun anlegen, sollte man an dieser Stelle nun das Fixpack7 einspielen, da man ansonsten bei bestehender Instanz und Verwaltungsserver diese auch noch updaten muss, was ein bischen viel Arbeit ist und da wir ja faul sind updaten wir von Anfang an.  :Wink:  Das Fixpack7 Codename "Stinger" upgradet die DB2 8.1 zur Version 8.2. (Besteht dennoch Interesse bezüglich eines nachträglichem Updates bitte eben posten.)

Das Update verläuft nun genauso wie die Installation der DB2 selbst. Ich denke ich muss hier nicht weiter darauf eingehen. Im Anschluss können wir nun unsere Instanz anlegen:

```
/opt/IBM/db2/V8.1/instance/db2icrt -u db2fenc1 db2inst1
```

Lässt man den db2fenc1 user hier weg verzichtet man auf die Sicherheitsmechanismen für diese Instanz. Dies sähe analog dazu so aus:

```
/opt/IBM/db2/V8.1/instance/db2icrt -u db2inst1 db2inst1
```

Nun noch der Verwaltungsserver:

```
/opt/IBM/db2/V8.1/instance/dascrt -u db2as
```

Nun meldet man sich als Benutzer db2inst1 an. Nur dieser Benutzer kann die DB2 starten, db2 Befehle ausführen und die DB2 weider stoppen. 

Den Verwaltungsserver kann nur der db2as Benutzer starten und stoppen. Dieser wird benötigt um Client-Server Verbindungen herzustellen.

Ich hoffe hier für ein wenig Klarheit verholfen zu haben und wünsche viel Spass bei der Arbeit.

aZZe

----------

## dakjo

Gratulation   :Very Happy: 

----------

## andreask

Hi! 

Vielen Dank, das hatte ich in der nächsten Zeit auch mal vor. Bisher hatte ich DB2 nur unter RedHat laufen. Ich hatte auch schonmal nach Anleitungen gesucht und bin auf folgende gestoßen (kennst Du vermutlich schon...):

http://www-106.ibm.com/developerworks/db2/library/techarticle/dm-0403wright/?ca=dnl-db2mag

http://kjeldahl.net/db2/

Zusammen mit Deiner Anleitung sollte ich es jetzt ja hinbekommen können  :Wink: 

Allerdings hatte ich gehofft dass ich um rpm herum komme. Ich dachte, evtl. könnte man mit Hilfe von rpm2tgz und ein bisschen Handarbeit ein tbz2 Paket erstellen, welches die Abhängigkeiten aus dem RPM für portage "übersetzt"? 

Aber bisher haben alle Anleitungen einfach rpm mit --nodeps" verwendet, scheint also der schlauere Weg zu sein.  Aber was ist, wenn es tatsächlich Abhängigkeiten von irgendwelchen libs gibt, die nicht oder in falscher Version vorhanden sind? Kann man nicht irgendwie an die Abhängigkeiten  aus dem RPM kommen so dass man diese ggfs. manuell nachinstallieren kann?

Jedenfalls vielen Dank für die Anleitung!

----------

## andreask

Ein paar (leider etwas veraltete) Infos gibt es auch im LDP: http://www.tldp.org/HOWTO/DB2-HOWTO/

Aber wie es aussieht soll sich dies bald ändern:

 *Quote:*   

> # DB2 For Linux HOWTO
> 
> Ian Hakes talked to Dan Scott about the DB2 For Linux HOWTO who allowed him to take over the DB2 for Linux Howto, with basically a full re-write to cover DB2's latest release V8.2 on up-to-date enterprise and personal Linux distributions (RHEL 3, SLES 8, SLES 9, along with Red Hat 8, Fedora Core 2, SuSE Pro 9.1, and possibly Mandrake 10, Gentoo and maybe even Debian). This effort was started by another writer, Rory Hinton, who had to drop off the project, so Ian would be taking primary responsibility for the document, which is about 60% complete.
> 
> 

  (Quelle: http://www.tldp.org/ldpwn/20040915.html#tldp-world-news)

AFAIK geht es hier um folgendes HOWTO: http://www.julieandian.com/writing/82howto/db2LinuxHowToV8_definitive_5.pdf

(nur um hier mal ein paar Infos zusammenzutragen  :Wink: )

----------

## andreask

Wie man von Apache/PHP auf eine IBM DB2 zugreift wird hier erklärt: 

http://www-106.ibm.com/developerworks/db2/library/techarticle/scott/0614_scott.html

IBM DB2 ist durchaus interessant, man kann sie natürlich um sonst zum Testen/Entwickeln installieren, und eine kommerzielle Lizenz kostet nicht viel mehr als eine kommerzielle MySQL-Lizenz.

----------

## aZZe

 *andreask wrote:*   

> 
> 
> IBM DB2 ist durchaus interessant, man kann sie natürlich um sonst zum Testen/Entwickeln installieren, und eine kommerzielle Lizenz kostet nicht viel mehr als eine kommerzielle MySQL-Lizenz.

 

Genau!  :Wink:  Die DB2 bietet zudem eine Menge mehr Features. Es lassen sich auch richtig schöne Cluster mit der DB2 bauen.   :Cool: 

----------

## andreask

Hab noch ein paar Links gefunden:

DB2 Installation:

http://iedb.org/db2/db2-install.txt

http://howtos.linux.com/howtos/DB2-HOWTO/gentoo.shtml

http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0403wright/?ca=dnl-db2mag

http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/readme_linux.txt

PHP-Anbindung:

http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0505furlong/

http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0502scott/?ca=dgr-phpw08PHPdatabaseApps

http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0507hutchison/

http://www-306.ibm.com/software/data/info/zendcore/?ca=dti-tile

http://www.zend.com/pecl/tutorials/sdo.php

Allerdings ist das alles sehr, sehr umständlich. Wie es aussieht hat lediglich Zend mit seinem Zend Core for IBM einen fertigen DB2-Client, allerdings nur "zertifiziert" für RHEL und SLES, außerdem sind es binäre pakete, vermutlich rpms.  Außerdem kostet das vermutlich was - wenn ich auch keine Angaben dazu finden konnte.

Aber auch das behebt ja nur den einen Teil des Problems, den Server zu installieren ist immer noch so kompliziert. Gibt es da denn keine Bestrebungen das mal etwas zu vereinfachen? Oder könnte man aus dem RPM nicht irgendwie ein binäres Paket für Portage machen? Wäre cool wenn man ein Script hätte, welches aus archiv von IBM ein binäres Paket für Portage machen könnte - aber wie?

edit: also mit Debian kann man wohl einfach ein .deb aus einem .rpm machen: http://lists.debian.org/debian-user-german/2004/06/msg00082.html

----------

## psyqil

 *andreask wrote:*   

> Oder könnte man aus dem RPM nicht irgendwie ein binäres Paket für Portage machen?

 Hau rein:

```
*  app-arch/rpm2targz

      Latest version available: 9.0-r3

      Latest version installed: 9.0-r2

      Size of downloaded files: 2 kB

      Homepage:    http://www.slackware.com/config/packages.php

      Description: Convert a .rpm file to a .tar.gz archive

      License:     as-is
```

----------

## andreask

Ja, Dank Debian bin ich auch auf 

```
*  app-arch/alien

      Latest version available: 8.53

      Latest version installed: [ Not Installed ]

      Size of downloaded files: 83 kB

      Homepage:    http://kitenet.net/programs/alien/

      Description: Converts between the rpm, dpkg, stampede slp, and slackware tgz file formats

      License:     LGPL-2.1

```

gestoßen. Allerdings habe ich keine Ahnung davon, es gibt anscheinend Möglichkeiten RPMs in DEBs (für Debian) und TGZs (für Slackware) zu verwandeln. Aber was hat man davon? Die Datei hat ne andere Endung und ich kann es immer noch nicht emergen  :Wink: 

Was ist denn nötig um aus einem RPM, DEB oder TGZ ein Portage-kompatibles TBZ2 Paket zu erhalten? Ich kenne das nur dass so ein Paket per emerge erzeugt wird. Aber wie funktioniert das wenn ich bereits bestehende binaries/libraries in einem Archiv habe? Gibts dazu irgendwo irgendeine nette Dokumentation? Was das binäre Paket-Format für Gentoo angeht finde ich da doch recht wenig. 

Oder müsste man ein wildes ebuild schreiben das alle möglichen binären Dateien durch die Gegend kopiert?

----------

## psyqil

 *andreask wrote:*   

> Oder müsste man ein wildes ebuild schreiben das alle möglichen binären Dateien durch die Gegend kopiert?

 Nun, es müßte nicht notwendigerweise wild sein, es sollte auch nicht alle möglichen Binärdateien durch die Gegend kopieren, sondern nur die aus dem Archiv dahin, wo sie hingehören, aber prinzipiell hast Du völlig recht!  :Mr. Green: 

----------

## andreask

übrigens wurde DB2 jetzt auch für Ubuntu von IBM zertifiziert: http://www.ubuntulinux.org/newsitems/db2cert

Und Ubuntu erscheint tatsächlich als zertifizierte Distribution bei IBM: http://ibm.com/db2/linux/validate/

Und dann war ich ja fast geschockt, IBM verlinkt von der Ubuntu Seite auf das DB2 Universal Database Version 8.2 for Linux HOWTO unter tldp.org, und da gab es in den letzten Wochen und Monaten einige Updates, denn inzwischen gibt es in dem HOWTO auch ein Kapitel: Installing DB2 Version 8.2 on Gentoo!

Und bei der Gelegenheit habe ich direkt noch eine weitere Anleitung für nicht-RPM Distributionen gefunden:

http://www.scotdb.com/downloads/DB2V8SpecialInstall.pdf

----------

## andreask

Seit heute gibt es auch eine freie Variante: DB2 Express-C

Ist wohl wie die normale Express-Version, aber beschränkt auf max. 2 x86 Dual-Core Prozessoren und 4 GB Ram.

Download: http://www-306.ibm.com/software/data/db2/udb/db2express/download.html

Forum: http://www-128.ibm.com/developerworks/forums/dw_forum.jsp?forum=805&cat=19

Lizenz: ftp://ftp.software.ibm.com/software/data/db2/udb/db2express/exp_LI_en

Hat jemand vielleicht schon ein ebuild parat? Jedenfalls könnte man doch jetzt noch ein nettes ebuild wie für die neue, freie Oracle Version schreiben und die dann nach Möglichkeit in Portage übernehmen, oder?

Was haltet Ihr davon?

Grüße

Andreas

----------

