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”
- Información de dependencias de bibliotecas compartidas
proporcionadas por el paquete. A menos que se redefina a través
«--admindir», los ficheros se encuentran bajo
«/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).
Como medida de precaución, un fichero de símbolos puede proporcionar
un campo de meta información
Build-Depends-Package para que
dpkg-shlibdeps extraiga la versión mínima requerida por el
paquete correspondiente en el campo «Build-Depends», y utilizar tal
versión si es mayor que la versión mínima calculada en el
análisis de símbolos.
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”
- Información de dependencias de bibliotecas compartidas
proporcionadas por el paquete. A menos que se redefina a través
«--admindir», los ficheros se encuentran bajo
«/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
- Incluye dependencias apropiadas para las bibliotecas
compartidas requeridas por el ejecutable.
- -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
-d campo-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
- Muestra las propiedades de las variables de
sustitución por la salida estándar, en lugar de añadirse al
fichero de sustitución de variables (por omisión
debian/substvars).
- -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.
ADVERTENCIAS¶
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.
FALLOS¶
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')
- El binario utiliza una biblioteca llamada
soname-biblioteca, pero dpkg-shlibdeps ha sido incapaz de
encontrar la biblioteca. dpkg-shlibdeps crea una lista de
directorios a revisar en el siguiente orden: los directorios listados en
el «RPATH» del binario, los directorios listados en
/etc/ld.so.conf, los directorios listados en la variable de entorno
«LD_LIBRARY_PATH», y los directorios públicos estándar
(/lib, /usr/lib, /lib32, /usr/lib32, /lib64, /usr/lib64). Después
revisa esos directorios en el árbol de construcción del paquete
del binario analizado, en los árboles de construcción de los
paquetes indicados con la opción de línea de órdenes
«-S», en otros árboles de construcción de paquetes que
contienen el fichero «DEBIAN/shlibs» o
«DEBIAN/symbols», y por último en el directorio raíz.
Este error se muestra cuando la biblioteca no se encuentra en ninguno de
estos directorios.
Si la biblioteca que no se encontró está dentro de un directorio
privado del mismo paquete, querrá añadir el directorio a
«LD_LIBRARY_PATH». Si está en otro paquete binario en
construcción, querrá asegurar que el fichero «shlibs»
o «symbols» de este paquete ya existe, y que
«LD_LIBRARY_PATH» contiene el directorio adecuado, en caso de
ser un directorio privado.
- 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.
Ejecutar dpkg-shlibdeps en modo informativo (-v) ofrece mucha
más información acerca de dónde buscó la
información de dependencia. Puede ser útil si no entiende porque
muestra este fallo.
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.