Bug 21705 - bdbrecover Funktion in /etc/init.d/slapd unzuverlässig
Summary: bdbrecover Funktion in /etc/init.d/slapd unzuverlässig
Status: CLOSED FIXED
Alias: None
Product: UCS
Classification: Unclassified
Component: LDAP
Version: UCS 2.4
Hardware: Other Linux
: P5 enhancement
Target Milestone: UCS 3.0 - MS1
Assignee: Arvid Requate
QA Contact: Stefan Gohmann
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-03-03 10:31 CET by Arvid Requate
Modified: 2011-12-13 15:49 CET (History)
3 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):
Customer ID:
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arvid Requate univentionstaff 2011-03-03 10:31:35 CET
In /etc/init.d/slapd wird seit UCS 2.3-0 überprüft, gegen welche BDB-Version ldap/back_bdb.so gebaut ist, um dynamisch zu ermitteln, mit welcher bdbX.Y_recover Version die BDB-Dateien des LDAP Datenbank-Backends geprüft werden sollen. Bei BDB-Updates ist diese dynamische Anpassung wohl noch nicht ausreichend, da das db_recover nicht gestartet wird, wenn die Versionen nicht zueinander passen (weil db4.7_recover in einem Test ein 4.2 Environment in einen defekten Zustand gebracht hatte).

Es sollte überprüft werden, ob ein Aufruf von dbX.Y_upgrade diese Lücke schließen kann (entweder in slapd.postinst oder in init.d/slapd).


+++ This bug was initially created as a clone of Bug #16193 +++

Es sollte geprüft werden, ob diese Meldungen aus der updater.log ein Problem
darstellen:

Setting up slapd (2.4.15-1.1.19.200910291738) ...

  Backing up /etc/ldap/slapd.conf in
/var/backups/slapd-2.3.30-8.42.200907081544... done.
  Upgrading BDB 'checkpoint' options... .
  Moving old database directories to /var/backups:
  - directory dc=auto,dc=update,dc=test... done.
  Loading from /var/backups/slapd-2.3.30-8.42.200907081544:
  - directory dc=auto,dc=update,dc=test... done.
  - chowning database directory (openldap:openldap)... done
Check database: db_recover: Program version 4.2 doesn't match environment
version
done
  Starting ldap server(s): slapd.
Setting up univention-ldap-config (5.0.7-1.331.200909301131) ...
Restarting ldap server(s):
  Stopping ldap server(s): slapd.
  Check database: db_recover: Program version 4.2 doesn't match environment
version
db_recover: Ignoring log file: log.0000000002: unsupported log version 14
db_recover: Invalid log file: log.0000000002: Invalid argument
db_recover: PANIC: Invalid argument
db_recover: PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
db_recover: DB_ENV->open: DB_RUNRECOVERY: Fatal error, run database recovery
done
  Starting ldap server(s): slapd.
Comment 1 Arvid Requate univentionstaff 2011-03-03 16:06:03 CET
Laut einschlägiger OpenLDAP-Literatur sollte db_upgrade niemals auf die bdb-Dateien des slapd angewendet werden. Ausserdem sollte beim Update auf UCS 2.3-0 (slapd 2.4.15-1.1.30.200911301011) in pre/postinst über die Funktion database_format_changed ein slapcat/move_incompatible_databases_away/slapadd durchgeführt worden sein, und somit die BDB-Dateien des LDAP Datenbank-Backends mit der neuen BDB-Library Version erzeugt worden sein. Sonst wäre das den Debian-Maintainern wohl auch schon früher mal aufgefallen..
Comment 2 Arvid Requate univentionstaff 2011-03-10 11:41:24 CET
Der Versionstest in der bdbrecover Funktion in /etc/init.d/slapd funktioniert nicht zuverlässig, weil die /var/lib/univention-ldap/ldap/log.* Dateien nicht immer verfügbar sind. Die Meldung
---------------------------------------------------------------------------
 Check database: od: /var/lib/univention-ldap/ldap/log.*: No such file or directory
 /var/lib/univention-ldap/ldap BDB Version does not seem to match the one back-bdb uses
 Skipping /usr/bin/db4.7_recover to avoid damage
---------------------------------------------------------------------------
ist nicht kritisch, aber auch nicht schön, weil dann das db4.7_recover nicht ausgeführt wird.

Gut wäre wohl, statt des aktuellen Tests der log.* Dateien ein dbX.Y_stat mit der Version X.Y aufzurufen, gegen die das OpenLDAP Backend (back_bdb.so) gebaut ist:

 db4.6_stat -e -h /var/lib/univention-ldap/ldap/ | grep -q 'Environment version'

Nur wenn das exit status != 0 liefert (und auf stderr "Program version X.Y doesn't match environment version"), dann sollte man von einem dbX.Y_recover absehen. Sonst sollte man dbX.Y_recover ausführen.

Hinweis: Wenn man die falsche db_recover Version auf eine BDB anwendet, dann hinterlässt es im BDB-Environment log.*-Dateien, die auf die Version X.Y passen, aber mit denen die alte BDB-Version nicht klarkommt. Dann startet slapd nicht. Workaround: log.* Dateien löschen.
Comment 3 Arvid Requate univentionstaff 2011-05-16 19:01:48 CEST
Ist jetzt bei der Bearbeitung von Bug 22468 mit umgesetzt.
Comment 4 Stefan Gohmann univentionstaff 2011-08-15 09:12:46 CEST
Wie besprochen, es macht vermutlich mehr Sinn, wenn wir die Dependency auf die db-utils direkt hinzufügen, da so der Nutzen für den Administrator nicht klar wird.
Comment 5 Arvid Requate univentionstaff 2011-08-15 14:55:29 CEST
Das Binärpaket slapd zieht jetzt db4.8-util.
Comment 6 Stefan Gohmann univentionstaff 2011-08-15 16:02:24 CEST
OK
Comment 7 Sönke Schwardt-Krummrich univentionstaff 2011-12-13 15:49:31 CET
UCS 3.0-0 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer
neueren Version von UCS erneut auftreten, so sollte dieser Bug dupliziert
werden: "Clone This Bug"