\section{\ucsUCR{} in selbst erstellten Paketen}

In dem Verzeichnis mit den Paketquellen muss ein
Unterverzeichnis mit dem Namen \emph{conffiles} erzeugt werden, in das die
gewünschten Konfigurationsdateien mit etwaigen Unterverzeichnissen
kopiert werden. Soll beispielsweise die
Datei \ucsURL{/etc/ldap/slapd.conf} durch \ucsUCR{}
verwaltet werden, kopiert man sie nach \ucsURL{conffiles/etc/ldap/slapd.conf}.

Nun können Platzhalter für die Variablen und eventuell notwendiger
Python-Code in die Konfigurationsdateien unterhalb von \emph{conffiles}
integriert werden.

In jedem Fall können Defaultwerte für die durch das jeweilige
Binärpaket verwendeten Variablen in \ucsURL{debian/postinst}
bzw. \ucsURL{debian/<binärpaket>.postinst} durch bedingtes Setzen (siehe
Kapitel~\ref{neue_baseconfig}) vergeben werden.

In den Abschnitt \emph{install} der \ucsName{debian/rules}-Datei muss die Zeile

\begin{ucsConfigFile}
univention-install-config-registry
\end{ucsConfigFile}

eingefügt werden, damit \ucsUCR{} beim Erzeugen des
Paketes mit einbezogen wird.

Zusätzlich muss die Datei \ucsName{debian/control} angepasst, 
das Quellpaket um eine Abhängigkeit auf \ucsName{univention-config-dev} und
alle \ucsUCR{} nutzenden Binärpakete um eine Abhängigkeit auf
\ucsName{\ucsUCRb{}} erweitert werden.

Außerdem muss für jedes Binärpaket eine Datei mit dem Namen
\ucsURL{debian/<binärpaket>.\ucsUCRb{}} angelegt werden, in der
angegeben ist, welche Dateien und Skripte durch \ucsUCR{}
verwaltet werden sollen und welche Variablen in diesen enthalten sind.

Die Syntax der Datei ist wie in den folgenden Beispielen ersichtlich:

\begin{itemize}

\item Zwei Konfigurationsdateien und die in ihnen verwendeten Variablen.
Die Zuordnung von Variablen zu Dateien kann entfallen, wenn kein
Python-Code in der entsprechenden Konfigurationsdatei verwendet wird.

\begin{ucsConsoleInput}
# cat univention-dhcp.info
Type: file
File: etc/dhcp3/dhcpd.conf
Variables: ldap/base
Variables: dhcpd/ldap/base
Variables: ldap/server/name
Variables: dhcpd/enable

Type: file
File: etc/init.d/dhcp3-server
\end{ucsConsoleInput}

\item  Neben Konfigurationsdateien können auch Skripte in \ucsUCR{}
integriert werden. Diese Skripte können ausgeführt werden, wenn
bestimmte Variablen gesetzt werden. Mit Paketen installierte Skripte werden unter 
\ucsURL{/etc/univention/templates/scripts} abgelegt. Weitere Skripte,
die einzeln erstellt und nachträglich mit \ucsUCR{}
registriert werden sollen, müssen ebenfalls in das Verzeichnis kopiert
werden. Außerdem müssen zusätzliche Skripte in die
\ucsUCR{"=Info"=Dateien} eingetragen werden. Sie müssen  ausführbar sein
und ebenfalls in das Verzeichnis conffiles kopiert werden.

Im folgenden Beispiel wird bei Änderung der Werte der Variablen \emph{interfaces/eth0/address}
oder \emph{interfaces/eth0/network} das Skript \ucsURL{interfaces.sh} ausgeführt:

\begin{ucsConfigFile}
Type: script
Script: interfaces.sh
Variables: interfaces/eth0/address
Variables: interfaces/eth0/network
\end{ucsConfigFile}

\item Das folgende Beispiel zeigt eine Datei (Multifile), die aus
mehreren Einzeldateien (Subfile) zusammengesetzt wird, wenn der Wert
einer Variable geändert wird. Auf diese Art und Weise können
verschiedene Pakete einzelne Teile einer Konfigurationsdatei
mitbringen, die so zusammengefügt werden.

\begin{ucsConfigFile}
Type: multifile
Multifile: etc/ldap/slapd.conf

Type: subfile
Multifile: etc/ldap/slapd.conf
Subfile: etc/ldap/slapd.conf.d/10schema-core
Variables: ldap/base

Type: subfile
Multifile: etc/ldap/slapd.conf
Subfile: etc/ldap/slapd.conf.d/20acl
Variables: ldap/base
\end{ucsConfigFile}

\end{itemize}

Um eine Konfigurationsdatei aus mehreren Templates zu generieren, muss ein
Multifile-Template erzeugt werden. Hierbei wird ein Verzeichnis
angelegt, dessen Name aus dem Template"=Namen und der Endung \emph{.d}
gebildet wird. In diesem Verzeichnis können nun mehrere Teil-Templates
angelegt werden.

Die Dateinamen dieser Teil-Templates müssen mit zweistelligen Ziffern
beginnen, welche die Reihenfolge vorgeben, in der die Teile
ausgewertet und zusammengesetzt werden. Dies ist insbesondere
nützlich, wenn die einzelnen Teile von verschiedenen Paketen
mitgebracht oder verwaltet werden oder eigene Erweiterungen für
Konfigurationsdateien eingepflegt werden sollen.

In \ucsURL{/etc/univention/templates/files/etc/} liegt beispielsweise das
Verzeichnis \ucsURL{config.d}. In diesem befinden sich die Dateien \ucsURL{00Header},
\ucsURL{05Grundkonfig} und \ucsURL{11Erweiterungen}. Diese werden von 
\ucsUCR{} in aufsteigender Reihenfolge ihrer numerischen Präfixe
zusammengefügt und ausgewertet, um die Datei \ucsURL{/etc/config} zu erzeugen.

Wurden die Templates (einfach oder Multifile) erstellt, so müssen sie
registriert werden, bevor sie im \ucsUCR{"=Mechanismus}
verwendet werden können (siehe Kapitel~\ref{bc_include_config}).

\section{Einbinden zusätzlicher Konfigurationsdateien}
\label{bc_include_config}
Es ist möglich, Konfigurationsdateien, die nicht aus einem
Installationspaket stammen, in \ucsUCR{} zu
registrieren. Die folgende Beschreibung gilt nur für
Konfigurationsdateien, die nicht von einem Paket installiert wurden.

Zuerst müssen eine oder mehrere Vorlagendateien erzeugt bzw. angepasst
und unterhalb des Verzeichnisses \ucsURL{/etc/univention/templates/files}
abgelegt werden. Syntax und genauer Speicherort der Vorlagendateien
sind in Kapitel~\ref{baseconfig_registrierung} beschrieben.

Im Verzeichnis \ucsURL{/etc/univention/templates/info} muss eine Datei
angelegt werden, in der die verwendeten Konfigurationsdateien und die
in ihnen enthaltenen Variablen aufgeführt werden. Der Name der
anzulegenden Datei ist frei wählbar, sie muss allerdings auf \emph{.info}
enden. Die Syntax entspricht dem in Kapitel~\ref{baseconfig_lokal}
für die Datei \ucsURL{debian/<binärpaket>.\ucsUCRb{}}
genannten Schema.

Abschließend muss die Cachedatei \ucsURL{/var/cache/univention-config/cache}
gelöscht werden. Die zusätzlichen Konfigurationsdateien sind beim
nächsten Aufruf registriert. Sobald eine für diese Datei registrierte
\ucsUCR{"=Variable} verändert wird oder der Befehl
\emph{univention-config-registry commit} für diese Datei aufgerufen wird, wird aus
der Vorlagedatei unter Berücksichtigung der
\ucsUCR{"=Variablen} eine neue Konfigurationsdatei erstellt.

