.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
.    if \nF \{\
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{\
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "dpkg-maintscript-helper 1"
.TH dpkg-maintscript-helper 1 "2025-06-04" "1.22.20" "dpkg suite"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "BEZEICHNUNG"
.IX Header "BEZEICHNUNG"
dpkg-maintscript-helper \- Bekannte Einschr\(:ankungen in Dpkg in Betreuerskripten umgehen
.SH "\(:UBERSICHT"
.IX Header "\(:UBERSICHT"
\&\fBdpkg-maintscript-helper\fR \fIBefehl\fR [\fIParameter\fR …] \fB\-\-\fR \fIBetr-Skript-Parameter\fR …
.SH "BEFEHLE UND PARAMETER"
.IX Header "BEFEHLE UND PARAMETER"
.IP "\fBsupports\fR \fIBefehl\fR" 4
.IX Item "supports Befehl"
.PD 0
.IP "\fBrm_conffile\fR \fIConffile\fR [\fIvorhergehende_Version\fR [\fIPaket\fR]]" 4
.IX Item "rm_conffile Conffile [vorhergehende_Version [Paket]]"
.IP "\fBmv_conffile\fR \fIalte_Conffile\fR \fIneue_Conffile\fR [\fIvorhergehende_Version\fR [\fIPaket\fR]]" 4
.IX Item "mv_conffile alte_Conffile neue_Conffile [vorhergehende_Version [Paket]]"
.IP "\fBsymlink_to_dir\fR \fIPfadname\fR \fIaltes_Ziel\fR [\fIvorhergehende_Version\fR [\fIPaket\fR]]" 4
.IX Item "symlink_to_dir Pfadname altes_Ziel [vorhergehende_Version [Paket]]"
.IP "\fBdir_to_symlink\fR \fIPfadname\fR \fIneues_Ziel\fR [\fIvorhergehende_Version\fR [\fIPaket\fR]]" 4
.IX Item "dir_to_symlink Pfadname neues_Ziel [vorhergehende_Version [Paket]]"
.PD
.SH "BESCHREIBUNG"
.IX Header "BESCHREIBUNG"
Dieses Programm wurde so entworfen, dass es in Betreuerskripten ausgef\(:uhrt werden kann, um einige Aufgaben zu erledigen, die \fBdpkg\fR (noch) nicht selbst erledigen kann, entweder aufgrund von Design-Entscheidungen oder aufgrund aktueller Einschr\(:ankungen.
.PP
Viele dieser Aufgaben ben\(:otigen koordinierte Aktionen aus mehreren Betreuerskripten (\fBpreinst\fR, \fBpostinst\fR, \fBprerm\fR, \fBpostrm\fR). Um Fehler zu vermeiden, wird der gleiche Aufruf einfach in alle Skripte eingef\(:ugt und das Programm wird sein Verhalten automatisch abh\(:angig von der Variable \fB\s-1DPKG_MAINTSCRIPT_NAME\s0\fR und den Argumenten im Betreuerskript, die Sie nach einem doppelten Bindestrich \(:ubergeben m\(:ussen, anpassen.
.PP
Dieses Programm wurde in Dpkg 1.15.7 hinzugef\(:ugt.
.SH "GEMEINSAME PARAMETER"
.IX Header "GEMEINSAME PARAMETER"
.IP "\fIvorhergehende_Version\fR" 4
.IX Item "vorhergehende_Version"
Definiert die letzte Version des Pakets, dessen Upgrade die Aktion ausl\(:osen soll. Es ist wichtig, \fIvorhergehende_Version\fR korrekt zu berechnen, so dass die Aktionen korrekt ausgef\(:uhrt werden, selbst falls der Benutzer das Paket mit einer lokalen Version neu gebaut hat. Falls \fIvorhergehende_Version\fR 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).
.Sp
Falls die Conffile in mehreren Versionen nicht ausgeliefert wurde und Sie jetzt die Betreuerskripte anpassen, um die \(:uberfl\(:ussige Datei zu entfernen, sollte \fIvorhergehende_Version\fR 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.
.Sp
Wird beispielsweise eine Conffile in Version \fB2.0\-1\fR eines Pakets entfernt, sollte \fIvorhergehende_Version\fR auf \fB2.0\-1~\fR gesetzt werden. Dies f\(:uhrt dazu, dass die Conffile entfernt wird, selbst falls der Benutzer die vorhergehende Version \fB1.0\-1\fR als \fB1.0\-1local1\fR neu gebaut hat. Oder ein Paket, das einen Pfad von einem Symlink (das in Version \fB1.0\-1\fR ausgeliefert wurde) zu einem Verzeichnis (ausgeliefert in Version \fB2.0\-1\fR) wechselt, aber die eigentliche Umstellung in den Betreuerskripten in Version \fB3.0\-1\fR durchf\(:uhrt, sollte \fIvorhergehende_Version\fR auf \fB3.0\-1~\fR setzen.
.IP "\fIPaket\fR" 4
.IX Item "Paket"
Der Paketname, dem der Pfadname geh\(:ort bzw. die Pfadnamen geh\(:oren. Wenn das Paket \(BqMulti\-Arch: same\(lq ist, muss dieser Parameter die Architekturspezifikation enthalten, andernfalls sollte er normalerweise die Architekturspezifikation \fBnicht\fR enthalten (da dies Cross-Grades verhindern oder die Umstellung von architekturspezifisch auf die Architektur \fBall\fR oder umgekehrt verhindern w\(:urde). Falls dieser Parameter leer oder nicht angegeben ist, werden die (von \fBdpkg\fR bei der Ausf\(:uhrung der Betreuerskripte gesetzten) Umgebungsvariablen \fB\s-1DPKG_MAINTSCRIPT_PACKAGE\s0\fR und \fB\s-1DPKG_MAINTSCRIPT_ARCH\s0\fR verwandt, um den Architektur-spezifizierten Paketnamen zu erstellen.
.IP "\fB\-\-\fR" 4
.IX Item "--"
Alle Parameter der Betreuerskripte m\(:ussen nach \fB\-\-\fR an das Programm weitergeleitet werden.
.SH "CONFFILE-BEZOGENE AUFGABEN"
.IX Header "CONFFILE-BEZOGENE AUFGABEN"
Beim Upgrade eines Pakets wird \fBdpkg\fR eine Conffile (eine Konfigurationsdatei, bei der \fBdpkg\fR die \(:Anderungen des Benutzers erhalten soll) nicht automatisch entfernen, falls sie nicht in der neueren Version enthalten ist. Es gibt zwei Hauptgr\(:unde daf\(:ur; der erste ist, dass die Conffile versehentlich entfallen sein und die n\(:achste Version sie wieder herstellen k\(:onnte und die Benutzer die \(:Anderung 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.
.PP
Das bedeutet, falls ein Paket eine Conffile umbenennen oder entfernen soll, muss es dies explizit durchf\(:uhren und \fBdpkg-maintscript-helper\fR kann dazu verwandt werden, eine sanfte L\(:oschung und Verschiebung von Conffiles innerhalb von Betreuerskripten durchzuf\(:uhren.
.SS "Eine Conffile entfernen"
.IX Subsection "Eine Conffile entfernen"
\&\fBHinweis\fR: In den meisten F\(:allen kann dies durch den Schalter \f(CW\*(C`remove\-on\-upgrade\*(C'\fR in \fIDEBIAN/conffiles\fR (seit Dpkg 1.20.6) ersetzt werden, siehe \fBdeb\-conffiles\fR\|(5).
.PP
Falls eine Conffile komplett entfernt wird, sollte sie von der Platte entfernt werden, falls der Benutzer sie nicht ver\(:andert hat. Falls es lokale Anpassungen gibt, sollten diese erhalten werden. Falls das Upgrade des Pakets abgebrochen wird, sollte die neuerdings veraltete Conffile nicht verschwinden.
.PP
All dies wird durch Einsetzen der folgenden Shell-Schnipsel in die Betreuerskripte \fBpreinst\fR, \fBpostinst\fR und \fBpostrm\fR implementiert:
.Sp
.RS 4

 dpkg-maintscript-helper rm_conffile \e
    \fIConffile\fR \fIvorhergehende_Version\fR \fIPaket\fR \*(-- \*(L"$@\*(R"
.RE
.PP
\&\fIConffile\fR ist der Dateiname der zu entfernenden Conffile.
.PP
Aktuelle Implementierung: im \fBpreinst\fR wird gepr\(:uft, ob die Conffile ge\(:andert wurde. Dann wird sie entweder in \fIConffile\fR\fB.dpkg\-remove\fR (falls sie nicht ge\(:andert wurde) oder in \fIConffile\fR\fB.dpkg\-backup\fR (falls sie ge\(:andert wurde) umbenannt. Im \fBpostinst\fR wird Letztere in \fIConffile\fR\fB.dpkg\-bak\fR umbenannt und als Referenz behalten, da sie Benutzer\(:anderungen enth\(:alt, w\(:ahrend Erstere entfernt wird. Falls das Upgrade des Pakets abgebrochen wird, reinstalliert \fBpostrm\fR die urspr\(:ungliche Conffile. W\(:ahrend des vollst\(:andigen L\(:oschens wird \fBpostrm\fR auch die bisher behaltene Datei \fB.dpkg\-bak\fR entfernen.
.SS "Eine Conffile umbenennen"
.IX Subsection "Eine Conffile umbenennen"
Falls eine Conffile von einem Ort zu einem anderen verschoben wird, m\(:ussen Sie sicherstellen, dass Sie auch alle \(:Anderungen des Benutzers mit \(:ubernehmen. Anf\(:anglich erscheint dies als einfache \(:Anderung am Skript \fBpreinst\fR, allerdings wird dies dazu f\(:uhren, dass der Benutzer von \fBdpkg\fR aufgefordert wird, die Bearbeitung der Conffile zu best\(:atigen, obwohl sie f\(:ur diese gar nicht verantwortlich sind.
.PP
Sanfte Umbenennung kann durch Einsetzen der folgenden Shell-Schnipsel in die Betreuerskripte \fBpreinst\fR, \fBpostinst\fR und \fBpostrm\fR implementiert werden:
.Sp
.RS 4

 dpkg-maintscript-helper mv_conffile \e
    \fIalte_Conffile\fR \fIneue_Conffile\fR \fIvorhergehende_Version\fR \fIPaket\fR \*(-- \*(L"$@\*(R"
.RE
.PP
\&\fIalte_Conffile\fR und \fIneue_Conffile\fR sind der alte und der neue Name der umzubenennenden Conffile.
.PP
Aktuelle Implementierung: das \fBpreinst\fR \(:uberpr\(:uft, ob die Conffile ver\(:andert wurde, falls ja, verbleibt sie am Platz, andernfalls wird sie in \fIalte_Conffile\fR\fB.dpkg\-remove\fR umbenannt. Bei der Konfiguration entfernt das \fBpostinst\fR \fIalte_Conffile\fR\fB.dpkg\-remove\fR und benennt \fIalte_Conffile\fR in \fIneue_Conffile\fR um, falls \fIalte_Conffile\fR noch existiert. Falls abort\-upgrade/abort\-install eintritt, benennt das \fBpostrm\fR wieder \fIalte_Conffile\fR\fB.dpkg\-remove\fR in \fIalte_Conffile\fR zur\(:uck, falls notwendig.
.SH "SYMLINK\- UND VERZEICHNISUMWANDLUNGEN"
.IX Header "SYMLINK- UND VERZEICHNISUMWANDLUNGEN"
Beim Upgrade eines Pakets wird \fBdpkg\fR einen Symlink nicht automatisch in ein Verzeichnis und umgekehrt umwandeln. Installationen \(:alterer Versionen (\(Bqdowngrades\(lq) werden nicht unterst\(:utzt und der Pfad verbleibt wie er ist.
.PP
\&\fBHinweis\fR: Die w\(:ahrend dieser Schalter erstellten Symlinks und Verzeichnisse m\(:ussen in dem neuen Paket ausgeliefert werden oder \fBdpkg\fR wird nicht in der Lage sein, sie beim endg\(:ultigen L\(:oschen zu entfernen.
.SS "Einen Symlink in ein Verzeichnis umwandeln"
.IX Subsection "Einen Symlink in ein Verzeichnis umwandeln"
Falls ein Symlink in ein echtes Verzeichnis umgewandelt wird, m\(:ussen Sie vor dem Entpacken sicherstellen, dass der Symlink entfernt wird. Anf\(:anglich erscheint dies als einfache \(:Anderung am Skript \fBpreinst\fR, allerdings wird dies zu einigen Problemen f\(:uhren, falls der Administrator lokale Anpassungen des Symlinks durchgef\(:uhrt hat oder falls ein Downgrade des Pakets auf eine alte Version durchgef\(:uhrt wird.
.PP
Sanfte Umbenennung kann durch Einsetzen der folgenden Shell-Schnipsel in die Betreuerskripte \fBpreinst\fR, \fBpostinst\fR und \fBpostrm\fR implementiert werden:
.Sp
.RS 4

 dpkg-maintscript-helper symlink_to_dir \e
    \fIPfadname\fR \fIaltes_Ziel\fR \fIvorhergehende_Version\fR \fIPaket\fR \*(-- \*(L"$@\*(R"
.RE
.PP
\&\fIPfadname\fR ist der absolute Name des alten Symlinks (der Pfad wird am Ende der Installation ein Verzeichnis sein) und \fIaltes_Ziel\fR ist der Name des Ziels des vorherigen Symlinks unter \fIPfadname\fR. Es kann entweder absolut oder relativ zum Verzeichnis, das \fIPfadname\fR enth\(:alt, sein.
.PP
Aktuelle Implementierung: das \fBpreinst\fR \(:uberpr\(:uft, ob der Symlink existiert und auf \fIaltes_Ziel\fR zeigt. Falls dies nicht der Fall ist, bleibt der Symlink existent, andernfalls wird er in \fIPfadname\fR\fB.dpkg\-backup\fR umbenannt. Bei der Konfiguration entfernt das \fBpostinst\fR \fIPfadname\fR\fB.dpkg\-backup\fR, falls \fIPfadname\fR\fB.dpkg\-backup\fR noch ein Symlink ist. Falls abort\-upgrade/abort\-install eintritt, benennt das \fBpostrm\fR wieder \fIPfadname\fR\fB.dpkg\-backup\fR in \fIPfadname\fR zur\(:uck, falls notwendig.
.SS "Ein Verzeichnis in einen Symlink umwandeln"
.IX Subsection "Ein Verzeichnis in einen Symlink umwandeln"
Falls ein echtes Verzeichnis in einen Symlink umgewandelt wird, m\(:ussen Sie vor dem Entpacken sicherstellen, dass das Verzeichnis entfernt wird. Anf\(:anglich erscheint dies als einfache \(:Anderung am Skript \fBpreinst\fR, allerdings wird dies zu einigen Problemen f\(:uhren, falls das Verzeichnis Conffiles, Pfadnamen anderer Pakete oder lokal erstellte Pfadnamen enth\(:alt oder wenn ein Downgrade des Pakets durchgef\(:uhrt wird.
.PP
Sanfte Umwandlung kann durch Einsetzen der folgenden Shell-Schnipsel in die Betreuerskripte \fBpreinst\fR, \fBpostinst\fR und \fBpostrm\fR implementiert werden:
.Sp
.RS 4

 dpkg-maintscript-helper dir_to_symlink \e
    \fIPfadname\fR \fIneues_Ziel\fR \fIvorhergehende_Version\fR \fIPaket\fR \*(-- \*(L"$@\*(R"
.RE
.PP
\&\fIPfadname\fR ist der absolute Name des alten Verzeichnisses (der Pfad wird am Ende der Installation ein Symlink sein) und \fIneues_Ziel\fR ist das Ziel des neuen Symlinks unter \fIPfadname\fR. Es kann entweder absolut oder relativ zum Verzeichnis, das \fIPfadname\fR enth\(:alt, sein.
.PP
Aktuelle Implementierung: das \fBpreinst\fR \(:uberpr\(:uft, ob das Verzeichnis existiert, keine Conffiles, Pfadnamen anderer Pakete oder lokal erstellte Pfadnamen enth\(:alt. Falls nicht, bleibt es an Ort und Stelle, andernfalls wird es in \fIPfadname\fR\fB.dpkg\-backup\fR umbenannt und ein leeres Vorbereitungsverzeichnis mit Namen \fIPfadname\fR erstellt und durch eine Datei markiert, so dass Dpkg es nachverfolgen kann. Bei der Konfiguration beendet \fBpostinst\fR die Umstellung, falls \fIPfadname\fR.\fB.dpkg\-backup\fR noch ein Verzeichnis und \fIPfadname\fR noch das Vorbereitungsverzeichnis ist. Es entfernt die Markierungsdatei im Vorbereitungsverzeichnis, verschiebt die neu erstellten Dateien im Vorbereitungsverzeichnis in das Symlink-Ziel \fIneues_Ziel\fR/, ersetzt das jetzt leere Vorbereitungsverzeichnis \fIPfadname\fR durch einen Symlink auf \fIneues_Ziel\fR und entfernt \fIPfadname\fR.\fB.dpkg\-backup\fR. Falls abort\-upgrade/abort\-install eintritt, benennt das \fBpostrm\fR wieder \fIPfadname\fR\fB.dpkg\-backup\fR in \fIPfadname\fR zur\(:uck, falls notwendig.
.SH "INTEGRATION IN PAKETE"
.IX Header "INTEGRATION IN PAKETE"
Bei der Benutzung der Paketierungshelfer pr\(:ufen Sie bitte, ob eine native \fBdpkg-maintscript-helper\fR\-Integration existiert. Hierdurch k\(:onnte Ihr Aufwand verringert werden. Lesen Sie beispielsweise \fBdh_installdeb\fR\|(1).
.PP
Da \fBdpkg-maintscript-helper\fR im \fBpreinst\fR verwandt wird, ben\(:otigt der bedingungslose Einsatz eine pr\(:a\-Abh\(:angigkeit (\fIpre-dependency\fR), um sicherzustellen, dass die Mindestversion von \fBdpkg\fR bereits entpackt wurde. Die ben\(:otigte Version h\(:angt vom verwandten Befehl ab, f\(:ur \fBrm_conffile\fR und \fBmv_conffile\fR lautet sie 1.15.7.2, f\(:ur \fBsymlink_to_dir\fR und \fBdir_to_symlink\fR lautet sie 1.17.14:
.Sp
.Vb 1
\& Pre\-Depends: dpkg (>= 1.17.14)
.Ve
.PP
In vielen F\(:allen sind aber die Ausf\(:uhrungen des Programms f\(:ur das Paket nicht kritisch und statt einer pr\(:a\-Abh\(:angigkeit soll das Programm nur aufgerufen werden, falls bekannt ist, dass der ben\(:otigte Befehl vom derzeit installierten \fBdpkg\fR unterst\(:utzt wird:
.Sp
.RS 4

 if dpkg-maintscript-helper supports \fIBefehl\fR; then
    dpkg-maintscript-helper \fIBefehl\fR …
 fi
.RE
.PP
Der Befehl \fBsupports\fR liefert im Erfolgsfall 0, ansonsten 1 zur\(:uck. Der Befehl \fBsupports\fR \(:uberpr\(:uft, ob die durch Dpkg gesetzten und vom Skript ben\(:otigten Umgebungsvariablen vorhanden sind und betrachtet es als Fehlschlag, falls die Umgebung nicht ausreichend ist.
.SH "UMGEBUNG"
.IX Header "UMGEBUNG"
.IP "\fB\s-1DPKG_ROOT\s0\fR" 4
.IX Item "DPKG_ROOT"
Falls gesetzt wird dies als Dateisystemwurzelverzeichnis verwandt.
.IP "\fB\s-1DPKG_ADMINDIR\s0\fR" 4
.IX Item "DPKG_ADMINDIR"
Falls gesetzt wird dies als Datenverzeichnis von \fBdpkg\fR verwandt.
.IP "\fB\s-1DPKG_COLORS\s0\fR" 4
.IX Item "DPKG_COLORS"
Setzt den Farbmodus (seit Dpkg 1.19.1). Die derzeit unterst\(:utzten Werte sind: \fBauto\fR (Vorgabe), \fBalways\fR und \fBnever\fR.
.SH "SIEHE AUCH"
.IX Header "SIEHE AUCH"
\&\fBdh_installdeb\fR\|(1).
.SH "\(:UBERSETZUNG"
.IX Header "\(:UBERSETZUNG"
Die deutsche \(:Ubersetzung wurde 2004, 2006\-2025 von Helge Kreutzmann
<debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und
2008 von Sven Joachim <svenjoac@gmx.de>
angefertigt. Diese \(:Ubersetzung ist Freie Dokumentation; lesen Sie die
\&\s-1GNU\s0 General Public License Version 2 oder neuer f\(:ur die Kopierbedingungen.
Es gibt \s-1KEINE HAFTUNG.\s0
