LDAP Schema installieren, wo?

join
ldap
schema

#1

Moin,
bislang installieren wir bei unseren Produkten die LDAP-Schema Dateien im Join Script. Es scheint aber auch den Weg zu geben, dass im postinst Skript zu machen.

Wir haben in der Developer-Reference nachgesehen:

In Kapitel 4.2 wird das Join-Script beschrieben:
http://docs.software-univention.de/developer-reference-4.2.html#settings:ldapschema

In Kapitel 6.2 wird der Postinst weg gewählt.
http://docs.software-univention.de/developer-reference-4.2.html#udm:ea

Zustäzlich kann man auch ACL und Schma “in eins” oder nacheinander installieren.

Beispiel für Schema und ACL “in eins” installieren (im Join):

ucs_registerLDAPExtension "$@" \
 --schema ${SHARE}/ldap-integration.schema \
 --acl    ${SHARE}/ldap-integration.acl

Gibt es Vor- und Nachteile bei den verschiedenen Wegen?

Uns fallen auf Anhieb ein, das man das Join-Script im Fehlerfall noch einmal ausführen kann, während beim Postinst die Installation des Paketes fehlschlägt.

Gruß
Sven


#2

Huhu,

Nicht nur das erneute Ausführen ist wichtig. Zum Zeitpunkt, zu dem ein postinst-Script ausgeführt wird, ist auch nicht sichergestellt, dass das System in einem konsistenten Zustand ist & der LDAP-Server läuft (z.B. während Release-Upgrades), oder dass der LDAP-Server überhaupt schon provisioniert ist (z.B. wenn bei der Grundinstallation eines DC Backups noch nicht in die Domäne gejoint wurde).

Gruß
mosu


#3

Hallo Sven,

@Moritz_Bunkus hat vollkommen recht:
ein LDAP-Schemata sollten immer in einem Joinscript via ucs_registerLDAPExtension registriert werden, weil

  • man auf Nicht-Domaincontroller-Master-Systemen Credentials zum Registrieren im LDAP benötigt, die im postinst nicht zur Verfügung stehen,
  • zum Zeitpunkt der Paketinstallation das UCS-System ggf. noch gar nicht gejoined ist und daher auch kein Vertrauenskontext mit der Domäne existiert,
  • die Registrierung auch mal schiefgehen kann und dann für den Anwender leicht erneut ausgeführt werden können sollte.

[Edit]Die Credentials werden im Joinscript über das "$@" an das ucs_registerLDAPExtension übergeben. Das ist im postinst-Skript nicht der Fall. Will man jetzt die Registrierung auf einem UCS-Domaincontroller-Master so weit wie möglich automatisieren, kann man die Zeile call_joinscript 50myjoinscript.inst in das postinst-Skript mit aufnehmen. Diese führt auf dem Domaincontroller Master das Joinscript direkt aus, weil hier keine Credentials benötigt werden.

Das im Handbuch erwähnte ucs_registerLDAPSchema funktioniert ausschließlich auf dem UCS-Domaincontroller-Master, das wird im Handbuch leider nicht explizit erwähnt.[/Edit] Insofern ist deine Frage sehr wertvoll, ich werde die Doku gleich mal dahingehend anpassen.

Bzgl. Schema und ACL “in eins” registrieren:
Wenn du es mit einem Befehl machst, dann kümmert sich der Befehl selbständig um die Reihenfolge, d.h. es werden erst die Schemata und dann erst die ACLs registriert, falls die ACLs die neuen Schemata verwenden. Solltest du es mit 2 Befehlen machen, musst du selbst auf die Reihenfolge achten.
Ansonsten sind mir gerade keine Unterschiede bekannt. Zeitlich sollte das beides im gleichen Rahmen liegen, da bei beiden Varianten die Datei ins LDAP geschrieben und dann die neue Config auf dem Master getestet wird, bevor die jeweilige Datei aktiviert wird.

Viele Grüße

Sönke

[Edit: Nochmal genauer auf den Unterschied von ucs_registerLDAPSchema und ucs_registerLDAPExtension eingegangen]