NOMBRE¶
dpkg-shlibdeps - Genera dependencias de bibliotecas compartidas de
sustitución de variables
SINOPSIS¶
dpkg-shlibdeps [
opción...] [
-e]
ejecutable
[
opción...]
DESCRIPCIÓN¶
dpkg-shlibdeps calcula las dependencias de bibliotecas compartidas de los
ejecutables suministrados en sus argumentos. Las dependencias se añaden
al fichero de sustitución de variables
debian/substvars como
nombres de variable
shlibs:campo-dependencia, donde
campo-dependencia es un nombre de campo de dependencia. Cualquier otra
variable que empiece con
shlibs: se elimina del fichero.
dpkg-shlibdeps tiene dos posibles fuentes de información para
generar la información de dependencias. Estos son los ficheros
symbols y
shlibs. Por cada binario que
dpkg-shlibdeps
analiza, busca la lista de bibliotecas enlazadas con éste. Entonces,
por cada biblioteca, busca el fichero
symbols o el fichero
shlibs (en caso de que el primero no exista, o si
«debian/shlibs.local» contiene la dependencia relevante). Se
asume que el paquete de la biblioteca proporciona ambos ficheros, y por ello
debería estar disponible como «/var/lib/dpkg/info/
paquete.
symbols» o «/var/lib/dpkg/info/
package.
shlibs». El nombre del paquete se identifica en
dos pasos: búsqueda en el sistema del fichero de la biblioteca
(buscando en los mismos directorios que usaría
ld.so), y
ejecución de
dpkg -S library-file para conocer el paquete
que proporciona la biblioteca.
Ficheros de símbolos¶
Los ficheros de símbolos contienen una información más
precisa de las dependencias, proporcionando la dependencia mínima de
cada símbolo que la biblioteca exporta. El script intenta encontrar un
fichero de símbolos asociado al paquete de la biblioteca en las
siguientes ubicaciones (se usa la primera coincidencia):
- debian/*/DEBIAN/symbols
- La información de biblioteca compartida generada por el proceso de
construcción actual, que también ejecuta
dpkg-shlibdeps. Se generan mediante dpkg-gensymbols(1).
Sólo se usan en caso de encontrar la biblioteca en la árbol
de construcción del paquete. El fichero de símbolos de ese
árbol de construcción tiene prioridad sobre los ficheros de
símbolos de otros paquetes binarios.
- /etc/dpkg/symbols/paquete.symbols.arquitectura
- /etc/dpkg/symbols/paquete.symbols
- Información de redefinición de bibliotecas compartidas por
cada sistema. arquitectura es la arquitectura del sistema actual
(obtenido mediante dpkg-architecture - qDEB_HOST_ARCH).
- Salida de “dpkg-query --control-path package
symbols”
- Package-provided shared library dependency information. Unless overridden
by --admindir, those files are located in /var/lib/dpkg.
dpkg-shlibdeps recuerda la versión mínima (más
grande) necesaria para cada biblioteca al analizar los símbolos usados
por todos los binarios. Al finalizar el proceso, puede escribir la dependencia
mínima para cada biblioteca usada (siempre que la información de
los ficheros
symbols sea precisa).
As a safe-guard measure, a symbols file can provide a
Build-Depends-Package meta-information field and
dpkg-shlibdeps
will extract the minimal version required by the corresponding package in the
Build-Depends field and use this version if it's higher than the
minimal version computed by scanning symbols.
Ficheros «shlibs»¶
Los ficheros «shlibs» asocian de forma directa una librería
con una dependencia (sin analizar «symbols»). Por ello, es
más sólido que necesario, pero sencillo y seguro de manipular.
Las dependencias de una biblioteca se buscan en varias ubicaciones. Se
usará el primer fichero que proporcione información de la
biblioteca relevante.
- debian/shlibs.local
- Información acerca de redefinición de dependencias de
bibliotecas compartidas específicas al paquete local.
- /etc/dpkg/shlibs.override
- Información acerca de redefinición de dependencias de
bibliotecas compartidas para cada sistema.
- debian/*/DEBIAN/shlibs
- La información de bibliotecas compartidas generada por el proceso
de construcción actual, que dpkg-shlibdeps también
ejecuta. Sólo se usa si la biblioteca se encuentra en el
árbol de construcción del paquete. El fichero
«shlibs» en el árbol de construcción tiene
prioridad sobre otros ficheros «shlibs» de otros paquetes
binarios.
- Salida de “dpkg-query --control-path package
shlibs”
- Package-provided shared library dependency information. Unless overridden
by --admindir, those files are located in /var/lib/dpkg.
- /etc/dpkg/shlibs.default
- Información del sistema acerca de las dependencias predefinidas de
bibliotecas compartidas.
Tras ello, se usan las dependencias extraídas directamente (a menos que
se hayan omitido debido que se les identifique como duplicados, o como
más débiles que otra dependencia).
OPCIONES¶
dpkg-shlibdeps interpreta cualquier argumento que no sea una
opción como el nombre de un fichero ejecutable, igual que si se
hubiesen proporcionado con
-eejecutable.
- -eejecutable
- Include dependencies appropriate for the shared libraries required by
executable. This option can be used multiple times.
- -ldirectory
- Add directory to the list of directories to search for private
shared libraries (since dpkg 1.17.0). This option can be used multiple
times.
Note: Use this option instead of setting LD_LIBRARY_PATH, as that
environment variable is used to control the run-time linker and abusing it
to set the shared library paths at build-time can be problematic when
cross-compiling for example.
- -dcampo-dependencias
- Añade dependencias al campo campo-dependencias del fichero
de control. (Las dependencias para este campo se ubican en la variable
shlibs: campo-dependencias).
La opción -dcampo-dependencias tiene efecto para todos
los ejecutables después de dicha opción, hasta el siguiente
-dcampo-dependencias. Por omisión el
campo-dependencias es Depends.
Si la misma dependencia (o un conjunto de alternativas) aparece en
más de uno de los nombres de campo de dependencias reconocidos:
Pre-Depends, Depends, Recommends, Enhances o
Suggests, dpkg-shlibdeps eliminará
automáticamente la dependencia de todos los campos, exceptuando
aquél que contenga las dependencias más importantes.
- -pprefijo-de-variable
- Provoca que las variables de sustitución empiecen por
prefijo-de-variable : en vez de shlibs:. Asimismo,
cualquier variable de sustitución ya existente que empiece por
prefijo-de-variable : (en vez de shlibs:) se
eliminará del fichero de sustitución de variables.
- -O[filename]
- Print substitution variable settings to standard output (or
filename if specified), rather than being added to the substitution
variables file ( debian/substvars by default).
- -ttipo
- Da prioridad a la información de dependencia de bibliotecas
compartidas etiquetada para el tipo de paquete dado. En caso de no existir
ninguna información etiquetada, usa información sin
etiquetar por omisión. El tipo de paquete predefinido es
«deb». La información de dependencia de bibliotecas
compartidas se etiqueta para un tipo dado prefijando éste con el
nombre del tipo, dos puntos, y un espacio.
- -Lfichero-shlibs-local
- Provoca que dpkg-shlibs lea la información sobre
dependencias con bibliotecas compartidas desde fichero-shlibs-local
en vez de debian/shlibs.local.
- -Tfichero-variables-sustitución
- Escribe las variables de sustitución en
fichero-sustitución-variables; por omisión
debian/substvars.
- -v
- Activa el modo informativo. Se muestran numerosos mensajes que explican
las acciones de dpkg-shlindeps.
- -xpaquete
- Excluye el paquete de las dependencias generadas. Es útil para
evitar auto-dependencias de paquetes que proporcionan binarios ELF
(ejecutables o extensiones de bibliotecas) y que usan una biblioteca
contenida en el mismo paquete. Esta opción se puede utilizar varias
veces para excluir varios paquetes.
- -Sdirectorio-compilación-paquete
- Analiza el directorio-compilación-paquete primero al buscar
una biblioteca. Es útil cuando el paquete fuente genera distintas
variantes de la misma biblioteca, y quiere asegurar que obtiene la
dependencia de un paquete binario dado. Puede utilizar esta opción
varias veces: los directorios se analizan en el mismo orden antes de
analizar los directorios de otros paquetes binarios.
- --ignore-missing-info
- No devuelve un fallo en caso de no encontrar la información de
dependencia de una biblioteca compartida. No se recomienda utilizar esta
opción ya que todas las bibliotecas deberían proporcionar
información de dependencia (mediante los ficheros
«shlibs», o ficheros de símbolos), incluso cuando
otros paquetes no los usan actualmente.
- --warnings=valor
- valor es un campo de bit que define el conjunto de avisos que
dpkg-shlibdeps puede mostrar. Bit 0 (valor=1) activa el aviso
«symbol sym used by binary found in none of the
libraries», el bit 1 (valor=2) activa el aviso «package
could avoid a useless dependency», y bit 2 (valor=4) activa el
aviso « binary shouldn't be linked with
library». El valor predefinido es 3: los dos primeros
avisos están activados por omisión, y no el último.
Defina el valor con 7 si desea que todos los avisos estén
activos.
- --admindir=directorio
- Cambia el directorio con la base de datos de dpkg. Por
omisión es /var/lib/dpkg.
- -?, --help
- Muestra el modo de uso y termina.
- --version
- Muestra la versión y termina.
DIAGNÓSTICOS¶
Warnings¶
Debido a que
dpkg-shlibdeps analiza el conjunto de símbolos usado
por cada binario del paquete generado, puede mostrar avisos en varias
situaciones. Éstos informan de aspectos mejorables del paquete. En la
mayoría de los casos, conciernen directamente a las fuentes original. A
continuación se muestran los varios mensajes de advertencia que pueden
aparecer, por orden de importancia decreciente.
- symbol sym used by binary found in none of
the libraries.
- El símbolo indicado no se encontró en las bibliotecas
enlazadas con el binario. Posiblemente, binario es una biblioteca,
y necesita estar enlazado con una biblioteca adicional durante el proceso
de construcción (opción -lbiblioteca del
enlazador).
- binary contains an unresolvable reference to symbol
sym : it's probably a plugin
- El símbolo indicado no se ha encontrado en las bibliotecas
enlazadas con el binario. Probablemente, el binario es una
extensión, y cabe que el programa que carga tal extensión
proporciona el símbolo. Teóricamente, una extensión
no tiene ningún «SONAME», pero sí este
binario, y por ello no se le puede identificar claramente como tal.
Aún así, el hecho de que el binario se guarda en un
directorio no público es una indicación de que no es una
biblioteca compartida normal. Si el binario es realmente una
extensión, no haga caso de este aviso. Siempre cabe la posibilidad
de que es una biblioteca real, y que los programas que enlazan con el usan
un «RPATH» para que el cargador dinámico lo
encuentre. En tal caso, la biblioteca está rota y precisa un
arreglo.
- package could avoid a useless dependency if binary was
not linked against library (it uses none of the library's
symbols)
- Ninguno de los binarios enlazados con la biblioteca usan
símbolos que proporciona la biblioteca. Al arreglar todos los
binarios, evitaría la dependencia asociada a esta biblioteca (a
menos que la dependencia se genere también para otra biblioteca que
sí la usa).
- package could avoid a useless dependency if binaries were
not linked against library (they uses none of the library's
symbols)
- Idéntico al aviso anterior, pero para varios binarios.
- binary should not be linked against library (it
uses none of the library's symbols)
- El binario está enlazado con una biblioteca que no necesita.
No es un problema, pero puede optimizar levemente el tiempo de carga del
binario si no enlaza tal binario a la biblioteca. Este aviso revisa la
misma información que el anterior, pero lo hace para cada binario,
en lugar de una revisión global de todos los binarios.
Errors¶
dpkg-shlibdeps fallará si no puede encontrar ninguna biblioteca
pública usada por un binario, o si no existe ninguna información
de dependencia asociada a esta biblioteca (el fichero «shlibs»,
o el fichero «symbols»). Una biblioteca pública tiene un
«SONAME», el cual tiene información de versión
(biblioteca.so.
x). Una biblioteca privada (como una extensión)
no debería tener un «SONAME», y por ello no necesita
información de versión.
- couldn't find library library-soname needed by
binary (its RPATH is 'rpath')
- The binary uses a library called library-soname but
dpkg-shlibdeps has been unable to find the library.
dpkg-shlibdeps creates a list of directories to check as following:
directories listed in the RPATH of the binary, directories listed in
/etc/ld.so.conf, directories added by the -l option, directories
listed in the LD_LIBRARY_PATH environment variable, and standard
public directories (/lib, /usr/lib, /lib32, /usr/lib32, /lib64,
/usr/lib64). Then it checks those directories in the package's build tree
of the binary being analyzed, in the packages' build trees indicated with
the -S command-line option, in other packages' build trees that
contains a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root
directory. If the library is not found in any of those directories, then
you get this error.
If the library not found is in a private directory of the same package, then
you want to add the directory with -l. If it's in another binary
package being built, you want to make sure that the shlibs/symbols file of
this package is already created and that -l contains the
appropriate directory if it also is in a private directory.
- no dependency information found for library-file (used by
binary).
- dpkg-shlibdeps encontró la biblioteca que binario
necesita en fichero-biblioteca, pero no ha sido capaz de encontrar
ninguna información de dependencia para esta biblioteca. Para
encontrar la dependencia, intentó establecer una correlación
de la biblioteca con el paquete Debian con la ayuda de dpkg -S
fichero-biblioteca. Después revisó los
correspondientes ficheros «shlibs» y «symbols»
en «/var/lib/dpkg/info/», y en los distintos árboles
de construcción del paquete («debian/*/DEBIAN/»).
Este fallo puede estar causado por un fichero «shlibs» o
«symbols» incorrecto o ausente en el paquete de la
biblioteca. También cabe que la biblioteca se construya dentro del
mismo paquete fuente, y que aún no se haya creado el fichero
«shlibs» (en cuyo caso debería arreglar
«debian/rules» para crear «shlibs» antes de
ejecutar dpkg-shlibdeps). Un incorrecto «RPATH»
también puede llevar a encontrar la biblioteca bajo un nombre no
canónico (por ejemplo,
«/usr/lib/openoffice.org/../lib/libssl.so.0.9.8» en lugar de
«/usr/lib/libssl.so.0.9.8») que no esté asociado a
ningún paquete. dpkg-shlibdeps intenta evitar esto usando un
nombre canónico (con realpath(3)), pero no siempre funciona.
Siempre es mejor limpiar el «RPATH» del binario para evitar
problemas.
Calling dpkg-shlibdeps in verbose mode (-v) will provide much
more information about where it tried to find the dependency information.
This might be useful if you don't understand why it's giving you this
error.
VÉASE TAMBIÉN¶
deb-shlibs(5),
deb-symbols(5),
dpkg-gensymbols(1).
TRADUCTOR¶
Rudy Godoy <rudy@kernel-panik.org>, Rubén Porras
<nahoo@inicia.es>, Bruno Barrera C. <bruno.barrera@igloo.cl>,
Carlos Izquierdo <gheesh@ertis.net>, Esteban Manchado y NOK. Debian L10n
Spanish <debian-l10n-spanish@lists.debian.org>.
Revisiones por Santiago Vila <sanvila@unex.es>, Javier
Fernández-Sanguino, Rubén Porras, Luis Uribe y Omar
Campagne.