summaryrefslogtreecommitdiffstats
path: root/man/de/dpkg-maintscript-helper.pod
blob: db4ebbde76cde24525285e9b2027e8d215035a0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
        *****************************************************
        *           GENERATED FILE, DO NOT EDIT             *
        * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
        *****************************************************

This file was generated by po4a(7). Do not store it (in VCS, for example),
but store the PO file used as source file by po4a-translate.

In fact, consider this as a binary, and the PO file as a regular .c file:
If the PO get lost, keeping this translation up-to-date will be harder.

=encoding UTF-8

=head1 BEZEICHNUNG

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

=head1 ÜBERSICHT

B<dpkg-maintscript-helper> I<Befehl> [I<Parameter> …] B<-->
I<Betr-Skript-Parameter> …

=head1 BEFEHLE UND PARAMETER

=over 

=item B<supports> I<Befehl>

=item B<rm_conffile> I<Conffile> [I<vorhergehende_Version> [I<Paket>]]

=item B<mv_conffile> I<alte_Conffile> I<neue_Conffile> [I<vorhergehende_Version>
[I<Paket>]]

=item B<symlink_to_dir> I<Pfadname> I<altes_Ziel> [I<vorhergehende_Version>
[I<Paket>]]

=item B<dir_to_symlink> I<Pfadname> I<neues_Ziel> [I<vorhergehende_Version>
[I<Paket>]]

=back

=head1 BESCHREIBUNG

Dieses Programm wurde so entworfen, dass es in Betreuerskripten ausgeführt
werden kann, um einige Aufgaben zu erledigen, die B<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 (B<preinst>, B<postinst>, B<prerm>, B<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
B<DPKG_MAINTSCRIPT_NAME> und den Argumenten im Betreuerskript, die Sie nach
einem doppelten Bindestrich übergeben müssen, anpassen.

=head1 GEMEINSAME PARAMETER

=over 

=item I<vorhergehende_Version>

Definiert die letzte Version des Pakets, dessen Upgrade die Aktion auslösen
soll. Es ist wichtig, I<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 I<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 I<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 B<2.0-1> eines Pakets entfernt,
sollte I<vorhergehende_Version> auf B<2.0-1~> gesetzt werden. Dies führt
dazu, dass die Conffile entfernt wird, selbst falls der Benutzer die
vorhergehende Version B<1.0-1> als B<1.0-1local1> neu gebaut hat. Oder ein
Paket, das einen Pfad von einem Symlink (das in Version B<1.0-1>
ausgeliefert wurde) zu einem Verzeichnis (ausgeliefert in Version B<2.0-1>)
wechselt, aber die eigentliche Umstellung in den Betreuerskripten in Version
B<3.0-1> durchführt, sollte I<vorhergehende_Version> auf B<3.0-1~> setzen.

=item I<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 B<nicht> enthalten (da dies Cross-Grades verhindern
oder die Umstellung von architekturspezifisch auf die Architektur B<all>
oder umgekehrt verhindern würde). Falls dieser Parameter leer oder nicht
angegeben ist, werden die (von B<dpkg> bei der Ausführung der
Betreuerskripte gesetzten) Umgebungsvariablen B<DPKG_MAINTSCRIPT_PACKAGE>
und B<DPKG_MAINTSCRIPT_ARCH> verwandt, um den Architektur-spezifizierten
Paketnamen zu erstellen.

=item B<-->

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

=back

=head1 CONFFILE-BEZOGENE AUFGABEN

Beim Upgrade eines Pakets wird B<dpkg> eine Conffile (eine
Konfigurationsdatei, bei der B<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 B<dpkg-maintscript-helper> kann dazu
verwandt werden, eine sanfte Löschung und Verschiebung von Conffiles
innerhalb von Betreuerskripten durchzuführen.

=head2 Eine Conffile entfernen

Hinweis: In den meisten Fällen kann dies durch den Schalter
C<remove-on-upgrade> in F<DEBIAN/conffiles> (seit Dpkg 1.20.6) ersetzt
werden, siehe L<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 B<preinst>, B<postinst> und B<postrm> implementiert:

=over 

Z<>
 dpkg-maintscript-helper rm_conffile \
    I<Conffile> I<vorhergehende_Version> I<Paket> -- "$@"

=back

I<Conffile> ist der Dateiname der zu entfernenden Conffile.

Aktuelle Implementierung: im B<preinst> wird geprüft, ob die Conffile
geändert wurde. Dann wird sie entweder in I<Conffile>B<.dpkg-remove> (falls
sie nicht geändert wurde) oder in I<Conffile>B<.dpkg-backup> (falls sie
geändert wurde) umbenannt. Im B<postinst> wird Letztere in
I<Conffile>B<.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 B<postrm> die ursprüngliche
Conffile. Während des vollständigen Löschens wird B<postrm> auch die bisher
behaltene Datei B<.dpkg-bak> entfernen.

=head2 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
B<preinst>, allerdings wird dies dazu führen, dass der Benutzer von B<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 B<preinst>, B<postinst> und B<postrm> implementiert werden:

=over 

Z<>
 dpkg-maintscript-helper mv_conffile \
    I<alte_Conffile> I<neue_Conffile> I<vorhergehende_Version> I<Paket> -- "$@"

=back

I<alte_Conffile> und I<neue_Conffile> sind der alte und der neue Name der
umzubenennenden Conffile.

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

=head1 SYMLINK- UND VERZEICHNISUMWANDLUNGEN

Beim Upgrade eines Pakets wird B<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.

=head2 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 B<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 B<preinst>, B<postinst> und B<postrm> implementiert werden:

=over 

Z<>
 dpkg-maintscript-helper symlink_to_dir \
    I<Pfadname> I<altes_Ziel> I<vorhergehende_Version> I<Paket> -- "$@"

=back

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

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

=head2 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 B<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 B<preinst>, B<postinst> und B<postrm> implementiert werden:

=over 

Z<>
 dpkg-maintscript-helper dir_to_symlink \
    I<Pfadname> I<neues_Ziel> I<vorhergehende_Version> I<Paket> -- "$@"

=back

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

Aktuelle Implementierung: das B<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 I<Pfadname>B<.dpkg-backup> umbenannt und ein leeres
Vorbereitungsverzeichnis mit Namen I<Pfadname> erstellt und durch eine Datei
markiert, so dass Dpkg es nachverfolgen kann. Bei der Konfiguration beendet
B<postinst> die Umstellung, falls I<Pfadname>.B<.dpkg-backup> noch ein
Verzeichnis und I<Pfadname> noch das Vorbereitungsverzeichnis ist. Es
entfernt die Markierungsdatei im Vorbereitungsverzeichnis, verschiebt die
neu erstellten Dateien im Vorbereitungsverzeichnis in das Symlink-Ziel
I<neues_Ziel>/, ersetzt das jetzt leere Vorbereitungsverzeichnis I<Pfadname>
durch einen Symlink auf I<neues_Ziel> und entfernt
I<Pfadname>.B<.dpkg-backup>. Falls abort-upgrade/abort-install eintritt,
benennt das B<postrm> wieder I<Pfadname>B<.dpkg-backup> in I<Pfadname>
zurück, falls notwendig.

=head1 INTEGRATION IN PAKETE

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

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

=over 

 Pre-Depends: dpkg (>= 1.17.14)

=back

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 B<dpkg> unterstützt wird:

=over 

Z<>
 if dpkg-maintscript-helper supports I<Befehl>; then
    dpkg-maintscript-helper I<Befehl> …
 fi

=back

Der Befehl B<supports> liefert im Erfolgsfall 0, ansonsten 1 zurück. Der
Befehl B<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.

=head1 UMGEBUNG

=over 

=item B<DPKG_ROOT>

Falls gesetzt wird dies als Dateisystemwurzelverzeichnis verwandt.

=item B<DPKG_ADMINDIR>

Falls gesetzt wird dies als Datenverzeichnis von B<dpkg> verwandt.

=item B<DPKG_COLORS>

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

=back

=head1 SIEHE AUCH

B<dh_installdeb>(1).


=head1 ÜBERSETZUNG

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