\subsection{Repository-Synchronisation}
\label{softwareverteilung:repository-synchronisation}

In verschiedenen Szenarien kann der Betrieb mehrerer lokaler
Repository"=Server sinnvoll sein. Beispielsweise kann in UCS"=Domänen, die
sich über mehrere Standorte verteilen, ein Repository"=Server pro Standort
betrieben werden. Ohne eine Repository"=Synchronisation muss der Administrator
selbst dafür sorgen, dass alle Repositories auf dem neusten Stand sind,
d.h. es müssen alle Repositories manuell durch den Administrator aktualisiert
werden. Dies gilt für Release"=Updates, Security"=Updates oder zusätzliche
Pakete. Mit Hilfe der Repository-Synchronisation kann die Pflege auf einen
einzigen Repository"=Server reduziert werden.

Alternativ kann auch in Umgebungen auf lokale Repository"=Server verzichtet
werden und direkt der Zugriff auf das Online-Repository eingerichtet werden
bzw. es kann eine Synchronisation der lokalen Repository"=Server mit dem
Online-Repository konfiguriert werden.

Bei der Repository"=Synchronisation wird ein Repository"=Server zum
Master"=Repository"=Server erklärt. In diesem Repository werden ausschließlich
Änderungen wie Security- oder Release"=Updates vorgenommen, Pakete werden
einzeln hinzugefügt oder entfernt. Andere Repository"=Server, die so genannten
Slave"=Repository"=Server überprüfen regelmäßig, ob es Änderungen auf dem
Master"=Repository"=Server gab und übernehmen diese. Bei der Synchronisation
mit dem Online-Repository ist dieses als das Master"=Repository zu
sehen. Sollten zusätzliche Pakete benötigt werden, die über das
Online-Repository nicht zur Verfügung gestellt werden, muss einer der lokalen
Repositor"=Server dafür verwendet werden. Alle weiteren lokalen
Repository-Server sollten dann über diesen Repository-Server synchronisiert
werden.

Ein Slave"=Repository"=Server muss sich nicht direkt an den Master wenden.
Slave"=Repository"=Server können zur Synchronisation einen anderen
Slave"=Repository"=Server verwenden, der Änderungen von einem übergeordneten
Repository"=Server bezieht.

Um die Pakete eines \ucsUCSShort{"=Release"=Updates} auf dem
Master"=Repository"=Server einzuspielen, kann das Tool
\ucsCommand{univention-repository-update} verwendet werden. Dies unterstützt
zwei Modi:

\begin{description}
\item[\ucsCommand{univention-repository-update cdrom}] Dabei wird das
  Repository über eine Update"=DVD aktualisiert.
\item[\ucsCommand{univention-repository-update net}] Bei dieser Variante wird
  das Repository mit einem angebenen anderen Repository"=Server
  synchronisiert. Dieser ist in der \ucsUCRV{repository/mirror/server} definiert.
\end{description}

Es besteht auch die Möglichkeit mit dem Befehl
\ucsCommand{univention-repository-update} ein Release-Update in das Repository
einzupflegen ohne direkt ein Update zu starten. Diese kann mit der Option
\emph{net} aus einem weiteren Repository (dies kann auch das Online-Repository
sein) erfolgen, mit der Option \emph{cdrom} von einer Update"=DVD:

\begin{ucsConsoleInput}
univention-repository-update net

univention-repository-update cdrom --cdrom --iso ucs_update.iso
\end{ucsConsoleInput}

Bei der Einrichtung der Repository"=Synchronisation wird die Zuordnung zu einem
übergeordneten Server und der Zeitpunkt über Richtlinien vorgenommen.

Wie in Abschnitt~\ref{softwareverteilung:repository-server-zuweisen}
beschrieben, kann für jedes UCS"=System über die Richtlinie Repository"=Server
vorgegeben werden, welcher Repository"=Server für
Paket"=Installationen verwendet werden soll. Auf UCS"=Systemen, die selbst ein
aktives lokales Repository besitzen, wird über diese Richtlinie gleichzeitig
eingestellt, welcher Repository"=Server als übergeordnetes Repository für die
Synchronisation verwendet werden soll. Für einen Master"=Repository"=Server wird
daher kein Repository"=Server eingetragen.

In der Richtlinie \ucsMenuEntry{Repository"=Synchronisation} kann der Zeitpunkt für die
automatische Repository"=Replikation auf die einzelnen Slave"=Repository"=Server
definiert werden. Dabei kann der Monat, der Wochentag, der Tag, die Stunde und
die Minute angegeben werden. Immer dann, wenn alle Einstellungen zutreffen, wird
die Synchronisation mit dem übergeordneten Repository"=Server gestartet.

Die Repository"=Synchronisation kann auch lokal auf den Systemen mittels
\ucsUCR{"=Variablen} konfiguriert werden. Dabei definiert die
\ucsUCRV{repository/mirror/server} den
Repository"=Server von dem synchronisiert werden soll. Um beispielsweise
direkt mit dem Online-Repository zu synchronisieren muss die
\ucsUCR{"=Variable} auf den Wert \ucsURL{apt.univention.de} gesetzt
werden. Um alternativ über einen weiteren lokalen Repository"=Server zu
synchronisieren muss der vollqualifizierte Rechnername des Systems angegeben
werden.

\begin{ucsConsoleInput}
univention-config-registry set repository/mirror/server=apt.univention.de
\end{ucsConsoleInput}

Standardmässig wird das Repository nur mit Paketen für die Architektur des
Repository-Servers befüllt. Werden in einer UCS-Domäne Systeme mit
verschiedenen Architekturen betrieben, können die zu verwaltenden
Architekturen mit der \ucsUCRV{repository/mirror/architectures} angebeben
werden. Die Angabe erfolgt dabei als mit Leerzeichen getrennte Liste.

Welche Standard-Repositories synchronisiert werden, wird durch die
\ucsUCR{"=Variablen} \ucsCommand{\ucsBCindex{repository/online/maintained}}
für den Maintained-Bereich,
\ucsCommand{\ucsBCindex{repository/online/unmaintained}} für den
Unmaintained-Bereich und \ucsCommand{\ucsBCindex{repository/online/hotfixes}}
für die Hotfixes definiert. In den Voreinstellunen ist nur die Variable
\ucsCommand{\ucsBCindex{repository/online/maintained}} auf \emph{yes}
gesetzt.

Sind auf dem System Repositories für Komponenten definiert, so werden auch
diese von den angegebenen Servern synchronisiert.

Durch die \ucsUCRV{repository/mirror/version/start} wird festgelegt ab
welcher Version von \ucsUCS{} die Repositories synchronisiert werden. Um
beispielsweise die Synchronisation ab der \ucsUCSShort{"=Version} 2.1-0 zu
beginnen kann folgender Befehl verwendet werden:

\begin{ucsConsoleInput}
univention-config-registry set repository/mirror/version/start=2.1-0
\end{ucsConsoleInput}

Alle Änderungen, die während der Synchronisation auf einem Repository"=Server
vorgenommen wurden, werden lokal in der Datei
\ucsURL{/var/log/univention/repository.log} protokolliert.
