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
|
.\" dpkg manual page - dpkg-maintscript-helper(1)
.\"
.\" Copyright © 2010-2012 Raphaël Hertzog <hertzog@debian.org>
.\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org>
.\"
.\" This is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 2 of the License, or
.\" (at your option) any later version.
.\"
.\" This is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see <https://www.gnu.org/licenses/>.
.
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH dpkg\-maintscript\-helper 1 %RELEASE_DATE% %VERSION% Dpkg\-sviten
.nh
.SH NAMN
dpkg\-maintscript\-helper \- går runt kända dpkg\-begränsningar i paketskript
.
.SH SYNOPS
\fBdpkg\-maintscript\-helper\fP \fIkommando\fP [\fIflagga\fP...] \fB\-\-\fP
\fImaint\-script\-flagga\fP...
.
.SH "KOMMANDON OCH PARAMETRAR"
.P
\fBsupports\fP \fIkommando\fP
.P
\fBrm_conffile\fP \fIkonffil\fP [\fItidigare\-version\fP [\fIpaket\fP]]
.P
\fBmv_conffile\fP \fIgammalkonffil\fP \fInykonffil\fP [\fItidigare\-version\fP
[\fIpaket\fP]]
.P
\fBsymlink_to_dir\fP \fIsökväg\fP \fIgammalt\-mål\fP [\fItidigare\-version\fP [\fIpaket\fP]]
.P
\fBdir_to_symlink\fP \fIsökväg\fP \fInytt\-mål\fP [\fItidigare\-version\fP [\fIpaket\fP]]
.
.SH BESKRIVNING
.P
Programmet skrevs för att köras i paketskript för att utföra en del åtgärder
som \fBdpkg\fP (ännu) inte själv kan hantera, antingen på grund av designval
eller på grund av nuvarande begränsningar.
.P
Många av dessa åtgärder kräver samordnade åtgärder från flera paketskript
(\fBpreint\fP, \fBpostinst\fP, \fBprerm\fP, \fBpostrm\fP). För att undvika misstag
räcker det att lägga in ett och samma anrop i alla skript, varpå programmet
anpassar sitt beteende beroende på miljövariabeln \fBDPKG_MAINTSCRIPT_NAME\fP
och på paketskriptets parametrar, vilka du måste vidaresända efter dubbla
bindestreck.
.
.SH "DELADE PARAMETRAR"
.TP
\fItidigare\-version\fP
Anger den senaste version av paketet vars uppgradering skall orsaka
händelsen. Det är viktigt att beräkna \fItidigare\-version\fP korrekt så att
operationerna utförs korrekt även om användaren byggt om paketet med en
lokal version. Om \fItidigare\-version\fP är tom eller utelämnas försöks
operationen vid varje uppgradering (notera: det är säkrare att ange
versionen och endast försöka utföra operationen en gång).
Om konffilen inte har sänts med i flera versioner och du nu uppdaterar
utvecklarskripten till att städa bort den gamla filen bör
\fItidigare\-version\fP baseras på den version av paketet du nu förbereder, inte
den första version av paketet som saknade konffilen. Detta gäller på samma
sätt för alla andra åtgärder.
Som ett exempel, för en konffil som togs bort i version \fB2.0\-1\fP av ett
paket bör \fItidigareversion\fP sättas till \fB2.0\-1~\fP. Detta får konffilen att
tas bort även om användaren bygger om den tidigare versionen \fB1.0\-1\fP som
\fB1.0\-1local1\fP. Eller ett paket som bytt en sökväg från att vara en
symbolisk länk (skeppad i version \fB1.0\-1\fP) till en katalog (skeppad i
version \fB2.0\-1\fP), men bara utfört själva ändringen i utvecklarskripten i
version \fB3.0\-1\fP, bör sätta \fItidigareversion\fP till \fB3.0\-1~\fP.
.TP
\fIpaket\fP
The package name owning the pathname(s). When the package is “Multi\-Arch:
same” this parameter must include the architecture qualifier, otherwise it
should \fBnot\fP usually include the architecture qualifier (as it would
disallow cross\-grades, or switching from being architecture specific to
architecture \fBall\fP or vice versa). If the parameter is empty or omitted,
the \fBDPKG_MAINTSCRIPT_PACKAGE\fP and \fBDPKG_MAINTSCRIPT_ARCH\fP environment
variables (as set by \fBdpkg\fP when running the maintainer scripts) will be
used to generate an arch\-qualified package name.
.TP
\fB\-\-\fP
Alla parametrar till utvecklarskripten måste vidaresändas till programmen
efter \fB\-\-\fP.
.SH "KONFFIL\-RELATERADE ÅTGÄRDER"
.P
När ett paket uppgraderas kommer \fBdpkg\fP inte att automatiskt ta bort en
konffil (en konfigurationsfil för vilken \fBdpkg\fP skall behålla användarens
ändringar) om den inte finns i den nya versionen. Det finns två
grundläggande skäl till detta; den första är att konffilen kan ha tappats av
misstag och nästa version kan komma att återställa den, varpå användaren
inte vill tappa sina ändringar. Den andra är att för att göra det möjligt
för paket att gå över från en dpkg\-hanterad konffil till en fil som hanteras
av paketets skript, vanligtvis genom ett verktyg som debconf eller ucf.
.P
Det innebär att, om paketet menar att byta namn eller ta bort en
konfigurationsfil, så måste det göra så explicit, och då kan
\fBdpkg\-maintscript\-helper\fP användas för att implementera en elegant
borttagning och flyttning av konffiler i paketscripten.
.
.SS "Ta bort en konffil"
.P
Om en konffil helt tas bort bör den tas bort från disk, såvida inte
användaren har modifierat den. Om det finns lokala ändringar bör de
bibehållas. Om paketuppgraderingen avbryts bör inte konffilen som just blev
föråldras försvinna.
.P
Allt detta implementeras genom att lägga in följande skalkod i paketskripten
\fBpreinst\fP, \fBpostinst\fP och \fBpostrm\fP:
.P
dpkg\-maintscript\-helper rm_conffile \e
\fIkonffil\fP \fItidigare\-version\fP \fIpaket\fP \-\- "$@"
.P
\fIkonffil\fP är namnet på konffilen som skall tas bort.
.P
Aktuell implementation: i \fBpreinst\fP kontrolleras om konffilen ändrades och
i så fall byts namnet på den till antingen \fIkonffil\fP\fB.dpkg\-remove\fP (om
inte modifierad) eller till \fIkonffil\fP\fB.dpkg\-backup\fP (om modifierad). I
\fBpostinst\fP byts namnet på den sistnämnda filen till \fIkonffil\fP\fB.dpkg\-bak\fP
och behålls som referens om den innehåller ändringar av användaren, medan
den tidigare kommer att tas bort. Om paketuppgraderingen avbryts kommer
\fBpostrm\fP att ominstallera den ursprungliga konffilen. Vid borttagning
kommer \fBpostrm\fP även att ta bort \fB.dpkg\-bak\fP\-filen som behållits fram till
dess.
.
.SS "Byta namn på en konffil"
.P
Om en konffil flyttas från en plats till en annan måste du se till att du
flyttar med eventuella ändringar gjorda av användaren. Detta kan först verka
vara en enkel ändring av \fBpreinst\fP\-skriptet, men det kommer leda till att
användaren ombeds att godkänna ändringar i konffilen för \fBdpkg\fP, även om
denne inte är ansvarig för dem.
.P
En elegant namnändring kan implementeras genom att lägga in följande skalkod
i paketskripten \fBpreinst\fP, \fBpostinst\fP och \fBpostrm\fP:
.P
dpkg\-maintscript\-helper mv_conffile \e
\fIgammalkonffil\fP \fInykonffil\fP \fItidigare\-version\fP \fIpaket\fP \-\- "$@"
.P
\fIgammalkonffil\fP och \fInykonffil\fP är de gamla och nya namnen på konffilen
vars namn skall bytas.
.P
Aktuell implementation: I \fBpreinst\fP kontrolleras om konffilen har ändrats,
om ja lämnas den kvar på plats, annars byts namnet på den till
\fIgammalkonffil\fP\fB.dpkg\-remove\fP. Vid konfigurering tar \fBpostinst\fP bort
\fIgammalkonffil\fP\fB.dpkg\-remove\fP och byter namn på \fIgammalkonffil\fP till
\fInykonffil\fP om \fIgammalkonffil\fP fortfarande finns. Vid avbruten
uppgradering eller installation byter \fBpostrm\fP tillbaka namnet från
\fIgammalkonffil\fP\fB.dpkg\-remove\fP till \fIgammalkonffil\fP om så behövs.
.
.SH "VÄXLING MELLAN SYMLÄNKAR OCH KATALOGER"
.
Vid uppgradering av ett paket kommer \fBdpkg\fP inte att automatiskt byta ut en
symbolisk länk mot en katalog, eller omvänt. Nedgraderingar stöds inte och
sökvägen kommer lämnas som den var.
.
.SS "Byta en symbolisk länk mot en katalog"
.
Om en symbolisk länk byts mot en riktig katalog måste du se till att den
symboliska länken tas bort innan uppackningen. Detta kan först verka vara en
enkel ändring av \fBpreinst\fP\-skriptet, men det kommer leda till vissa problem
om den lokale administratören har justerat den symboliska länken, eller om
paketet skall nedgraderas.
.P
En elegant namnändring kan implementeras genom att lägga in följande skalkod
i paketskripten \fBpreinst\fP, \fBpostinst\fP och \fBpostrm\fP:
.P
dpkg\-maintscript\-helper symlink_to_dir \e
\fIsökväg\fP \fIgammalt\-mål\fP \fItidigare\-version\fP \fIpaket\fP \-\- "$@"
.P
\fIsökväg\fP är den absoluta sökvägen för den gamla symboliska länken (sökvägen
kommer vara en katalog när installationen är färdig) och \fIgammalt\-mål\fP är
målet på den tidigare symboliska länken i \fIsökväg\fP. Den kan antingen vara
absolut eller relativ till katalogen som innehåller \fIsökväg\fP.
.P
Aktuell implementation: I \fBpreinst\fP kontrolleras om den symboliska länken
finns och pekar på \fIgammalt\-mål\fP, om inte lämnas den kvar, i annat fall
byts namnet ut mot \fIsökväg\fP\fB.dpkg\-backup\fP. Vid konfigurering tar
\fBpostinst\fP bort \fIsökväg\fP\fB.dpkg\-bakcup\fP om \fIsökväg\fP\fB.dpkg\-backup\fP
fortfarande är en symbolisk länk. Vid avbruten uppgradering eller
installation byter \fBpostrm\fP tillbaka namnet från \fIsökväg\fP\fB.dpkg\-bakcup\fP
till \fIsökväg\fP om så behövs.
.
.SS "Byta en symbolisk länk mot en katalog"
.
Om en riktig katalog byts mot en symbolisk länk måste du se till att
katalogen tas bort innan uppackningen. Detta kan först verka vara en enkel
ändring av \fBpreinst\fP\-skriptet, men det kommer leda till vissa problem om
katalogen innehåller konffiler, sökvägar som ägs av andra paket, lokalt
skapade sökvägar, eller om paketet skall nedgraderas.
.P
Ett elegant byte kan implementeras genom att lägga in följande skalkod i
paketskripten \fBpreinst\fP, \fBpostinst\fP och \fBpostrm\fP:
.P
dpkg\-maintscript\-helper dir_to_symlink \e
\fIsökväg\fP \fInytt\-mål\fP \fItidigare\-version\fP \fIpaket\fP \-\- "$@"
.P
\fIsökväg\fP är det absoluta namnet på den gamla katalogen (sökvägen kommer
vara en symbolisk länk när installationen är färdig) och \fInytt\-mål\fP är
målet på den nya symboliska länken i \fIsökväg\fP. Den kan antingen vara
absolut eller relativ till katalogen som innehåller \fIsökväg\fP.
.P
Aktuell implementation: I \fBpreinst\fP kontrolleras om katalogen finns, inte
innehåller konffiler, sökvägar som ägs av andra paket, eller lokalt skapade
sökvägar, om inte så kommer den lämnas kvar, annars byts namnet ut mot
\fIsökväg\fP\fB.dpkg\-backup\fP och en tom samlingsplatskatalog skapas i \fIsökväg\fP,
markerad med en fil så att dpkg kan hålla ordning på den. Vid konfigurering
slutför \fBpostinst\fP växlingen om \fIsökväg\fP\fB.dpkg\-backup\fP fortfarande är en
katalog och \fIsökväg\fP är samlingsplatskatalogen; den tar bort
märkningsfilen, flyttar nyligen skapade filer inuti samlingskatalogen till
målet för den symboliska länken \fInytt\-mål\fP/, ersätter den nu tomma
samlingskatalogen \fIsökväg\fP med en symbolisk länk till \fInytt\-mål\fP och tar
bort \fIsökväg\fP\fB.dpkg\-backup\fP. Vid avbruten uppgradering eller installation
byter \fBpostrm\fP tillbaka namnet från \fIsökväg\fP\fB.dpkg\-backup\fP till \fIsökväg\fP
om så behövs.
.
.SH "INTEGRERA I PAKET"
.P
När ett paketeringshjälpprogram används, kontrollera att det har direkt
integrering med \fBdpkg\-maintscript\-helper\fP, något som kan göra ditt liv
enklare. Se till exempel \fBdh_installdeb\fP(1).
.P
Givet att \fBdpkg\-maintscript\-helper\fP används i \fBpreinst\fP så innebär detta
villkorslöst att ett förhandsberoende ("pre\-dependency") krävs för att
försäkra att den nödvändiga versionen av \fBdpkg\fP redan har packats upp. Den
version som krävs beror på vilket kommando som används, för \fBrm_conffile\fP
och \fBmv_conffile\fP är det 1.15.7.2, för \fBsymlink_to_dir\fP och
\fBdir_to_symlnk\fP är det 1.17.14:
.P
\fBPre\-Depends:\fP dpkg (>= 1.17.14)
.P
Men i många fall är operationen som utförs av programmet inte kritiskt för
paketet, och istället för att använda ett förhandsberoende kan vi anropa
programmet endast om vi vet att det nödvändiga kommandot stöds av den nu
installerade \fBdpkg\fP:
.P
if dpkg\-maintscript\-helper supports \fIkommando\fP; then
dpkg\-maintscript\-helper \fIkommando\fP ...
fi
.P
Kommandot \fBsupports\fP returnerar 0 vid framgång, annars 1. Kommandot
\fBsupports\fP kontrollerar om miljövariablerna som sätts av dpkg och som krävs
av skriptet är närvarande, och kommer anse det som ett fel om
miljövariablerna inte är tillräckliga.
.
.SH MILJÖVARIABLER
.TP
\fBDPKG_COLORS\fP
Sets the color mode (since dpkg 1.19.1). The currently accepted values are:
\fBauto\fP (default), \fBalways\fP and \fBnever\fP.
.
.SH "SE ÄVEN"
.ad l
\fBdh_installdeb\fP(1).
.SH ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.
|