Provided by: dpkg_1.21.9ubuntu1_amd64 bug

BEZEICHNUNG

       dpkg-maintscript-helper - Bekannte Einschränkungen in Dpkg in Betreuerskripten umgehen

ÜBERSICHT

       dpkg-maintscript-helper Befehl [Parameter …] -- Betr-Skript-Parameter

BEFEHLE UND PARAMETER

       supports Befehl
       rm_conffile Conffile [vorhergehende_Version [Paket]]
       mv_conffile alte_Conffile neue_Conffile [vorhergehende_Version [Paket]]
       symlink_to_dir Pfadname altes_Ziel [vorhergehende_Version [Paket]]
       dir_to_symlink Pfadname neues_Ziel [vorhergehende_Version [Paket]]

BESCHREIBUNG

       Dieses Programm wurde so entworfen, dass es in Betreuerskripten ausgeführt werden kann, um
       einige Aufgaben zu erledigen, die dpkg (noch) nicht selbst erledigen kann, entweder
       aufgrund von Design-Entscheidungen oder aufgrund aktueller Einschränkungen.

       Viele dieser Aufgaben benötigen koordinierte Aktionen aus mehreren Betreuerskripten
       (preinst, postinst, prerm, postrm). Um Fehler zu vermeiden, wird der gleiche Aufruf
       einfach in alle Skripte eingefügt und das Programm wird sein Verhalten automatisch
       abhängig von der Variable DPKG_MAINTSCRIPT_NAME und den Argumenten im Betreuerskript, die
       Sie nach einem doppelten Bindestrich übergeben müssen, anpassen.

GEMEINSAME PARAMETER

       vorhergehende_Version
           Definiert die letzte Version des Pakets, dessen Upgrade die Aktion auslösen soll. Es
           ist wichtig, vorhergehende_Version korrekt zu berechnen, so dass die Aktionen korrekt
           ausgeführt werden, selbst falls der Benutzer das Paket mit einer lokalen Version neu
           gebaut hat. Falls vorhergehende_Version leer ist oder weggelassen wurde, wird die
           Aktion bei jedem Upgrade versucht (Hinweis: Es ist sicherer, die Version anzugeben und
           damit die Aktion nur einmal versuchen zu lassen).

           Falls die Conffile in mehreren Versionen nicht ausgeliefert wurde und Sie jetzt die
           Betreuerskripte anpassen, um die überflüssige Datei zu entfernen, sollte
           vorhergehende_Version auf die Version des Pakets gesetzt werden, die Sie jetzt
           zusammenstellen, nicht auf die erste Version des Pakets, bei dem die Conffile fehlte.
           Dies trifft genauso auch auf alle anderen Aktionen zu.

           Wird beispielsweise eine Conffile in Version 2.0-1 eines Pakets entfernt, sollte
           vorhergehende_Version auf 2.0-1~ gesetzt werden. Dies führt dazu, dass die Conffile
           entfernt wird, selbst falls der Benutzer die vorhergehende Version 1.0-1 als
           1.0-1local1 neu gebaut hat. Oder ein Paket, das einen Pfad von einem Symlink (das in
           Version 1.0-1 ausgeliefert wurde) zu einem Verzeichnis (ausgeliefert in Version 2.0-1)
           wechselt, aber die eigentliche Umstellung in den Betreuerskripten in Version 3.0-1
           durchführt, sollte vorhergehende_Version auf 3.0-1~ setzen.

       Paket
           Der Paketname, dem der Pfadname gehört bzw. die Pfadnamen gehören. Wenn das Paket
           „Multi-Arch: same“ ist, muss dieser Parameter die Architekturspezifikation enthalten,
           andernfalls sollte er normalerweise die Architekturspezifikation nicht enthalten (da
           dies Cross-Grades verhindern oder die Umstellung von architekturspezifisch auf die
           Architektur all oder umgekehrt verhindern würde). Falls dieser Parameter leer oder
           nicht angegeben ist, werden die (von dpkg bei der Ausführung der Betreuerskripte
           gesetzten) Umgebungsvariablen DPKG_MAINTSCRIPT_PACKAGE und DPKG_MAINTSCRIPT_ARCH
           verwandt, um den Architektur-spezifizierten Paketnamen zu erstellen.

       --  Alle Parameter der Betreuerskripte müssen nach -- an das Programm weitergeleitet
           werden.

CONFFILE-BEZOGENE AUFGABEN

       Beim Upgrade eines Pakets wird dpkg eine Conffile (eine Konfigurationsdatei, bei der dpkg
       die Änderungen des Benutzers erhalten soll) nicht automatisch entfernen, falls sie nicht
       in der neueren Version enthalten ist. Es gibt zwei Hauptgründe dafür; der erste ist, dass
       die Conffile versehentlich entfallen sein und die nächste Version sie wieder herstellen
       könnte und die Benutzer die Änderung nicht weggeworfen sehen wollen. Der zweite besteht
       darin, dass Paketen erlaubt werden soll, von einer Dpkg-betreuten Conffile auf eine Datei,
       die von den Betreuerskripten des Pakets, normalerweise mit einem Werkzeug wie Debconf oder
       Ucf, verwaltet wird, umzustellen.

       Das bedeutet, falls ein Paket eine Conffile umbenennen oder entfernen soll, muss es dies
       explizit durchführen und dpkg-maintscript-helper kann dazu verwandt werden, eine sanfte
       Löschung und Verschiebung von Conffiles innerhalb von Betreuerskripten durchzuführen.

   Eine Conffile entfernen
       Hinweis: In den meisten Fällen kann dies durch den Schalter "remove-on-upgrade" in
       DEBIAN/conffiles (seit Dpkg 1.20.6) ersetzt werden, siehe deb-conffiles(5).

       Falls eine Conffile komplett entfernt wird, sollte sie von der Platte entfernt werden,
       falls der Benutzer sie nicht verändert hat. Falls es lokale Anpassungen gibt, sollten
       diese erhalten werden. Falls das Upgrade des Pakets abgebrochen wird, sollte die
       neuerdings veraltete Conffile nicht verschwinden.

       All dies wird durch Einsetzen der folgenden Shell-Schnipsel in die Betreuerskripte
       preinst, postinst und postrm implementiert:

            dpkg-maintscript-helper rm_conffile \
               Conffile vorhergehende_Version Paket -- "$@"

       Conffile ist der Dateiname der zu entfernenden Conffile.

       Aktuelle Implementierung: im preinst wird geprüft, ob die Conffile geändert wurde. Dann
       wird sie entweder in Conffile.dpkg-remove (falls sie nicht geändert wurde) oder in
       Conffile.dpkg-backup (falls sie geändert wurde) umbenannt. Im postinst wird Letztere in
       Conffile.dpkg-bak umbenannt und als Referenz behalten, da sie Benutzeränderungen enthält,
       während Erstere entfernt wird. Falls das Upgrade des Pakets abgebrochen wird,
       reinstalliert postrm die ursprüngliche Conffile. Während des vollständigen Löschens wird
       postrm auch die bisher behaltene Datei .dpkg-bak entfernen.

   Eine Conffile umbenennen
       Falls eine Conffile von einem Ort zu einem anderen verschoben wird, müssen Sie
       sicherstellen, dass Sie auch alle Änderungen des Benutzers mit übernehmen. Anfänglich
       erscheint dies als einfache Änderung am Skript preinst, allerdings wird dies dazu führen,
       dass der Benutzer von dpkg aufgefordert wird, die Bearbeitung der Conffile zu bestätigen,
       obwohl sie für diese gar nicht verantwortlich sind.

       Sanfte Umbenennung kann durch Einsetzen der folgenden Shell-Schnipsel in die
       Betreuerskripte preinst, postinst und postrm implementiert werden:

            dpkg-maintscript-helper mv_conffile \
               alte_Conffile neue_Conffile vorhergehende_Version Paket -- "$@"

       alte_Conffile und neue_Conffile sind der alte und der neue Name der umzubenennenden
       Conffile.

       Aktuelle Implementierung: das preinst überprüft, ob die Conffile verändert wurde, falls
       ja, verbleibt sie am Platz, andernfalls wird sie in alte_Conffile.dpkg-remove umbenannt.
       Bei der Konfiguration entfernt das postinst alte_Conffile.dpkg-remove und benennt
       alte_Conffile in neue_Conffile um, falls alte_Conffile noch existiert. Falls
       abort-upgrade/abort-install eintritt, benennt das postrm wieder alte_Conffile.dpkg-remove
       in alte_Conffile zurück, falls notwendig.

SYMLINK- UND VERZEICHNISUMWANDLUNGEN

       Beim Upgrade eines Pakets wird dpkg einen Symlink nicht automatisch in ein Verzeichnis und
       umgekehrt umwandeln. Installationen älterer Versionen („downgrades“) werden nicht
       unterstützt und der Pfad verbleibt wie er ist.

   Einen Symlink in ein Verzeichnis umwandeln
       Falls ein Symlink in ein echtes Verzeichnis umgewandelt wird, müssen Sie vor dem Entpacken
       sicherstellen, dass der Symlink entfernt wird. Anfänglich erscheint dies als einfache
       Änderung am Skript preinst, allerdings wird dies zu einigen Problemen führen, falls der
       Administrator lokale Anpassungen des Symlinks durchgeführt hat oder falls ein Downgrade
       des Pakets auf eine alte Version durchgeführt wird.

       Sanfte Umbenennung kann durch Einsetzen der folgenden Shell-Schnipsel in die
       Betreuerskripte preinst, postinst und postrm implementiert werden:

            dpkg-maintscript-helper symlink_to_dir \
               Pfadname altes_Ziel vorhergehende_Version Paket -- "$@"

       Pfadname ist der absolute Name des alten Symlinks (der Pfad wird am Ende der Installation
       ein Verzeichnis sein) und altes_Ziel ist der Name des Ziels des vorherigen Symlinks unter
       Pfadname. Es kann entweder absolut oder relativ zum Verzeichnis, das Pfadname enthält,
       sein.

       Aktuelle Implementierung: das preinst überprüft, ob der Symlink existiert und auf
       altes_Ziel zeigt. Falls dies nicht der Fall ist, bleibt der Symlink existent, andernfalls
       wird er in Pfadname.dpkg-backup umbenannt. Bei der Konfiguration entfernt das postinst
       Pfadname.dpkg-backup, falls Pfadname.dpkg-backup noch ein Symlink ist. Falls
       abort-upgrade/abort-install eintritt, benennt das postrm wieder Pfadname.dpkg-backup in
       Pfadname zurück, falls notwendig.

   Ein Verzeichnis in einen Symlink umwandeln
       Falls ein echtes Verzeichnis in einen Symlink umgewandelt wird, müssen Sie vor dem
       Entpacken sicherstellen, dass das Verzeichnis entfernt wird. Anfänglich erscheint dies als
       einfache Änderung am Skript preinst, allerdings wird dies zu einigen Problemen führen,
       falls das Verzeichnis Conffiles, Pfadnamen anderer Pakete oder lokal erstellte Pfadnamen
       enthält oder wenn ein Downgrade des Pakets durchgeführt wird.

       Sanfte Umwandlung kann durch Einsetzen der folgenden Shell-Schnipsel in die
       Betreuerskripte preinst, postinst und postrm implementiert werden:

            dpkg-maintscript-helper dir_to_symlink \
               Pfadname neues_Ziel vorhergehende_Version Paket -- "$@"

       Pfadname ist der absolute Name des alten Verzeichnisses (der Pfad wird am Ende der
       Installation ein Symlink sein) und neues_Ziel ist das Ziel des neuen Symlinks unter
       Pfadname. Es kann entweder absolut oder relativ zum Verzeichnis, das Pfadname enthält,
       sein.

       Aktuelle Implementierung: das preinst überprüft, ob das Verzeichnis existiert, keine
       Conffiles, Pfadnamen anderer Pakete oder lokal erstellte Pfadnamen enthält. Falls nicht,
       bleibt es an Ort und Stelle, andernfalls wird es in Pfadname.dpkg-backup umbenannt und ein
       leeres Vorbereitungsverzeichnis mit Namen Pfadname erstellt und durch eine Datei markiert,
       so dass Dpkg es nachverfolgen kann. Bei der Konfiguration beendet postinst die Umstellung,
       falls Pfadname..dpkg-backup noch ein Verzeichnis und Pfadname noch das
       Vorbereitungsverzeichnis ist. Es entfernt die Markierungsdatei im
       Vorbereitungsverzeichnis, verschiebt die neu erstellten Dateien im
       Vorbereitungsverzeichnis in das Symlink-Ziel neues_Ziel/, ersetzt das jetzt leere
       Vorbereitungsverzeichnis Pfadname durch einen Symlink auf neues_Ziel und entfernt
       Pfadname..dpkg-backup. Falls abort-upgrade/abort-install eintritt, benennt das postrm
       wieder Pfadname.dpkg-backup in Pfadname zurück, falls notwendig.

INTEGRATION IN PAKETE

       Bei der Benutzung der Paketierungshelfer prüfen Sie bitte, ob eine native dpkg-
       maintscript-helper-Integration existiert. Hierdurch könnte Ihr Aufwand verringert werden.
       Lesen Sie beispielsweise dh_installdeb(1).

       Da dpkg-maintscript-helper im preinst verwandt wird, benötigt der bedingungslose Einsatz
       eine prä-Abhängigkeit (pre-dependency), um sicherzustellen, dass die Mindestversion von
       dpkg bereits entpackt wurde. Die benötigte Version hängt vom verwandten Befehl ab, für
       rm_conffile und mv_conffile lautet sie 1.15.7.2, für symlink_to_dir und dir_to_symlink
       lautet sie 1.17.14:

        Pre-Depends: dpkg (>= 1.17.14)

       In vielen Fällen sind aber die Ausführungen des Programms für das Paket nicht kritisch und
       statt einer prä-Abhängigkeit soll das Programm nur aufgerufen werden, falls bekannt ist,
       dass der benötigte Befehl vom derzeit installierten dpkg unterstützt wird:

            if dpkg-maintscript-helper supports Befehl; then
               dpkg-maintscript-helper Befehl …
            fi

       Der Befehl supports liefert im Erfolgsfall 0, ansonsten 1 zurück. Der Befehl supports
       überprüft, ob die durch Dpkg gesetzten und vom Skript benötigten Umgebungsvariablen
       vorhanden sind und betrachtet es als Fehlschlag, falls die Umgebung nicht ausreichend ist.

UMGEBUNG

       DPKG_ROOT
           Falls gesetzt wird dies als Dateisystemwurzelverzeichnis verwandt.

       DPKG_ADMINDIR
           Falls gesetzt wird dies als Datenverzeichnis von dpkg verwandt.

       DPKG_COLORS
           Setzt den Farbmodus (seit Dpkg 1.19.1). Die derzeit unterstützten Werte sind: auto
           (Vorgabe), always und never.

SIEHE AUCH

       dh_installdeb(1).

ÜBERSETZUNG

       Die deutsche Übersetzung wurde 2004, 2006-2022 von Helge Kreutzmann
       <debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und 2008 von Sven
       Joachim <svenjoac@gmx.de> angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen
       Sie die GNU General Public License Version 2 oder neuer für die Kopierbedingungen. Es gibt
       KEINE HAFTUNG.