dpkg-maintscript-helper(1)

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

ÜBERSICHT
dpkg-maintscript-helper Befehl [Parameter...] -- Betr-Skript-Parameter...

BEFEHLE UND PARAMETER

rm_conffile Conffile [letzteVersion [Paket]]

mv_conffile AlteConffile NeueConffile [letzteVersion [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 Schrägstrich übergeben müssen, anpassen.

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 letzteVersion Paket -- "$@"

Conffile ist der Dateiname der zu entfernenden Conffile. letzteVersion ist die letzte Version des Pakets, das die Conffile enthielt (oder die letzte Version des Pakets, das sich nicht darum kümmerte, die veraltete Conffile zu löschen, falls dies nicht sofort implementiert wurde). Falls letzteVersion leer oder entfallen ist wird die Durchführung bei jedem Upgrade versucht. Paket ist der Paketname. Er ist optional, da er standardmäßig mit $DPKG_MAINTSCRIPT_PACKAGE belegt ist (diese Variable wird von Dpkg auf den Namen des momentan in Bearbeitung befindlichen Pakets gesetzt). Alle Parameter des Betreuerskripts müssen nach »--« an das Programm weitergeleitet werden.

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 \
        alteConffile neueConffile letzteVersion Paket -- "$@"

alteConffile und neueConffile sind der alte und der neue Name der umzubenennenden Conffile. letzteVersion ist die letzte Version des Pakets, die die Conffile mit dem alten Namen enthielt. Falls letzteVersion leer oder entfallen ist, wird die Durchführung bei jedem Upgrade versucht (Hinweis: Es ist sicherer, die Version anzugeben und die Durchführung nur einmal versuchen zu lassen). Paket ist der Paketname. Er ist optional, da er standardmäßig mit $DPKG_MAINTSCRIPT_PACKAGE belegt ist (diese Variable wird von Dpkg auf den Namen des momentan in Bearbeitung befindlichen Pakets gesetzt). Alle Parameter des Betreuerskripts müssen nach »--« an das Programm weitergeleitet werden.

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

INTEGRATION IN PAKETE

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:

    Pre-Depends: dpkg (>= 1.15.7.2)

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

AUTOREN
Copyright © 2010 Raphaël Hertzog
Copyright © 2008 Joey Hess
Copyright © 2007 Guillem Jover
Copyright © 2005 Scott James Remnant

Dies ist Freie Software; lesen Sie die GNU General Public License Version 2 oder neuer für die Kopierbedingungen. Es gibt KEINE Haftung.

ÜBERSETZUNG
Die deutsche Übersetzung wurde 2004, 2006-2011 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.