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
|
*****************************************************
* 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-shlibdeps - gera dependências substvar de biblioteca partilhada
=head1 SINOPSE
B<dpkg-shlibdeps> [I<option>...] [B<-e>] I<executable> [I<option>...]
=head1 DESCRIÇÃO
B<dpkg-shlibdeps> calcula dependências de bibliotecas partilhadas para executáveis nomeados nos seus argumentos. As dependências são adicionadas ao ficheiro de variáveis de substituição B<debian/substvars> como nomes de variáveis B<shlibs:>I<dependency-field> onde I<dependency-field> é um nome de campo de dependência. Quaisquer outras variáveis começadas com B<shlibs:> são removidas do ficheiro.
B<dpkg-shlibdeps> tem duas possíveis fontes de informação para gerar a informação de dependências. Seja ficheiros I<symbols> ou ficheiros I<shlibs>. Para cada binário que o B<dpkg-shlibdeps> analise, ele encontra a lista de binários com que tem links. Depois, para cada biblioteca, procura pelo ficheiro I<symbols>, ou pelo ficheiro I<shlibs> (se o anterior não existir ou se debian/shlibs.local conter a dependência relevante). Ambos ficheiros são supostos serem fornecidos pelo pacote biblioteca e devem assim estarem disponíveis como as %ADMINDIR%/info/I<package>.I<symbols> ou %ADMINDIR%/info/I<package>.I<shlibs>. O nome do pacote é identificado em dois passos: encontrar o ficheiro biblioteca no sistema (procurando nos mesmos directórios que B<ld.so> iria usar), depois usar B<dpkg -S> I<library-file> para procurar o pacote que fornece a biblioteca.
=head2 Ficheiros de Símbolos
Ficheiros Symbols contêm informação de dependências afinada ao fornecerem a dependência mínima para cada símbolo que a biblioteca exporta. O script tenta encontrar um ficheiro de símbolos associado a um pacote biblioteca nos seguintes locais (é usada a primeira correspondência):
=over
=item debian/*/DEBIAN/symbols
Informação de biblioteca partilhada gerada pelo actual processo de compilação que também invocou B<dpkg-shlibdeps>. São gerados por B<dpkg-gensymbols>(1). São apenas usados se a biblioteca for encontrada na árvore de compilação do pacote. O ficheiro de símbolos nessa árvore de compilação toma precedência sobre ficheiros de símbolos de outros pacotes binários.
=item %PKGCONFDIR%/symbols/I<package>.symbols.I<arch>
=item %PKGCONFDIR%/symbols/I<package>.symbols
Informação de sobreposição por-sistema de dependência de biblioteca partilhada. I<arch> é a arquitectura do sistema actual (obtida por B<dpkg-architecture -qDEB_HOST_ARCH>).
=item Resultado de “B<dpkg-query --control-path> I<package> symbols”
Informação de dependências de bibliotecas partilhadas fornecidas pelo pacote. A menos que sobrepostas por B<--admindir>, esses ficheiros estão localizados em %ADMINDIR%.
=back
Enquanto sonda os símbolos usados por todos os binários, o B<dpkg-shlibdeps> lembra-se da versão mínima (mais alta) necessária para cada biblioteca. No final do processo, é capaz de escrever a dependência mínima para cada biblioteca usada (desde que a informação dos ficheiros I<symbols> esteja exacta).
Como medida de salva-guarda, um ficheiro de símbolos pode fornecer um campo de meta-informação B<Build-Depends-Package> e B<dpkg-shlibdeps> irá extrair a versão mínima requerida pelo pacote correspondente no campo B<Build-Depends> e usa esta versão se for maior que a versão mínima computada pela sondagem dos símbolos.
=head2 Ficheiros shlibs
Ficheiros Shlibs associam directamente uma biblioteca a uma dependência (sem olhar para os símbolos). É assim geralmente mais forte do que realmente necessário mas muito seguro e fácil de manusear.
As dependências por uma biblioteca são procuradas em vários lugares. É usado o primeiro ficheiro que providencia informação para a biblioteca que interessa:
=over
=item debian/shlibs.local
Informação de dependência de biblioteca partilhada que sobrepõe pacote local
=item %PKGCONFDIR%/shlibs.override
Informação de dependência de biblioteca partilhada de sobreposição por sistema.
=item debian/*/DEBIAN/shlibs
Informação de biblioteca partilhada gerada pelo actual processo de compilação que também invocou B<dpkg-shlibdeps>. São apenas usados se a biblioteca for encontrada na árvore de compilação do pacote. O ficheiro shlibs nessa árvore de compilação toma precedência sobre ficheiros shlibs de outros pacotes binários.
=item Resultado de “B<dpkg-query --control-path> I<package> shlibs”
Informação de dependências de bibliotecas partilhadas fornecidas pelo pacote. A menos que sobrepostas por B<--admindir>, esses ficheiros estão localizados em %ADMINDIR%.
=item %PKGCONFDIR%/shlibs.default
Informação de dependência de biblioteca partilhada predefinida por sistema.
=back
as dependências extraídas são depois usadas directamente (excepto se forem filtradas porque foram identificadas como duplicadas, ou como mas fracas que outra dependência).
=head1 OPÇÕES
B<dpkg-shlibdeps> interpreta argumentos não-opção como nomes executáveis, como se eles fosse fornecidos como B<-e>I<executable>.
=over
=item B<-e>I<executable>
Inclui as dependências apropriadas para as bibliotecas partilhadas requeridas pelo I<executável>. Esta opção pode ser usada várias vezes.
=item B<-l>I<directory>
Adiciona I<directory> ao inicio da lista de directórios a pesquisar por bibliotecas partilhadas privadas (desde dpkg 1.17.0). Esta opção pode ser usada várias vezes.
B<Nota:> Use esta opção em vez de definir B<LD_LIBRARY_PATH>, pois essa variável de ambiente é usado para controlar o vinculador de tempo-de-execução e abusar dela para definir caminhos de bibliotecas partilhadas durante a compilação pode ser problemático quando, por exemplo, se faz compilações cruzadas.
=item B<-d>I<dependency-field>
Todas as dependências a serem adicionadas ao campo de dependências do ficheiro de controle I<dependency-field>. (As dependências para este campo são colocadas na variável B<shlibs:>I<dependency-field>.)
A opção B<-d>I<dependency-field> produz efeito para todos os executáveis após a opção, até ao próximo B<-d>I<dependency-field>. A predefinição de I<dependency-field> é B<Depends>.
Se a mesma entrada de dependência (ou conjunto de alternativas) aparecer em mais do que um dos nomes de campos de dependência reconhecida B<Pre-Depends>, B<Depends>, B<Recommends>, B<Enhances> ou B<Suggests> então B<dpkg-shlibdeps> irá remover automaticamente a dependência de todos os campos excepto daquele que representa as dependências mais importantes.
=item B<-p>I<varname-prefix>
Começa as variáveis de substituição com I<varname-prefix>B<:> em vez de B<shlibs:>. Do mesmo modo, quaisquer variáveis de substituição existentes que comecem com I<varname-prefix>B<:> (em vez de B<shlibs:>) são removidas do ficheiros de variáveis de substituição.
=item B<-O>[I<filename>]
Escreve as definições de variáveis de substituição na saída standard (ou I<filename> se especificado, desde dpkg 1.17.2), em vez de serem adicionadas ao ficheiro de variáveis de substituição (B<debian/substvars> por predefinição).
=item B<-t>I<type>
Informação etiquetada de dependência de biblioteca partilhada preferida para o tipo de pacote dado. Se não existir informação etiquetada, cai para a informação não etiquetada. O tipo de pacote predefinido é B<deb>. A informação de dependência de biblioteca partilhada é etiquetada para um determinado tipo ao prefixa-la com o nome to tipo, dois pontos, e espaço em branco.
=item B<-L>I<local-shlibs-file>
Lê informação de sobreposição de dependência de biblioteca partilhada a partir de I<local-shlibs-file> em vez de B<debian/shlibs.local>.
=item B<-T>I<substvars-file>
Escreve variáveis de substituição em I<substvars-file>; a predefinição é B<debian/substvars>.
=item B<-v>
Activa o modo detalhado (desde dpkg 1.14.8). São mostradas numerosas mensagens para explicar o que o B<dpkg-shlibdeps> faz.
=item B<-x>I<package>
Exclui o pacote das dependências geradas (desde dpkg 1.14.8). Isto é útil para evitar auto-dependências para pacotes que fornecem binários ELF (executáveis ou plugins biblioteca) usando uma biblioteca contida no mesmo pacote. Esta opção pode ser usada várias vezes para excluir vários pacotes.
=item B<-S>I<package-build-dir>
Procura primeiro em I<package-build-dir> quando tenta encontrar uma biblioteca (desde dpkg 1.14.15). Isto é útil quando o pacote fonte compila vários sabores da mesma biblioteca e você quer assegurar que obtém a dependência a partir de um determinado pacote binário. Você pode usar esta opção várias vezes: directórios serão tentados na mesma ordem antes de directórios de outros pacotes binários.
=item B<-I>I<package-build-dir>
Ignora I<package-build-dir> quando procurar por shlibs, symbols, e ficheiros de biblioteca partilhada (desde dpkg 1.18.5). Você pode usar esta opção várias vezes.
=item B<--ignore-missing-info>
Não falha se a informação de dependência não pode ser encontrada para uma biblioteca partilhada (desde dpkg 1.14.8). A utilização desta opção é desencorajada, todas as bibliotecas devem fornecer informação de dependências (seja com ficheiros shlibs, ou com ficheiros symbols) mesmo se ainda não forem usadas por outros pacotes.
=item B<--warnings=>I<value>
I<value> é um campo de bit que define o conjunto de avisos que podem ser emitidos pelo B<dpkg-shlibdeps> (desde dpkg 1.14.17). Bit 0 (valor=1) activa o aviso “symbol I<sym> usado por I<binary> encontrado em nenhuma das bibliotecas, bit 1 (valor=2) activa o aviso “pacote podia evitar uma dependência inútil” e bit 2 (valor=4) activa o aviso “I<binary> não deveria estar em link contra I<library>”. O I<value> predefinido é 3: os dois primeiros avisos estão activos por predefinição, o último não está. Defina I<value> para 7 se deseja ter todos os avisos activos.
=item B<--admindir=>I<dir>
Altera a localização da base de dados do B<dpkg> (desde dpkg 1.14.0). A localização predefinida é I<%ADMINDIR%>.
=item B<-?>, B<--help>
Mostra a mensagem de utilização e termina.
=item B<--version>
Mostra a versão e termina.
=back
=head1 AMBIENTE
=over
=item B<DPKG_COLORS>
Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: B<auto> (predefinido), B<always> e B<never>.
=item B<DPKG_NLS>
Se definida, será usada para decidir se deve activar o Suporte a Linguagem Nativa. Também como conhecido como suporte de internacionalização (ou i18n) (desde dpkg 1.19.0). Os valores aceites são B<0> e B<1> (predefinição).
=back
=head1 DIAGNÓSTICO
=head2 Avisos
Como o B<dpkg-shlibdeps> analisa o conjunto de símbolos usados por cada binário do pacote gerado, é capaz de emitir avisos em vários casos. Eles informam-o de coisas que podem ser melhoradas no pacote. Na maioria dos casos, esses melhoramentos interessam directamente às fontes do autor. Por ordem de importância descendente, aqui estão os vários avisos que você pode encontrar:
=over
=item B<symbol> I<sym> B<used by> I<binary> B<found in none of the libraries.>
O símbolo indicado não foi encontrado nas bibliotecas em link com o binário. O I<binary> é mais certamente uma biblioteca e precisa de ser ligada em link com uma biblioteca adicional durante o processo de compilação (opção B<-l>I<library> do vinculador).
=item I<binary> B<contains an unresolvable reference to symbol> I<sym>B<: it's
probably a plugin>
O símbolo indicado não foi encontrado nas bibliotecas em link com o binário. O I<binary> é mais certamente um plugin e o símbolo é provavelmente fornecido pelo programa que carrega este plugin. Em teoria um plugin não tem nenhum SONAME mas este binário tem um e como tal ele não pôde ser claramente identificado como tal. No entanto, o facto de que o binários está armazenado num directório não-público é uma forte indicação que não é uma biblioteca partilhada normal. Se o binário é mesmo um plugin, então esqueça este aviso. Mas há sempre a possibilidade que seja uma biblioteca real e que esses programas em link com ela estejam a usar uma RPATH para que o carregador dinâmico as encontre. Nesse caso, a biblioteca está quebrada e precisa de ser reparada.
=item B<package could avoid a useless dependency if> I<binary> B<was not linked
against> I<library> B<(it uses none of the library's symbols)>
Nenhum dos I<binaries> que estão em link com I<library> usam qualquer dos símbolos fornecidos pela biblioteca. Ao corrigir todos os binários, você deveria evitar a dependência associada a esta biblioteca (a menos que a mesma dependência seja também gerada por outra biblioteca que seja realmente usada).
=item B<package could avoid a useless dependency if> I<binaries> B<were not linked
against> I<library> B<(they use none of the library's symbols)>
Exactamente o mesmo que o aviso em cima, mas para múltiplos binários.
=item I<binary> B<should not be linked against> I<library> B<(it uses none of the
library's symbols)>
O I<binary> está ligado em link com uma biblioteca que não precisa. Não é um problema mas pode-se obter algum pequeno melhoramento de performance no tempo de carga do binário se não se ligar esta biblioteca a este binário. Este aviso verifica a mesma informação que o anterior mas fá-lo para cada binário em vez de fazer as verificações globalmente para todos os binários analisados.
=back
=head2 Erros
B<dpkg-shlibdeps> irá falhar se não conseguir encontrar uma biblioteca pública usada por um binário ou se esta biblioteca não tiver informação de dependência associada (seja um ficheiro shlibs ou symbols). Uma biblioteca pública tem um SONAME e é versionado ((libsomething.so.I<X>). Uma biblioteca privada (como um plugin) não deve ter um SONAME e não precisa de ser versionada.
=over
=item B<couldn't find library> I<library-soname> B<needed by> I<binary> B<(its
RPATH is '>I<rpath>B<')>
O I<binary> usa uma biblioteca chamada I<library-soname> mas o B<dpkg-shlibdeps> não foi capaz de encontrar a biblioteca. B<dpkg-shlibdeps> cria uma lista de directórios a verificar como se segue: directórios listados na RPATH do binário, directórios adicionados pela opção B<-l>, directórios listados na variável de ambiente B<LD_LIBRARY_PATH>, directórios de multi-arquitectura cruzada (ex. /lib/arm64-linux-gnu, /usr/lib/arm64-linux-gnu), directórios públicos standard (/lib, /usr/lib), directórios listados em /etc/ld.so.conf, e directórios multilib obsoletos (/lib32, /usr/lib32, /lib64, /usr/lib64). Depois verifica esses directórios na árvore de compilação do pacote do binário a ser analisado, nas árvores de compilação dos pacotes indicados com a opção de linha de comandos B<-S>, nas árvores de compilação de outros pacotes que contêm um ficheiro DEBIAN/shlibs ou DEBIAN/symbols e finalmente no directório raiz. Se a biblioteca não for encontrada em nenhum destes directórios, então você vai obter este erro.
Se a biblioteca não encontrada está num directório privado do mesmo pacote, então você tem de adicionar o directório com B<-l>. Se está noutro pacote binário a ser compilado, então você tem de certificar-se que o ficheiro shlibs/symbols deste pacote já está criado e que o B<-l> contém o directório apropriado se estiver também num directório privado.
=item B<no dependency information found for> I<library-file> B<(used by>
I<binary>B<).>
A biblioteca necessária pelo I<binary> foi encontrada pelo B<dpkg-shlibdeps> em I<library-file> mas B<dpkg-shlibdeps> não foi capaz de encontrar nenhuma informação de dependência para essa biblioteca. Para encontrar a dependência, tentou mapear a biblioteca a um pacote Debian com a ajuda de B<dpkg -S> I<library-file>. Depois verificou os ficheiros shlibs e symbols correspondentes em %ADMINDIR%/info/, e nas várias árvores de compilação de pacotes (debian/*/DEBIAN/).
Esta falha pode ser causada por um ficheiro shlibs ou symbols mau ou em falta no pacote da biblioteca. Também pode acontecer se a biblioteca for compilada dentro do mesmo pacote fonte e se os ficheiros shlibs ainda não foram criados (que neste caso você tem de corrigir debian/rules para criar o shlibs antes de chamar B<dpkg-shlibdeps>). Uma má RPATH também pode levar a que a biblioteca seja encontrada sob um nome não-canónico (exemplo: /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 em vez de /usr/lib/libssl.so.0.9.8) que não está associado a nenhum pacote, o B<dpkg-shlibdeps> tenta contornar isto ao tentar descer para um nome canónico (usando B<realpath>(3)) mas pode nem sempre funcionar. É sempre melhor limpar a RPATH do binário para evitar problemas.
Chamar o B<dpkg-shlibdeps> em modo detalhado (B<-v>) irá providenciar muito mais informação acerca de onde ele tentou encontrar a informação de dependência. Isto pode ser útil se você não perceber porquê está a dar-lhe este erro.
=back
=head1 VEJA TAMBÉM
B<deb-substvars>(5), B<deb-shlibs>(5), B<deb-symbols>(5), B<dpkg-gensymbols>(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>.
|