Bug 27874 - update von postgres-8.3 auf postgresql-8.4
update von postgres-8.3 auf postgresql-8.4
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: PostgreSQL
UCS 3.0
Other Linux
: P5 normal (vote)
: UCS 3.1
Assigned To: Felix Botner
Janek Walkenhorst
: interim-2
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2012-07-11 11:39 CEST by Felix Botner
Modified: 2012-12-12 21:08 CET (History)
4 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Felix Botner univentionstaff 2012-07-11 11:39:58 CEST

    
Comment 1 Felix Botner univentionstaff 2012-07-11 12:06:29 CEST
Das sollte einmal getestet/beschrieben werden.

Bei der Installation von postgresql-8.4 (auf einem von 2.4 aktualisiertem System mit postgres-8.3) wird keine cluster für 8.4 angelegt. Das postinst Script sowie die pg_* Tools gehen wohl davon aus, dass es noch keine Konfig für diese Version gibt:

-> /usr/bin/pg_createcluster -u postgres 8.4 main
Error: cluster configuration already exists

Im postinst wird der cluster nur angelegt, wenn

if [ ! -d "/etc/postgresql/$VERSION" ] || \
   [ -z "$(ls /etc/postgresql/$VERSION)" ] || \
   [ -z "$(ls /etc/postgresql/$VERSION/*/postgresql.conf 2>/dev/null)" ]; then

Das führt dann dazu, das kein cluser für 8.4 angelegt wird.

Dann wird postgres gestartet

/etc/init.d/postgresql start
Starting PostgreSQL 8.3 database server: main.
Starting PostgreSQL 8.4 database server: mainError: /var/lib/postgresql/8.4/main is not accessible or does not exist ... failed!
 failed!

Dabei werden alle Versionen geprüft und gestartet (richtig gestartet wird nur die Version, in deren /etc/postgresql/VERSION/main/start.conf "auto" steht). Aber der fehlende Cluster führt eben zum einem Fehler.

Wenn man vor der Installation von postgresql-8.4 die pg_hba.conf, pg_ident.conf und postgresql.conf aus /etc/postgresql/8.4/main/ klappt es.

Dann wird nach der Installtion immer noch 8.3 gestartet. Man kann dann mit 

-> pg_upgradecluster 8.3 main

den cluster aktualisieren (auf 8.4) und anschließend wird nur noch 8.4 gestartet.
Comment 2 Janek Walkenhorst univentionstaff 2012-07-17 12:08:55 CEST
Getestet im Rahmen von Bug #26100:

Nach dem Update von 2.4 auf 3.0 ist, wenn die pkgdb installiert war, postgresql-8.3 installiert.

Eine nachträgliche Installation von postgresql-8.4 funktioniert nicht:

postgresql-8.4 (8.4.10-0.8.201201111543) wird eingerichtet ...
Starting PostgreSQL 8.4 database server: mainError: /var/lib/postgresql/8.4/main is not accessible or does not exist ... failed!
 failed!
invoke-rc.d: initscript postgresql, action "start" failed.
dpkg: Fehler beim Bearbeiten von postgresql-8.4 (--configure):
 Unterprozess installiertes post-installation-Skript gab den Fehlerwert 1 zurück

Dies liegt daran, dass univention-postgresql schon Konfiguration unter /etc/postgresql/8.4/main mitbringt, aber der dort referenzierte Cluster (/var/lib/postgresql/8.4/main) nicht existiert.

Als Workaround kann die Konfiguration gelöscht werden:
 rm -r /etc/postgresql/8.4/
und dann das Paket installiert werden:
 univention-install postgresql-8.4
Dabei wird dann ein neuer Cluster angelegt.
Danach kann die Konfiguration wieder aus dem Template generiert werden:
 ucr commit /etc/postgresql/8.4/main/*

Da vom Template der gleiche Port für 8.3 und 8.4 vergeben wird startet der 8.4 Server nicht:

# invoke-rc.d postgresql restart
Restarting PostgreSQL 8.3 database server: main.
Restarting PostgreSQL 8.4 database server: mainError: Port conflict: another instance is already running on /var/run/postgresql with port 5432 ... failed!
 failed!
invoke-rc.d: initscript postgresql, action "restart" failed.

Das muss manuell in den /etc/postgresql/*/*/postgresql.conf angepasst werden. (Die automatisch bei der postgresql-8.4 Installation erstellte Konfiguration hat hier 5433 (==5432+1))

Dann starten und laufen beide Versionen gleichzeitig:
# invoke-rc.d postgresql restart
Restarting PostgreSQL 8.3 database server: main.
Restarting PostgreSQL 8.4 database server: main.
# netstat -4tlpn|grep postgres
tcp      0      0   0.0.0.0:5432   0.0.0.0:*      LISTEN   5753/postgres
tcp      0      0   0.0.0.0:5433   0.0.0.0:*      LISTEN   5802/postgres

Alternativ kann über die /etc/postgresql/*/*/start.conf gesteuert werden welcher Cluster startet.



Zur Lösung könnte univention-postgresql:
 * die Konfigurationsdateien nur für installierte PostgreSQL-Versionen erzeugen
 * die Ports ohne Konflikte vergeben
Alternativ könnte univention-postgresql:
 * durch Paketabhängigkeiten dafür sorgen dass immer nur eine (univention-)postgresql-Version installiert ist.
Oder es könnte:
 * die zu startende Version per UCR auswählbar machen und dies über die /etc/postgresql/*/*/start.conf umsetzen
Comment 3 Felix Botner univentionstaff 2012-10-10 15:58:33 CEST
Ich habe einen Artikel mit einer Update Anleitung in der SDB erstellt. 

Univention Corporate Server (UCS)-> Installation -> Aktualisierung von PostgreSQL 
8.3 auf PostgreSQL 8.4

Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet werden.
Comment 4 Janek Walkenhorst univentionstaff 2012-10-19 15:05:52 CEST
(In reply to comment #3)
> Ich habe einen Artikel mit einer Update Anleitung in der SDB erstellt. 
> 
> Univention Corporate Server (UCS)-> Installation -> Aktualisierung von
> PostgreSQL 
> 8.3 auf PostgreSQL 8.4
Der Artikel sieht gut aus, die Anleitung funktioniert.

> Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet
> werden.
Kann freigeschaltet werden.
Comment 5 Janek Walkenhorst univentionstaff 2012-10-19 15:10:56 CEST
(In reply to comment #4)
> (In reply to comment #3)
> > Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet
> > werden.
> Kann freigeschaltet werden.
http://sdb.univention.de/content/2/208/de/aktualisierung-von-postgresql-83-auf-postgresql-84.html
Comment 6 Stefan Gohmann univentionstaff 2012-12-12 21:08:11 CET
UCS 3.1-0 has been released: 
 http://forum.univention.de/viewtopic.php?f=54&t=2125

If this error occurs again, please use "Clone This Bug".