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.
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.
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.
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.
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.
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.
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.
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.