summaryrefslogtreecommitdiffstats
path: root/man/pt/dpkg-maintscript-helper.pod
blob: 212447e67e972b7d9391b721f8830e625f07905d (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
        *****************************************************
        *           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 NOME

dpkg-maintscript-helper - contorna limitações conhecidas do dpkg em scripts
de maintainer.

=head1 SINOPSE

B<dpkg-maintscript-helper> I<command> [I<parameter>...] B<-->
I<maint-script-parameter>...

=head1 COMANDOS E PARÂMETROS

=over 

=item B<supports> I<command>

=item B<rm_conffile> I<conffile> [I<prior-version> [I<package>]]

=item B<mv_conffile> I<old-conffile> I<new-conffile> [I<prior-version>
[I<package>]]

=item B<symlink_to_dir> I<pathname> I<old-target> [I<prior-version> [I<package>]]

=item B<dir_to_symlink> I<pathname> I<new-target> [I<prior-version> [I<package>]]

=back

=head1 DESCRIÇÃO

Este programa destina-se a ser corrido dentro de scripts de maintainer para
conseguir algumas tarefas que o B<dpkg> (ainda) não pode lidar nativamente
seja por limitações de desenho ou devido a limitações actuais,

Muitas destas tarefas requerem acções coordenadas dos vários scripts de
maintainer (B<preinst>, B<postinst>, B<prerm>, B<postrm>). Para evitar
enganos a mesma chamada precisa simplesmente de englobar todos os scripts e
o programa irá automaticamente adaptar o seu comportamento baseado na
variável de ambiente B<DPKG_MAINTSCRIPT_NAME> e nos argumentos dos scripts
do maintainer que você tem de reencaminhar após um duplo hífen.

=head1 PARÂMETROS COMUNS

=over 

=item I<prior-version>

Define a versão mais recente do pacote cuja actualização deverá despoletar a
operação. É importante calcular I<prior-version> correctamente para que as
operações sejam correctamente executadas mesmo que o utilizador recompile o
pacote com uma versão local. Se I<prior-version> estiver vazio ou omitido,
então a operação é tentada a cada actualização (nora: é mais seguro fornecer
a versão e ter a operação tentada apenas uma vez).

Se o conffile não tem sido enviado por várias versões, e você está agora a
modificar os scripts do maintainer para limpar o ficheiro obsoleto,
I<prior-version> deve ser baseado na versão do pacote que está agora a
preparar, e não a primeira versão do pacote onde faltou o conffile. Isto
aplica-se a todas as outras acções do mesmo modo.

Por exemplo, para um conffile removido na versão B<2.0-1> de um pacote,
I<prior-version> deve ser definido para B<2.0-1~>. Isto irá fazer com que o
conffile seja removido mesmo que o utilizador recompile a versão anterior
B<1.0-1> como B<1.0-1local1>. Ou um pacote que mude um caminho de um link
simbólico (enviado na versão  B<1.0-1>) para um directório (enviado na
versão B<2.0-1>), mas apenas executando a mudança real nos scripts do
maintainer na versão B<3.0-1>, deve definir I<prior-version> para B<3.0-1~>.

=item I<package>

O nome do pacote que possui os nome(s) de caminho(s). Quando o pacote é
“Multi-Arch: same” este parâmetros tem de incluir o qualificador de
arquitectura, caso contrário B<não> deverá geralmente incluir o qualificador
de arquitectura ((pois iria desautorizar cruzamento de graduação, ou comutar
de ser específico de arquitectura para arquitectura B<all> ou vice
versa). Se o parâmetro estiver vazio ou omitido, as variáveis de ambiente
B<DPKG_MAINTSCRIPT_PACKAGE> e B<DPKG_MAINTSCRIPT_ARCH> (definidas pelo
B<dpkg> ao correr os scripts do maintainer) serão usadas para gerar um nome
de pacote com qualificação de arquitectura.

=item B<-->

Todos os parâmetros dos scripts do maintainer têm de ser encaminhados ao
programa após B<-->.

=back

=head1 TAREFAS RELACIONADAS COM FICHEIROS DE CONFIGURAÇÃO

Ao actualizar um pacote, o B<dpkg> não irá automaticamente remover um
conffile (um ficheiro de configuração para o qual B<dpkg> deve preservar as
alterações do utilizador) se este não estiver presente na versão mais
recente. Existem duas razões principais para isto: a primeira é que o
conffile poderia ser abandonado por acidente e a próxima versão poderia
restaurá-lo., e os utilizadores não querem que as suas alterações sejam
deitadas fora. A segunda é para permitir aos pacotes transitarem ficheiros
de um conffile mantido pelo dpkg para um ficheiro mantido pelos scripts do
maintainer do pacote, geralmente com uma ferramenta como debconf ou ucf.

Isto significa que se um pacote se destina a renomear ou remover um
conffile, deve explicitamente fazê-lo e B<dpkg-maintscript-helper> pode ser
usado para implementar o apagar e mover elegante de conffiles dentro dos
scripts do maintainer.

=head2 Remover um ficheiro de configuração

Nota: Isto pode ser substituído na maioria dos casos pela bandeira
C<remove-on-upgrade> em F<DEBIAN/conffiles> (desde dpkg 1.20.6), veja
L<deb-conffiles(5)>.

Se um conffile for completamente removido, deve ser removido do disco, a
menos que o utilizador o tenha modificado. Se existirem modificações locais,
estas devem ser preservadas. Se a actualização do pacote abortar, o conffile
obsoleto mais recente não deve desaparecer.

tudo isto é implementado ao colocar o seguinte fragmento de shell nos
scripts de maintainer B<preinst>, B<postinst> e B<postrm>:

=over 

Z<>
 dpkg-maintscript-helper rm_conffile \
    I<conffile> I<prior-version> I<package> -- "$@"

=back

I<conffile> é o nome de ficheiro do conffile a remover.

Implementação actual: no B<preinst>, verifica se o conffile foi modificado e
renomeia-o ou para I<conffile>B<.dpkg-remove> (se não modificado) ou para
I<conffile>B<.dpkg-backup> (se modificado). No B<postinst>, o último
ficheiro é renomeado para I<conffile>B<.dpkg-bak> e mantido para referência
pois contem modificações do utilizador mas o antigo será removido. Se a
actualização ao pacote abortar, o B<postrm> reinstala o conffile
original. Durante a purga, o B<postrm> irá também apagar o ficheiro
B<.dpkg-bak> mantido até à data.

=head2 Renomear um conffile

Se um conffile for movido de uma localização para outra, você precisa de
certificar que se move por quaisquer alterações que o utilizador tenha
feito. Isto pode parecer uma mudança simples para o script B<preinst> no
inicio, no entanto isso vai resultar no utilizador a ser questionado pelo
B<dpkg> para aprovar as edições no conffile mesmo este não sendo o
responsável por elas.

O renomear elegante pode ser implementado ao colocar o seguinte fragmente do
shell nos scripts de maintainer B<preinst>, B<postinst> e B<postrm>:

=over 

Z<>
 dpkg-maintscript-helper mv_conffile \
    I<old-conffile> I<new-conffile> I<prior-version> I<package> -- "$@"

=back

I<old-conffile> e I<new-conffile> sãos os nomes antigo e novo do conffile a
renomear.

Implementação actual: o B<preinst> verifica se o conffile foi modificado. Se
sim, é deixado no lugar, caso contrário é renomeado para
I<old-conffile>B<.dpkg-remove>. Durante a configuração, o B<postinst> remove
I<old-conffile>B<.dpkg-remove> e renomeia I<old-conffile> para
I<new-conffile> se I<old-conffile> ainda estiver disponível. No
abortar-actualização/abortar-instalação, o B<postrm> renomeia
I<old-conffile>B<.dpkg-remove> de volta a I<old-conffile> se necessário.

=head1 LINKS SIMBÓLICOS E SWITCHES DE DIRECTÓRIO

Ao actualiza um pacote, o B<dpkg> não irá mudar automaticamente de um link
simbólico para um directório ou vice-versa. Downgrades (descidas de versão)
não são suportados e o caminho irá ser deixado como está.

=head2 Alternar um link simbólico para directório

Se um link simbólico for mudado para um directório real, você precisa de
certificar que o link simbólico é removido antes de desempacotar. Isto pode
parecer uma mudança simples para o script B<preinst> no inicio, no entanto
isso irá resultar em alguns problemas no caso de personalização local
administrativa do link simbólico ou quando se retrocede na versão do pacote
(downgrade).

O renomear elegante pode ser implementado ao colocar o seguinte fragmente do
shell nos scripts de maintainer B<preinst>, B<postinst> e B<postrm>:

=over 

Z<>
 dpkg-maintscript-helper symlink_to_dir \
    I<pathname> I<old-target> I<prior-version> I<package> -- "$@"

=back

I<pathname> é o nome absoluto do link simbólico antigo (o caminho será um
directório no final da instalação) e I<old-target> é o nome do alvo do link
simbólico anterior em I<pathname>. Pode ser ou absoluto ou relativo ao
directório que contem I<pathname>.

Implementação actual: o B<preinst> verifica se o link simbólico existe e
aponta para I<old-target>, se não então deixa-o como estiver, caso contrário
é renomeado para I<pathname>B<.dpkg-backup>. Na configuração, o B<postinst>
remove I<pathname>B<.dpkg-backup> se I<pathname>B<.dpkg-backup> for ainda um
link simbólico. Ao aborta actualização/instalação. o B<postrm> renomeia
<pathname>B<.dpkg-backup> de volta para I<pathname> se necessário.

=head2 Alternar um directório para link simbólico

Se um directório é comutado para um link simbólico, você precisa de
certificar-se antes de desempacotar que o directório foi removido. Isto pode
parecer no início uma alteração simples ao script B<preinst>, no entanto
isso vai resultar em alguns problemas se o directório conter conffiles,
nomes de caminhos possuídos por outros pacotes, nomes de caminhos criados
localmente, ou quando instala uma versão anterior do pacote (downgrade).

Mudança elegante pode ser implementada ao colocar o seguinte fragmento de
shell nos scripts B<preinst>, B<postinst> e B<postrm> do maintainer:

=over 

Z<>
 dpkg-maintscript-helper dir_to_symlink \
    I<pathname> I<new-target> I<prior-version> I<package> -- "$@"

=back

I<pathname> é o nome absoluto do directório antigo (o caminho será um link
simbólico no final da instalação) e I<new-target> é o alvo do novo link
simbólico em I<pathname>. Pode ser ou absoluto ou relativo ao directório que
contem I<pathname>.

Implementação actual: o B<preinst> verifica se o directório existe, não
contém conffiles, nomes de caminhos possuídos por outros pacotes, ou nomes
de caminhos criados localmente, se não então é deixa-do como está, caso
contrário é renomeado para I<pathname>B<.dpkg-backup>, e é criado um
directório vazio estagiário chamado I<pathname>, marcado com um ficheiro
para que o dpkg o possa acompanhar. Na configuração, o B<postinst> termina a
comutação se I<pathname>B<.dpkg-backup> for ainda um directório e se
I<pathname> é o directório de estagiário; remove o ficheiro marcador do
directório estagiário, move os ficheiros acabados de criar dentro do
directório estagiário para o link simbólico alvo I<new-target>/, substitui o
agora vazio directório estagiário I<pathname> com um link simbólico para
I<new-target>, e remove I<pathname>B<.dpkg-backup>. Ao abortar
actualização/instalação, o B<postrm> renomeia I<pathname>B<.dpkg-backup> de
volta para I<pathname> se necessário.

=head1 INTEGRAÇÃO EM PACOTES

Quando usar um ajudante de empacotamento, por favor verifique se ele tem
integração com B<dpkg-maintscript-helper> nativa, o que pode tornar a sua
vida mais fácil. Veja por exemplo B<dh_installdeb>(1).

Dado que B<dpkg-maintscript-helper> é usado no B<preinst>, usá-lo
incondicionalmente requer uma pré-dependência para assegurar que a versão
requerida do B<dpkg> já foi desempacotada antes. A versão requerida depende
do comando usado, para B<rm_conffile> e B<mv_conffile> é 1.15.7.2, para
B<symlink_to_dir> e B<dir_to_symlink> é 1.17.14:

=over 

 Pre-Depends: dpkg (>= 1.17.14)

=back

Mas em muitos casos a operação feita pelo programa não é crítica para o
pacote, e em vez de usar uma pré-dependência nós podemos chamar o programa
apenas quando sabemos que o comando requerido é suportado pelo B<dpkg>
presentemente instalado:

=over 

Z<>
 if dpkg-maintscript-helper supports I<command>; then
    dpkg-maintscript-helper I<command> ...
 fi

=back

O comando B<supports> irá retornar 0 em sucesso, 1 caso contrário. O comando
B<supports> irá verificar se as variáveis de ambiente estão presentes como
definidas pelo dpkg e requeridas pelo script, e irá considerar um fracasso
no caso do ambiente não ser suficiente.

=head1 AMBIENTE

=over 

=item B<DPKG_ROOT>

Se definido, será usado como o directório raiz do sistema de ficheiros.

=item B<DPKG_ADMINDIR>

Se definido, será usado como o directório de dados do B<dpkg>.

=item B<DPKG_COLORS>

Define o modo de cor (desde dpkg 1.19.1). Os valores presentemente aceites
são: B<auto> (predefinição), B<always> e B<never>.

=back

=head1 VEJA TAMBÉM

B<dh_installdeb>(1).


=head1 TRADUÇÃO

Américo Monteiro

Se encontrar algum erro na tradução deste documento, por favor comunique para
Américo Monteiro <a_monteiro@gmx.com>.