Kapitel 5. Paketmanagement
Zurück | 5.44 `dpkg-divert` | Weiter

## 5.44 `dpkg-divert`

Datei-„diversions“ - im Deutschen in etwa „Umleitungen“, „Ablenkungen“ oder auch „Diversifikationen“ - erlauben es dem Debian-Paketmanagement, Dateien nicht an der vorgesehenen Stelle, sondern an einer „umgeleiteten“ Stelle im Dateisystem abzulegen. `dpkg-divert` kann innerhalb von Debian-Paket-Skripten eingesetzt werden, um eine Datei aus einem anderen Paket zu überschreiben. Dabei wird, wie gleich noch gezeigt wird, die Datei nicht tatsächlich überschrieben, sondern nur umbenannt.

Während der Installation eines Pakets können so einzelne Dateien, beispielsweise Programme oder Manpages, durch andere Versionen ersetzt werden. Konfigurationsdateien sind von dieser Funktionalität ausgenommen. Um Konfigurationsdateien zu managen, ist entweder ein Paket zu erstellen, das das Ursprungspaket ersetzt oder mit diesem in Konflikt steht, oder aber es ist ein Paket zu erstellen, das Teile der Konfiguration enthält und diese mit dem Hauptpaket teilt (durch entsprechende Abhängigkeiten).

Beispielsweise kann ein Paket während der Installation ein Programm durch eine angepasste Version ersetzen. Hierzu ist sinngemäß Folgendes in das `preinst`-Skript des Pakets einzufügen:

    if [ install = "$1" -o upgrade = "$1" ]; then
       dpkg-divert --package smailwrapper --add --rename \
          --divert /usr/sbin/smail.real /usr/sbin/smail
    fi

In der Datei `postrm` des Pakets muss dieser Vorgang wieder rückgängig gemacht werden:

    if [ remove = "$1" ]; then
       dpkg-divert --package smailwrapper --remove --rename \
          --divert /usr/sbin/smail.real /usr/sbin/smail
    fi

Die Dateien aus dem Debian-Paket bleiben unangetastet, mit Ausnahme der Umbenennung.

Mittels `dpkg-divert` „markierte“ Dateien werden bei einem späteren Update nicht von Dateien aus einem aktuelleren Paket überschrieben.

`dpkg-divert` kann ausschließlich auf Dateien und nicht auf Verzeichnisse angewendet werden.

Mit `dpkg-divert` können diese Umleitungen gesetzt, angezeigt oder auch wieder gelöscht werden. Weiterhin lassen sich die ursprünglichen Namen der umgeleiteten Dateien ermitteln. Die Syntax für das Kommando `dpkg-divert` lautet:

    dpkg-divert [options] [--add] <file>
    dpkg-divert [options] --remove <file>
    dpkg-divert [options] --list <glob-pattern>
    dpkg-divert [options] --truename <file>

Die möglichen Optionen von `dpkg-divert` lauten:

`--add` (Optional)

  Wird keine Option angegeben, so wird automatisch `--add` verwendet. Diese Option fügt die angegebene Datei in die Liste der zu diversifizierenden Dateien ein.

`--admindir <Verzeichnis>`

  Setzt das Verzeichnis, in dem sich die Daten für `dpkg` befinden (normalerweise: `/var/lib/dpkg/`).

`--divert <Umlenken nach>`

  Bestimmt einen neuen Namen für die Datei.

`--help`

  Zeigt eine kurze Anleitung zu `dpkg-divert` an.

`--local`

  Bewirkt das alle verfügbaren Versionen eines Paketes diversifiziert werden.

`--list [<file>]`

  Zeigt die bestehenden Diversifikationen an. Wird ein Dateiname angegeben, so werden nur die entsprechenden Dateien angezeigt.

`--package <Paketname>`

  Der Name eines Pakets, in dem die Kopie der Datei `<Dateiname>` nicht umgeleitet wird.

`--quiet`

  Es werden keine Ausgaben auf dem Bildschirm erzeugt.

`--rename`

  Verschiebt eine Datei. Existiert die Zieldatei bereits, so wird die Aktion abgebrochen.

`--remove <file>`

  Löscht die angegebene Datei aus der Liste der diversifizierten Dateien und stellt den ursprünglichen Zustand wieder her.

`--test`

  Testmodus; es werden keine Veränderungen durchgeführt.

`--version`

  Zeigt die Versionsnummer von `dpkg-divert` an.

Beim Hinzufügen von Umleitungen werden, wenn nicht anders angegeben, immer die Option `--divert <Ursprungsname>.distrib` und die Option `--local` verwendet.

Eine Liste der umgeleiteten Dateien wird in der Datei `/var/lib/dpkg/diversions` gespeichert.

Zurück | Nach oben | Weiter
5.43 `dpkg-repack` | Zum Anfang | 5.45 `dpkg-statoverride`

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).