8.3. Verwaltung der lokalen Systemkonfiguration mit Univention Configuration Registry#

Univention Configuration Registry ist das zentrale Werkzeug zur Verwaltung der lokalen Systemkonfiguration eines UCS-basierten Systems. Ein direktes Editieren der Konfigurationsdateien ist dabei in der Regel nicht nötig.

Einstellungen werden in einem Registrierungsmechanismus in einem einheitlichen Format festgelegt, den sogenannten Univention Configuration Registry-Variablen. Diese Variablen werden verwendet, um aus Konfigurationsdatei-Vorlagen (den sogenannten Univention Configuration Registry-Templates) die effektiv von den Diensten/Programmen verwendeten Konfigurationsdateien zu generieren.

Dieses Verfahren bietet eine Reihe von Vorteilen:

  • In der Regel müssen keine Konfigurationsdateien manuell editiert werden. Dies vermeidet Fehler durch ungültige Syntax von Konfigurationseinstellungen o.ä.

  • Es existiert ein einheitliches Interface zum Editieren der Einstellungen und die unterschiedlichen Syntaxformate der Konfigurationsdateien werden vor dem Administrator verborgen.

  • Die Einstellungen werden von der eigentlichen Konfigurationsdatei entkoppelt, d.h. wenn eine Software in einer neuen Version ein anderes Konfigurationsformat verwendet, wird einfach ein neues Template im neuen Format ausgeliefert anstatt eine aufwendige und fehlerträchtige Konvertierung der bestehenden Konfigurationsdatei vorzunehmen.

  • Die in einer durch Univention Configuration Registry verwalteten Konfigurationsdatei verwendeten Variablen werden intern zugeordnet. Das stellt sicher, dass beim Ändern einer UCR-Variable alle Konfigurationsdateien, auf die sich die veränderte Variable bezieht, neu erstellt werden.

Univention Configuration Registry-Variablen können auf der Kommandozeile über den Befehl univention-config-registry (Kurzform: ucr) oder über das UMC-Modul Univention Configuration Registry konfiguriert werden.

Da die meisten Pakete ihre Konfiguration über Univention Configuration Registry durchführen und bei der Installation entsprechende Grundeinstellungen eingerichtet werden, sind nach der Installation eines UCS-Systems bereits einige Hundert Univention Configuration Registry-Variablen gesetzt.

UCR-Variablen können auch effizient in Shell-Skripten verwendet werden, um auf Systemeinstellungen wie den Rechnernamen zuzugreifen.

Die Benennung der Variablen folgt einer baumartigen Struktur, wobei ein Schrägstrich als Trennzeichen von Namensbestandteilen verwendet wird. Beispielsweise handelt es sich bei allen mit ldap beginnenden Univention Configuration Registry-Variablen um Einstellungen, die den lokalen Verzeichnisdienst betreffen.

Zu den meisten Variablen ist eine Beschreibung hinterlegt, die die Verwendung und Funktion erläutert.

Wenn eine Konfigurationsdatei durch ein UCR-Template verwaltet wird und die gewünschte Einstellung nicht bereits durch eine vorhandene Variable abgedeckt ist, muss statt der Konfigurationsdatei das UCR-Template erweitert werden. Würde die Konfigurationsdatei direkt angepasst, würde bei der nächsten Neugenerierung der Datei - z.B. beim Setzen einer registrierten UCR-Variable - die lokale Anpassung wieder überschrieben. Die Anpassung von UCR-Templates ist in Anpassung von UCR-Templates beschrieben.

Ein Teil der über Univention Configuration Registry konfigurierten Einstellungen sind systemspezifisch (z.B. der Rechnername), viele Eigenschaften können jedoch auch auf mehrere Rechner angewendet werden. Mithilfe der Univention Configuration Registry-Richtlinie in den UMC-Modulen zur Domänenverwaltung können Variablen zusammengefasst und auf mehr als einen Rechner angewendet werden.

Die Auswertung der Univention Configuration Registry-Variablen auf einem UCS-System erfolgt vierstufig:

  • Als Erstes werden lokale Univention Configuration Registry-Variablen ausgewertet.

  • Die lokalen Variablen werden von Richtlinien-Variablen überstimmt, die aus dem Verzeichnisdienst bezogen werden

  • Die Option --schedule dient zum Setzen lokaler Variablen, die nur für einen gewissen Zeitraum gelten sollen. Diese Ebene der Univention Configuration Registry ist reserviert für lokale Einstellungen, die durch zeitgesteuerte Mechanismen in Univention Corporate Server automatisiert vorgenommen werden.

  • Durch Verwendung der Option --force beim Setzen einer lokalen Variable werden aus den Verzeichnisdienst übernommene Einstellung ebenso wie Variablen der Schedule-Ebene überstimmt und statt dessen der angegebene Wert für das lokale System festgelegt. Beispiel:

    $ univention-config-registry set --force mail/messagesizelimit=1000000
    

Wird eine Variable gesetzt, die durch eine übergeordnete Richtlinie überschrieben wird, erscheint eine Warnmeldung.

Die Verwendung der Univention Configuration Registry-Richtlinie ist in Richtlinienbasierte Konfiguration von UCR-Variablen dokumentiert.

8.3.1. Verwendung des Univention Management Console Moduls#

Über das UMC-Modul Univention Configuration Registry können die Variablen eines Systems angezeigt und verändert werden, außerdem besteht die Möglichkeit über Hinzufügen neue Variablen zu setzen.

Auf der Startseite wird eine Suchmaske angezeigt. Alle Variablen sind anhand einer Kategorie klassifiziert, etwa alle LDAP-bezogenen Einstellungen.

In der Suchmaske kann als Filter das Suchattribut angegeben werden, das sich auf den Variablennamen, den Wert oder die Beschreibung beziehen kann.

Nach erfolgter Suche werden die gefundenen Variablen in einer Tabelle angezeigt, dabei wird der Variablenname und der Wert angezeigt. Bewegt man den Mauszeiger auf den Variablennamen, wird eine weiterführende Beschreibung der Variable angezeigt.

Eine Variable kann mit einem Klick auf ihren Namen bearbeitet werden. Mit einem Rechts-Klick und der Auswahl von Löschen können Variablen gelöscht werden.

8.3.2. Verwendung des Kommandozeilenfrontends#

Das Kommandozeileninterface von Univention Configuration Registry wird über den Befehl univention-config-registry aufgerufen. Alternativ kann auch die Kurzform ucr verwendet werden.

8.3.2.1. Abfrage einer UCR-Variable#

get#

Eine einzelne Univention Configuration Registry-Variable kann mit dem Aufrufparameter get ausgelesen werden:

$ univention-config-registry get ldap/server/ip
dump#

Mit dem Aufrufparameter dump können auch alle aktuell gesetzten Variablen ausgegeben werden:

$ univention-config-registry dump

8.3.2.2. Setzen von UCR-Variablen#

set#

Mit dem Aufrufparameter set kann eine Variable gesetzt werden. Der Name der Variable kann frei gewählt werden, darf aber ausschließlich aus Buchstaben, Punkten, Zahlen, Binde- und Schrägstrichen bestehen.

$ univention-config-registry set VARIABLENNAME=WERT

Ist die Variable schon vorhanden, wird der Inhalt aktualisiert. Ansonsten wird ein neuer Eintrag angelegt.

Beim Setzen eines neuen Wertes für eine Univention Configuration Registry-Variable führt UCR Prüfungen durch, um die Kompatibilität des Wertes mit dem Variablentyp zu überprüfen. Im Falle einer Inkompatibilität zeigt UCR eine Warnmeldung an. Außerdem wird die Variable nicht auf den neuen Wert gesetzt, wenn die Univention Configuration Registry-Variable ucr/check/type auf true steht (Standard ist false). Wenn die Option --ignore-check verwendet wird, wird der Wert immer gesetzt, unabhängig von der Typ-Kompatibilität und der Einstellung von ucr/check/type.

Wenn sich eine Variable ändert, schreibt UCR sofort alle Konfigurationsdateien neu, für die die Variable registriert ist. UCR gibt die Pfade der aktualisierten Dateien auf der Konsole aus.

Dabei ist zu beachten, dass beim Setzen einer UCR-Variable zwar die Konfiguration eines Dienstes aktualisiert wird, der entsprechende Dienst aber nicht automatisch neu gestartet wird! Der Neustart muss manuell erfolgen.

Gleichzeitige Änderungen mehrerer Variablen in einer Befehlszeile sind möglich. Wenn sich diese auf ein- und dieselbe Konfigurationsdatei beziehen, wird diese nur einmal neu geschrieben.

$ univention-config-registry set \
  dns/forwarder1=192.0.2.2 \
  sshd/xforwarding="no" \
  sshd/port=2222

Auch ein bedingtes Setzen ist möglich. Soll z.B. ein Wert nur dann in einer Univention Configuration Registry-Variable gespeichert werden, wenn die Variable noch nicht vorhanden ist, kann dies durch ein Fragezeichen (?) statt des Gleichheitszeichens (=) beim Zuweisen des Wertes erreicht werden.

$ univention-config-registry set dns/forwarder1?192.0.2.2

8.3.2.3. Suche nach Variablen und gesetzten Werten#

Mit dem Parameter search kann nach einer Variable gesucht werden. Dieser Befehl sucht nach Variablennamen, welche die Zeichenkette nscd enthalten und gibt diese mit den aktuellen Belegungen aus:

$ univention-config-registry search nscd

Es kann alternativ auch nach gesetzten Variablen-Werten gesucht werden. Dieser Aufruf sucht nach allen Variablen, die auf primary.example.com gesetzt sind:

$ univention-config-registry search --value primary.example.com

Bei der Suche können auch Suchmuster in Form von regulären Ausdrücken verwendet werden. Das vollständige Format ist unter Regular expression operations in the Python 3 documentation dokumentiert.

8.3.2.4. Löschen von UCR-Variablen#

unset#

Mit dem Aufrufparameter unset kann eine Variable entfernt werden. Das folgende Beispiel löscht die Variable dns/forwarder2. Auch hier können mehrere zu löschende Variablen übergeben werden:

$ univention-config-registry unset dns/forwarder2

8.3.2.5. Neuerzeugung von Konfigurationsdateien aus ihrem Template#

commit#

Mit dem Aufrufparameter commit wird eine Konfigurationsdatei aus ihrem Template neu erzeugt. Der Name der Konfigurationsdatei ist als Parameter anzugeben, z.B.:

$ univention-config-registry commit /etc/samba/smb.conf

Da UCR-Templates beim Editieren von UCR-Variablen in der Regel automatisch neu erzeugt werden, wird dies vor allem für Tests verwendet.

Wird beim Aufruf von ucr commit kein Dateiname angegeben, werden sämtliche durch Univention Configuration Registry verwalteten Dateien neu aus den Vorlagen erzeugt. In der Regel sollte es allerdings nicht notwendig sein, alle Konfigurationsdateien neu zu erzeugen.

8.3.2.6. Übernahme von Variablen in Shell-Skripte#

shell#

Über den Aufrufparameter shell werden Univention Configuration Registry-Variablen und ihre aktuellen Belegungen in einem Format ausgegeben, das in Shell-Skripten verwendet werden kann.

$ univention-config-registry shell ldap/server/name

Dabei werden verschiedene Konvertierungen vorgenommen: Schrägstriche in Variablennamen werden durch Unterstriche ersetzt und in den Werten enthaltene Zeichen, die in Shell-Skripten eine besondere Bedeutung haben, werden durch Anführungszeichen geschützt.

Damit Univention Configuration Registry-Variablen als Umgebungsvariablen in einem Shell-Skript eingelesen werden, muss die Ausgabe von Univention Configuration Registry durch den Befehl eval ausgeführt werden:

# eval "$(univention-config-registry shell ldap/server/name)"
# echo "$ldap_server_name"
primary.firma.de

8.3.3. Richtlinienbasierte Konfiguration von UCR-Variablen#

Ein Teil der über Univention Configuration Registry konfigurierten Einstellungen sind systemspezifisch (z.B. der Rechnername), viele Eigenschaften können jedoch auch auf mehrere Rechner angewendet werden. Mithilfe der im UMC-Modul Richtlinien verwalteten Univention Configuration Registry-Richtlinie können Variablen zusammengefasst und auf mehr als einen Rechner angewendet werden.

Richtlinienbasierte Konfiguration der Webserver Startseite mit forciertem HTTPS

Abb. 8.6 Richtlinienbasierte Konfiguration der Webserver Startseite mit forciertem HTTPS#

Zuerst muss für die anzulegende Richtlinie ein Name gesetzt werden, unter dem die Variablen später einzelnen Rechner-Objekten zugewiesen werden können.

Außerdem muss mindestens eine Variable konfiguriert und ein Wert zugewiesen werden.

Diese Richtlinie kann dann einem Rechner-Objekt oder einem Container/OU zugewiesen werden (siehe Zuweisung von Richtlinien). Es ist zu beachten, dass die Auswertung der konfigurierten Werte gegenüber den übrigen Richtlinien abweicht: Die Werte werden nicht direkt auf die Rechner übertragen, sondern durch Univention Directory Policy auf den zugewiesenen Rechner geschrieben. Das dabei verwendete Zeitintervall wird durch die Univention Configuration Registry Variable ldap/policy/cron konfiguriert und erfolgt standardmäßig stündlich.

8.3.4. Anpassung von UCR-Templates#

Ein Univention Configuration Registry-Template ist im einfachsten Fall eine Kopie der ursprünglichen Konfigurationsdatei, in der die Stellen, an denen der Wert einer Variable verwendet werden soll, eine Referenz auf den Variablennamen enthalten.

Für komplexere Szenarien kann auch Inline-Python-Code integriert werden, der dann auch komplexere Konstrukte wie etwa bedingte Abfragen erlaubt.

Bemerkung

Univention Configuration Registry-Templates sind in den entsprechenden UCS-Software-Paketen als Konfigurationsdateien enthalten. Bei der Aktualisierung von Paketen wird überprüft, ob Änderungen an Konfigurationsdateien vorgenommen wurden.

Wenn Konfigurationsdateien nicht mehr im Auslieferungszustand vorliegen, werden diese nicht überschrieben. Stattdessen wird eine neue Version im selben Verzeichnis mit der Endung .debian.dpkg-new abgelegt.

Sollen Änderungen an Univention Configuration Registry-Templates vorgenommen werden, werden diese Templates bei der Aktualisierung ebenfalls nicht überschrieben und im selben Verzeichnis mit der Endung .dpkg-new oder .dpkg-dist abgelegt. Entsprechenden Hinweise werden in die Log-Datei /var/log/univention/updater.log geschrieben. Dies tritt nur auf, wenn UCR-Templates lokal angepasst werden.

Die UCR-Templates werden im Verzeichnis /etc/univention/templates/files/ abgelegt. Der Pfad zu den Vorlagen entspricht dem absoluten Pfad zu der Konfigurationsdatei mit vorangestelltem Pfad zum Vorlagenverzeichnis. So findet sich zum Beispiel die Vorlage für die Konfigurationsdatei /etc/issue unter /etc/univention/templates/files/etc/issue.

Damit Konfigurationsdateien von Univention Configuration Registry korrekt verarbeitet werden können, müssen sie im UNIX-Format vorliegen. Werden Konfigurationsdateien z.B. unter DOS oder Windows bearbeitet, werden Steuerzeichen zur Kennzeichnung des Zeilenumbruchs eingefügt, die die Verwendung der Datei durch Univention Configuration Registry stören.

8.3.4.1. Referenzierung von UCR-Variablen in Templates#

Im einfachsten Fall kann eine UCR-Variable im Template direkt referenziert werden. Als Platzhalter dient der Variablenname, der von der Zeichenkette @%@ eingefasst wird. Als Beispiel die Option für die Aktivierung von X11-Forwarding in der Konfigurationsdatei /etc/ssh/sshd_config des OpenSSH-Servers:

X11Forwarding @%@sshd/xforwarding@%@

Neu eingefügte Referenzen auf UCR-Variablen werden automatisch von Templates ausgewertet, eine zusätzliche Registrierung ist nur bei der Verwendung von Inline-Python-Code nötig (siehe Integration von Inline-Python-Code in Templates).

8.3.4.2. Integration von Inline-Python-Code in Templates#

In UCR-Templates kann beliebiger Python-Code eingebettet werden, in dem ein von der Zeichenkette @!@ eingefasster Codeblock eingefügt wird. Mit solchen Blöcken können z.B. bedingte Abfragen umgesetzt werden, so dass beim Ändern eines Parameters über eine Variable weitere abhängige Einstellungen automatisch in die Konfigurationsdatei aufgenommen werden. Folgende Code-Sequenz konfiguriert beispielsweise Netzwerk-Einstellungen anhand der Univention Configuration Registry-Einstellungen:

@!@
if configRegistry.get('apache2/ssl/certificate'):
    print('SSLCertificateFile %s' %
        configRegistry['apache2/ssl/certificate'])
@!@

Alle mit der print-Funktion ausgegebenen Daten werden dabei in die generierte Konfigurationsdatei geschrieben. Die in Univention Configuration Registry gespeicherten Daten können über das ConfigRegistry-Objekt abgefragt werden, z.B.:

@!@
if configRegistry.get('version/version') and \
        configRegistry.get('version/patchlevel'):
    print('UCS %(version/version)s-%(version/patchlevel)s' %
        configRegistry)
@!@

Im Gegensatz zu direkt referenzierten UCR-Variablen (siehe Referenzierung von UCR-Variablen in Templates) müssen Variablen, auf die in Inline-Python-Code zugegriffen wird, explizit registriert werden.

Die in Konfigurationsdateien verwendeten Univention Configuration Registry-Variablen werden unterhalb des Verzeichnisses /etc/univention/templates/info/ in info-Dateien registriert, die in der Regel nach dem Paketnamen mit der Dateiendung .info benannt werden. Wird neuer Python-Code in die Vorlagen eingefügt oder bestehender Code so verändert, dass er zusätzliche oder andere Variablen nutzt, so muss einer der bestehenden .info-Dateien modifiziert oder eine neue hinzugefügt werden.

Nach der Änderung von .info-Dateien muss der Befehl ucr update aufgerufen werden.