dpkg-shlibdeps Man page

Resume Wikipedia de Dpkg

dpkg est un logiciel à la base du système de gestion de paquets de Debian. Il a été créé par Ian Jackson en 1993. dpkg est similaire à Red hat Package Manager (ou RPM) le logiciel dans la mesure où il est utilisé pour installer, supprimer et fournir des informations à propos des paquets *.deb.
dpkg est un outil de bas niveau, à comparer avec l’Advanced Packaging Tool (APT) qui, couplé à des surcouches telles qu’Aptitude ou Synaptic (qui ajoute entre autres une interface graphique conviviale), est un outil de haut niveau utilisé pour rechercher les paquets à partir d’emplacements distants ou traiter des relations de dépendances complexes entre paquets. APT est de manière générale, plus utilisé que dpkg.

dpkg-shlibdeps Utilitaires de dpkg dpkg-shlibdeps

NOM
dpkg-shlibdeps – générateur de variables de substitution de dépendances
pour bibliothèques partagées

SYNOPSIS

dpkg-shlibdeps [option…] [-e]exécutable [option…]

DESCRIPTION

dpkg-shlibdeps calcule, pour les exécutables indiqués dans ses
paramètres, les dépendances envers les bibliothèques partagées. Ces
dépendances sont ajoutées au fichier de variables de substitution
debian/substvars sous la forme shlibs:dependencyfield où dependency‐
field est le nom du champ de dépendance. Toute autre variable après
shlibs: est supprimée du fichier.

dpkg-shlibdeps a deux sources possibles pour créer les informations
concernant les dépendances. Soit les fichiers symbols, soit les
fichiers shlibs. Pour chaque fichier binaire qu’il analyse, dpkg-shlib‐
deps recherche la liste des bibliothèques partagées qui lui sont liées.
Puis, pour chacune d’elles il analyse soit le fichier symbols, soit le
fichier shlibs (si le premier n’existe pas ou si debian/shlibs.local
contient les dépendances appropriées). Ces deux fichiers sont sensés
être fournis par le paquet de la bibliothèque et disponibles dans
/var/lib/dpkg/info/paquet.symbols ou /var/lib/dpkg/info/paquet.shlibs.
Le nom du paquet est trouvé en deux étapes : en cherchant les fichiers
de la bibliothèque sur le système, dans le répertoire que ld.so utili‐
serait, puis un utilisant dpkg -S fichier-bibliothèque pour trouver le
paquet qui fournit cette bibliothèque.

Fichiers symboles
Les fichiers symboles contiennent des informations de dépendances plus
fines en fournissant les dépendances minimales pour chaque symbole de
la bibliothèque exportée. Le script essaie de trouver un fichier de
symboles associé à un paquet de bibliothèque dans les emplacements sui‐
vants (le premier trouvé est utilisé) :

debian/*/DEBIAN/symbols
L’information des bibliothèques partagées générée par l’actuel
processus de construction qui invoque aussi dpkg-shlibdeps.
Elles sont générées par dpkg-gensymbols et ne sont utilisées
que si la bibliothèque se trouve dans l’arbre de construction
d’un paquet. Le fichier des symboles qui construit l’arbre
s’appuie sur les fichiers de symboles d’autres paquets binaires.

/etc/dpkg/symbols/paquet.symbols.architecture

/etc/dpkg/symbols/paquet.symbols
L’information de dépendance des bibliothèques partagées associée
aux systèmes. arch est l’architecture du système actuel (obtenu
par dpkg-architecture -qDEB_HOST_ARCH).

Affichage de “dpkg-query –control-path paquet symbols”
Paquet fournissant des informations concernant les dépendances
envers des bibliothèques partagées. Sauf indication contraire
par le biais de –admindir, ces fichiers sont par défaut dans
/var/lib/dpkg.

Lors de l’analyse des symboles utilisés par tous les binaires,
dpkg-shlibdeps retient la (plus grande) version minimale nécessaire
pour chaque bibliothèque. À la fin du processus, il est capable
d’écrire la dépendance minimale pour toutes les bibliothèques utilisées
(à condition que l’information des fichiers symbols soit exacte).

Comme garde-fou, un fichier de symboles peut fournir un champ
Build-Depends-Package de méta-information et dpkg-shlibdeps en extraira
la version minimale requise par le paquet correspondant depuis ce champ
Build-Depends et utilisera cette version si elle est supérieure à la
version minimale calculée par l’examen des symboles.

Fichiers Shlibs
Les fichiers Shlibs associent directement une bibliothèque à une dépen‐
dance (sans regarder les symboles). Il agit donc souvent plus fortement
que ce dont on aurait besoin mais il reste très sûr et facile à manipu‐
ler.

Les dépendances d’une bibliothèque sont recherchées à plusieurs
endroits. Le premier fichier d’informations trouvé qui concerne la
bibliothèque est utilisé :

debian/shlibs.local
Fichier particulier à un paquet remplaçant les informations qui
concernent les dépendances envers des bibliothèques partagées.

/etc/dpkg/shlibs.override
Fichier système remplaçant les informations qui concernent les
dépendances envers des bibliothèques partagées.

debian/*/DEBIAN/shlibs
Information sur la bibliothèque partagée générée par le proces‐
sus actuel de construction qui invoque aussi dpkg-shlibdeps. Il
n’est utilisé que si la bibliothèque se trouve dans l’arbre de
construction du paquet. Le fichier shlibs qui construit l’arbre
a priorité sur les fichiers shlibs des autres paquets binaires.

Affichage de “dpkg-query –control-path paquet shlibs”
Paquet fournissant des informations concernant les dépendances
envers des bibliothèques partagées. Sauf indication contraire
par le biais de –admindir, ces fichiers sont par défaut dans
/var/lib/dpkg.

/etc/dpkg/shlibs.default
Fichier système par défaut concernant les informations de dépen‐
dance envers des bibliothèques partagées.

Les dépendances trouvées sont ensuite directement utilisées (sauf si
elles sont filtrées parce qu’elles ont été identifiées comme étant en
double, ou d’un niveau plus faible qu’une autre dépendance).

OPTIONS

dpkg-shlibdeps interprète des arguments sans option comme des commandes
exécutables, comme si on avait simplement donné -eexécutable.

-eexécutable
Cette option inclut les bonnes dépendances envers les biblio‐
thèques partagées que demande exécutable. Cette option peut être
utilisée plusieurs fois.

-lrépertoire
Ajoute répertoire à la liste des répertoires où chercher des
bibliothèques partagées privées (depuis dpkg 1.17.0). Cette
option peut être utilisée plusieurs fois.

Note : Utilisez cette option plutôt que le réglage de
LD_LIBRARY_PATH, parce que cette variable d’environnement est
utilisé pour contrôler l’éditeur de liens d’exécution et et ser‐
vir d’elle pour définir les chemins des bibliothèques partagées
au moment de la construction peut être problématique, par
exemple, lors d’une compilation croisée.

-dchamp-dépendance
Cette option ajoute les dépendances destinées au champ « dépen‐
dance » du fichier de contrôle champ-dépendance. (Les dépen‐
dances pour ce champ sont dans la variable shlibs:champ-dépen‐
dance.)

L’option -dchamp-dépendance concerne tous les exécutables qui
suivent l’option, jusqu’à la prochaine option -dchamp-dépen‐
dance. Par défaut, champ-dépendance vaut Depends.

Quand, dans plusieurs champs reconnus ayant trait aux dépen‐
dances comme les champs Pre-Depends, Depends, Recommends,
Enhances ou Suggests apparaît la même entrée (ou bien un
ensemble d’alternatives), dpkg-shlibdeps supprime automatique‐
ment les dépendances dans tous les champs sauf celui qui repré‐
sente les dépendances les plus importantes.

-ppréfixe-pour-le-nom-des-variables
Fait commencer les variables de substitution par pré‐
fixe-pour-le-nom-des-variables: au lieu de shlibs:. De même,
toute variable de substitution commençant par pré‐
fixe-pour-le-nom-des-variables: (au lieu de shlibs:) est enlevée
du fichier de substitution des variables.

-O[nom-de-fichier] Print substitution variable settings to standard output (or
filename if specified, since dpkg 1.17.2), rather than being
added to the substitution variables file (debian/substvars by
default).

-ttype Prefer shared library dependency information tagged for the
given package type. If no tagged information is available, falls
back to untagged information. The default package type is deb.
Shared library dependency information is tagged for a given type
by prefixing it with the name of the type, a colon, and whites‐
pace.

-Lfichier-local-shlibs
Lire les informations de remplacement concernant les dépendances
envers les bibliothèques partagées dans fichier-local-shlibs au
lieu de debian/shlibs.local.

-Tfichier/substvars
Écrire les variables de substitution dans fichier/substvars ; le
fichier par défaut est debian/substvars.

-v Enable verbose mode (since dpkg 1.14.8). Numerous messages are
displayed to explain what dpkg-shlibdeps does.

-xpackage
Exclude the package from the generated dependencies (since dpkg
1.14.8). This is useful to avoid self-dependencies for packages
which provide ELF binaries (executables or library plugins)
using a library contained in the same package. This option can
be used multiple times to exclude several packages.

-Srépertoire-construction-paquet
Look into package-build-dir first when trying to find a library
(since dpkg 1.14.15). This is useful when the source package
builds multiple flavors of the same library and you want to
ensure that you get the dependency from a given binary package.
You can use this option multiple times: directories will be
tried in the same order before directories of other binary
packages.

–ignore-missing-info
Do not fail if dependency information can’t be found for a sha‐
red library (since dpkg 1.14.8). Usage of this option is discou‐
raged, all libraries should provide dependency information
(either with shlibs files, or with symbols files) even if they
are not yet used by other packages.

–warnings=valeur
value is a bit field defining the set of warnings that can be
emitted by dpkg-shlibdeps (since dpkg 1.14.17). Bit 0 (value=1)
enables the warning “symbol sym used by binary found in none of
the libraries”, bit 1 (value=2) enables the warning “package
could avoid a useless dependency” and bit 2 (value=4) enables
the warning “binary should not be linked against library”. The
default value is 3: the first two warnings are active by
default, the last one is not. Set value to 7 if you want all
warnings to be active.

–admindir=dir
Change the location of the dpkg database (since dpkg 1.14.0).
The default location is /var/lib/dpkg.

-?, –help
Affiche un message d’aide puis quitte.

–version
Affiche le numéro de version puis quitte.

DIAGNOSTICS
Avertissements
Depuis que dpkg-shlibdeps analyse l’ensemble des symboles utilisés par
chaque binaire généré par le paquet, il est en mesure d’émettre des
avertissements dans plusieurs cas. Ils vous informent des choses qui
peuvent être améliorées dans le paquet. Dans la plupart des cas, ces
améliorations concernent directement les sources amont. Dans l’ordre
d’importance décroissant, voici les différents avertissements que vous
pouvez rencontrer :

symbole sym utilisé par binaire trouvé dans aucune des bibliothèques.
Le symbole indiqué n’a pas été trouvé dans les bibliothèques
liées au binaire. Le binaire est probablement plutôt une biblio‐
thèque et elle doit être liée avec une bibliothèque supplémen‐
taire durant le processus de construction (l’option -lbiblio‐
thèque de l’éditeur de liens).

binary contient une référence non résolue au symbole sym: il s’agit
probablement d’un greffon (plugin)
Le symbole indiqué n’a pas été trouvé dans les bilbiothèques
liées avec le fichier binaire. Le binaire est très probablement
un greffon (plugin) et le symbole est probablement fourni par le
programme qui charge ce greffon. En théorie, un greffon n’a pas
de « SONAME » mais ce binaire en possède un et n’a pas pu être
identifié en tant que tel. Cependant, le fait que le binaire
soit stocké dans un répertoire non public est une indication
forte qu’il ne s’agit pas d’une bibliothèque partagée normale.
Si le binaire est vraiment un greffon, vous pouvez ignorer cet
avertissement. Il existe cependant une possibilité qu’il
s’agisse d’un vrai binaire et que les programmes avec lequel il
est lié utilisent un RPATH afin que le chargeur dynamique le
trouve. Dans ce cas, la bibliothèque est incorrecte et doit être
corrigée.

paquet pourrait éviter une dépendance inutile si le binaire n’était pas
lié avec bibliothèque (il ne fait usage d’aucun de ses symboles)
Aucun des binaires liés à la bibliothèque utilise les symboles
qu’elle fournit. En corrigeant tous les binaires, vous éviteriez
la dépendance associée à cette bibliothèque (à moins que la même
dépendance soit également liée à une autre bibliothèque qui est
elle réellement utilisée).

paquet pourrait éviter une dépendance inutile si les binaires n’étaient
pas liés avec bibliothèque (ils ne font usage d’aucun de ses symboles)
Identique à l’avertissement précédent, pour des binaires mul‐
tiples.

le binaire ne devrait pas être lié avec la bibliothèque (il ne fait
usage d’aucun de ses symboles)
Le binaire est lié à une bibliothèque dont il n’a pas besoin. Ce
n’est pas un problème mais de petites améliorations de perfor‐
mance dans le temps de chargement de celui-ci peuvent être obte‐
nues en ne le liant pas à cette bibliothèque. Cet avertissement
vérifie la même information que la précédente mais elle le fait
pour tous les binaires au lieu de ne faire le contrôle qu’au
niveau global sur tous les binaires analysés.

Erreurs
dpkg-shlibdeps échouera s’il ne peut pas trouver de bibliothèque
publique utilisée par un binaire ou si cette bibliothèque n’a pas
d’informations sur les dépendances associées (soit les fichier shlibs,
soit le fichier des symboles). Une bibliothèque publique a un SONAME et
un numéro de version (libsomething.so.X). Une bibliothèque privée
(comme un module additionnel) ne devrait pas avoir de SONAME et n’a pas
besoin d’avoir de version.

impossible de trouver la bibliothèque library-soname demandée par le
binaire (son RPATH est ‘rpath’)
Le binaire utilise une bibliothèque appelée library-soname mais
dpkg-shlibdeps n’a pas été en mesure de trouver cette biblio‐
thèque. dpkg-shlibdeps crée une liste de répertoires à vérifier
de la manière suivante : les répertoires énumérés dans le RPATH
du binaire, les répertoires listés dans /etc/ld.so.conf, les
répertoires ajoutés par l’option -l, les répertoires listés dans
la variable d’environnement LD_LIBRARY_PATH, et les répertoires
publics standard (/lib, /usr/lib, /lib32, /usr/lib32, /lib64,
/usr/lib64). Ensuite, il vérifie les répertoires qui sont dans
l’arbre de construction du paquet binaire en cours d’analyse,
dans l’arbre de construction du paquet indiqué avec l’option de
ligne de commande -S, dans les autres arbres de paquets qui
contiennent un fichier DEBIAN/shlibs ou DEBIAN/symbols et enfin
dans le répertoire racine. Si la bibliothèque n’est pas trouvée
dans l’un de ces répertoires, alors ce message d’erreur est
obtenu.

Si la bibliothèque non trouvée est cependant disponible dans le
répertoire privé de ce même paquet, alors il vous faut ajouter
ce répertoire avec -l. S’il est dans un autre paquet binaire en
cours de construction, alors assurez-vous que les fichiers
shlibs/symbols de ce paquet sont déjà créés et que -l contient
le répertoire approprié si c’est aussi un répertoire privé.

aucune information de dépendance trouvée pour la bibliothèque (utilisée
par le binaire).
La bibliothèque nécessaire au binaire a été trouvée par
dpkg-shlibdeps dans fichier-bibliothèque mais dpkg-shlibdeps n’a
pas été en mesure de trouver d’informations de dépendance pour
cette bibliothèque. Pour trouver la dépendance, il a essayé de
lier la bibliothèque à un paquet Debian avec l’aide de dpkg -S
fichier-bibliothèque. Puis, il a vérifié les shlibs correspon‐
dants et les fichiers symboles de /var/lib/dpkg/info/ et enfin
les différents arbres des paquets construits (debian/*/DEBIAN/).

Cet échec peut être causé par un shlibs ou un fichier de sym‐
boles qui serait mauvais ou manquant dans le paquet. Une autre
cause serait que la bibliothèque soit construite au sein du même
paquet source et que les fichiers shlibs n’aient pas encore été
créés (dans ce cas debian/rules doit être modifié pour créer le
shlibs avant l’appel de dpkg-shlibdeps). Un mauvais RPATH peut
aussi conduire à ce que la bibliothèque soit trouvée sous un nom
non-canonique (comme : /usr/lib/openof‐
fice.org/../lib/libssl.so.0.9.8 au lieu de
/usr/lib/libssl.so.0.9.8) qui n’est associé à aucun paquet,
dpkg-shlibdeps essaie de travailler sur ce nom non-canonique (en
utilisant realpath), mais cela ne fonctionne pas toujours. Il
est toujours préférable de bien nettoyer le RPATH du binaire
afin d’éviter ces problèmes.

L’appel de dpkg-shlibdeps en mode bavard (-v) fournira beaucoup
plus d’informations sur l’endroit où il a essayé de trouver
l’information sur les dépendances. Ceci peut être utile si vous
ne comprenez pas pourquoi vous obtenez cette erreur.

VOIR AUSSI
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols.

TRADUCTION
Ariel VARDI , 2002. Philippe Batailler, 2006.
Nicolas François, 2006. Veuillez signaler toute erreur à
.

Projet Debian 06-09-2013 dpkg-shlibdeps