Provided by: dpkg_1.19.7ubuntu3.2_amd64 

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 Operation auslösen soll. Es ist
wichtig, vorhergehende_Version korrekt zu berechnen, so dass die Operationen korrekt ausgeführt
werden, selbst falls der Benutzer das Paket mit einer lokalen Version neugebaut hat. Falls
vorhergehende_Version leer ist oder weggelassen wurde wird die Operation bei jedem Upgrade
versucht (Hinweis: Es ist sicherer, die Version anzugeben und damit die Operation nur einmal
versuchen zu lassen).
Falls das 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 das 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 das 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. Wenn das Paket „Multi-Arch: same“ ist, muss dieser
Parameter die Architektur-Spezifikation enthalten, andernfalls sollte er normalerweise die
Architektur-Spezifikation 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 ein Conffile (eine Konfigurationsdatei, bei der dpkg die Änderungen
des Benutzers erhalten soll) nicht automatischen 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
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 bennent 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 Pfadnbame 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
pre-Abhängigkeit (pre-dependency), um sicherzustellen, dass die Mindestversion von dpkg breits 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
pre-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 command; then
dpkg-maintscript-helper command …
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_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-2019 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.
1.19.7 2022-05-25 dpkg-maintscript-helper(1)