[RHEL/Derivate] Ersatz der mitgelieferten RPMs

Dieses Howto bezieht sich auf RHEL Linux und entsprechende Derivate (Fedora, CentOS, …). Das Howto wird auf einem CentOS 5 System (x86 (i386)) durchgeführt.

Shellbefehle die mit einem Sharpzeichen (#) beginnen, sind als root User einzugeben. Alternativ kann auch mit dem “sudo”-Befehl gearbeitet werden. Das Howto arbeitet mit dem Paketverwaltungstool “yum”. Theoretisch kann es auch “zu Fuss” mit “rpm” durchgeführt werden. Viele Wege führen nach Rom… :wink:


Problemstellung:
RHEL sowie die RH nahen Derivate bringen bereits fertige PostgreSQL Binärpakete mit sich. Diese Pakete sind jedoch i. d. R. schon älter und es werden nur Sicherheitsupdates eingepflegt. Das hat zur Folge, dass Funktionen von neuen Versionen nicht verfügbar sind. Dieses Howto beschreibt, wie man die mitgelieferten Pakete durch Pakete des PostgreSQL Projektes ersetzt. Ziel ist es, die Paketverwaltung durch das Systemeigenetool “yum” durchzuführen.

Achtung! Durch die Verwendung von neuen Versionen auf Produktversionen kann man sich neuen Funktionen auch noch nicht gelöste Probleme (Bugs) einfangen. Die Verwendung ist also nur für erfahrene Anwender gedacht! Ebenfalls kann der Anspruch auf Hilfe bei Supportanfragen bei Verwendung von externen Paketen erlöschen! Dies sollte bei bestehenden Verträgen vorher geklärt werden.


Vorarbeiten:
Sollte bereits eine ältere Version des PostgreSQL Datenbankserver installiert sein, so muss diese zuerst entfernt werden. Die Schritte zum erstellen einer Sicherung sind im PostgreSQL Handbuch beschrieben.

Wenn das System rein mit den mitgelieferten Paketverwaltungstool arbeitet, kann der Datenbankserver einfach entfernt werden.

# yum remove postgresql*

Nach einer Prüfung der Abhängigkeitsliste kann der Datenbankserver gelöscht werden. Sollten dadurch noch benötige Pakete ebenfalls gelöscht werden müssen ggf. die entsprechenden Pakete einzeln entfernt werden.


Einbinden des PostgreSQL Repos und Installation:
Im ersten Schritt müssen wir verhindern, dass in Zukunft PostgreSQL Pakete über die Server der entsprechenden Distribution kommen. Hierzu muss die Konfiguration der Repos entsprechend angepasst werden. Diese Dateien liegen im Verzeichnis /etc/yum.repos.d. Folgende Datei(en) müssen angepasst werden:

  • RHEL: /etc/yum/pluginconf.d/rhnplugin.conf, Sektion [main]
  • CentOS: CentOS-Base.repo, Sektion [base] und [updates]
  • Fedora: fedora.repo und fedora-updates.repo, Sektion [fedora]

Um nun PostgreSQL hier auszuschließen muss lediglich am Ende der oben angegebenen Sektionen folgende Zeile eingefügt werden:

exclude=postgresql*

Um die Repo-Daten in das System einzubinden, gibt es ein fertiges RPM-Paket das diese Aufgabe für uns erledigt. Diese Dateien können hier heruntergeladen werden und müssen im System eingespielt werden. Je nach Distribution und gewünschter PostgreSQL-Version ist ein anderes Paket notwendig! In meinem Beispiel verwende ich CentOS mit PostgreSQL 8.3.

# wget http://yum.pgsqlrpms.org/reporpms/8.3/pgdg-centos-8.3-1.noarch.rpm
# rpm -ihv pgdg-centos-8.3-1.noarch.rpm
# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Media.repo  pgdg-83-centos.repo

In der Datei pgdg-83-centos.repo sind die Repo-Definitionen für PostgreSQL 8.3 auf CentOS enthalten.

Anschließend kann geprüft werden, ob die neuen Pakete verfügbar sind:

# yum list postgresql*
Loading "installonlyn" plugin
Setting up repositories
Reading repository metadata in from local files
Excluding Packages from CentOS-5 - Base
Finished
Excluding Packages from CentOS-5 - Updates
Finished
Available Packages
postgresql.i686                          8.3.0-2PGDG.rhel5      pgdg83
postgresql-contrib.i686                  8.3.0-2PGDG.rhel5      pgdg83
postgresql-debuginfo.i686                8.3.0-2PGDG.rhel5      pgdg83
postgresql-devel.i686                    8.3.0-2PGDG.rhel5      pgdg83
postgresql-docs.i686                     8.3.0-2PGDG.rhel5      pgdg83
postgresql-jdbc.i686                     8.3.603-1PGDG.rhel5    pgdg83
postgresql-jdbc-debuginfo.i686           8.3.603-1PGDG.rhel5    pgdg83
postgresql-libs.i686                     8.3.0-2PGDG.rhel5      pgdg83
postgresql-odbc.i686                     08.03.0100-1PGDG.rhel5 pgdg83
postgresql-odbc-debuginfo.i686           08.03.0100-1PGDG.rhel5 pgdg83
postgresql-plperl.i686                   8.3.0-2PGDG.rhel5      pgdg83
postgresql-plpython.i686                 8.3.0-2PGDG.rhel5      pgdg83
postgresql-pltcl.i686                    8.3.0-2PGDG.rhel5      pgdg83
postgresql-python.i686                   3.8.1-7PGDG.rhel5      pgdg83
postgresql-python-debuginfo.i686         3.8.1-7PGDG.rhel5      pgdg83
postgresql-server.i686                   8.3.0-2PGDG.rhel5      pgdg83
postgresql-tcl.i686                      1.6.2-1PGDG.rhel5      pgdg83
postgresql-tcl-debuginfo.i686            1.6.2-1PGDG.rhel5      pgdg83
postgresql-test.i686                     8.3.0-2PGDG.rhel5      pgdg83

Die Installation verläuft jetzt wie bei jeden anderen Paket auch:

# yum install postgresql-server postgresql
...

Benötigte Abhängigkeiten werden aufgelöst und die Pakete in das System eingespielt.

Nun ist ein “nakter” PostgreSQL Server vorhanden. Ein neues Datenbankcluster kann mit initdb erstellt werden und wenn nötig kann der Backupdump anschließend eingelesen werden. Dieser Vorgang ist im PostgreSQL Handbuch beschrieben.

Achtung! Der Pfad zum data-Verzeichnis lautet bei RHEL Systemen /var/lib/pgsql/data/!


Weitere Links:
PG Yum Projekt: PostgreSQL RPM Repository (with Yum)
RPM Chart: PostgreSQL RPM Repository (with Yum)

Die Webseite hat sich geändert. Folgende URLs sind aktuell:

Viel Erfolg.