dpkg-shlibdeps - Générateur de variables de
substitution de dépendances pour bibliothèques
partagées
dpkg-shlibdeps [option...] [-e]
exécutable [option...]
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:champ-dépendance où
champ-dépendance 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-shlibdeps 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
censé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 le fichier de la
bibliothèque sur le système, dans le répertoire que
ld.so utiliserait, puis en utilisant dpkg -S
fichier-bibliothèque pour trouver le paquet qui fournit cette
bibliothèque.
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 suivants (le premier
trouvé est utilisé) :
- debian/*/DEBIAN/symbols
- Shared library information generated by the current build process that
also invoked dpkg-shlibdeps. They are generated by
dpkg-gensymbols(1). They are only used if the library is found in a
package's build tree. The symbols file in that build tree takes precedence
over symbols files from other binary packages.
- /etc/dpkg/symbols/paquet.symbols.architecture
- /etc/dpkg/symbols/paquet.symbols
- Les informations de dépendance de bibliothèque
partagée principales par système. arch est
l'architecture du système actuel (obtenue par dpkg-architecture
-qDEB_HOST_ARCH).
- Affichage de
“dpkg-query --control-path paquet
symbols”
- Les informations de dépendance de bibliothèque
partagée fournies par le paquet. 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).
As a safe-guard measure, a symbols file can provide a
Build-Depends-Package or Build-Depends-Packages
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.
Les fichiers Shlibs associent directement une bibliothèque
à une dépendance (sans regarder les symboles). C'est donc
souvent plus puissant que les besoins réels mais cela reste
très sûr et facile à manipuler.
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 processus 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 »
- Les informations de dépendance de bibliothèque
partagée fournies par le paquet. 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épendance 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).
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
bibliothèques partagées que demande
exécutable. Cette option peut être utilisée
plusieurs fois.
- -lrépertoire
- Ajoute répertoire au début de 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: 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.
- -dchamp-dépendance
- Cette option ajoute les dépendances destinées au champ
« dépendance » du fichier de
contrôle champ-dépendance. (Les dépendances
pour ce champ sont dans la variable
shlibs:champ-dépendance.)
L'option -dchamp-dépendance concerne tous
les exécutables qui suivent l'option, jusqu'à la prochaine
option -dchamp-dépendance. Par défaut,
champ-dépendance vaut Depends.
Quand, dans plusieurs champs reconnus ayant trait aux
dépendances 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 automatiquement 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]
- Affiche les définitions des variables de substitution sur la sortie
standard (ou nom-de-fichier si spécifié, depuis
dpkg 1.17.2), plutôt que de les ajouter dans le fichier de
substitution des variables qui est par défaut
debian/substvars.
- -ttype
- Préférer les informations sur les dépendances des
bibliothèques partagées qui sont étiquetées
pour un type de paquet donné. Si aucune information de type n'est
donnée, il n'utilisera pas d'information. Par défaut, le
type de paquet est deb. On peut créer une étiquette
pour ces informations en les préfixant par le nom du type, un
deux-points et une espace.
- -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
- Active le mode bavard (depuis dpkg 1.14.8). De nombreux messages
sont affichés pour expliquer ce que dpkg-shlibdeps
fait.
- -xpackage
- Exclut le paquet des dépendances générées
(depuis dpkg 1.14.8). Cela évite les auto-dépendances
pour les paquets fournissant des exécutables ELF
(exécutables ou modules complémentaires de
bibliothèque) qui utilisent une bibliothèque incluse dans ce
même paquet. Cette option peut être utilisée
plusieurs fois pour exclure plusieurs paquets.
- -Srépertoire-construction-paquet
- Recherche dans répertoire-construction-paquet en premier et
essaie de trouver une bibliothèque (depuis dpkg 1.14.15).
C'est utile lorsque le paquet source construit plusieurs saveurs de la
même bibliothèque et que vous voulez vous assurer que vous
obtiendrez la dépendance d'un paquet binaire donné. Cette
option peut être utilisée plusieurs fois : les
répertoires seront examinés dans le même ordre avant
les répertoires d'autres paquets binaires.
- -Irépertoire-construction-paquet
- Ignore répertoire-construction-paquet lors de la recherche
des fichiers shlibs, de symboles et des bibliothèques
partagées (depuis dpkg 1.18.5). Cette option peut
être utilisée plusieurs fois.
- --ignore-missing-info
- Pas d'échec si l'information de dépendance ne peut pas
être trouvée pour une bibliothèque partagée
(depuis dpkg 1.14.8). L'utilisation de cette option est
déconseillée, toutes les bibliothèques devraient
fournir leurs informations de dépendance (que ce soit avec les
fichiers shlibs, ou avec les fichiers symboles), même si elles ne
sont pas encore utilisées par d'autres paquets.
- --warnings=valeur
- valeur est un champ de « bit »
définissant l'ensemble des avertissements qui peuvent être
émis par dpkg-shlibdeps (depuis dpkg 1.14.17). Le bit
0 (valeur = 1) active l'avertissement « symbole
sym utilisé par le binaire trouvé dans aucune
des bibliothèques ». Le bit 1 (valeur = 2)
active l'avertissement « le paquet pourrait éviter
une dépendance inutile ». Le bit 2 (valeur =
4) active l'avertissement « Le binaire ne devrait pas
être lié à
bibliothèque ». La valeur par
défaut est 3 : les deux premières mises en
garde sont actives par défaut, la dernière ne l'est pas.
Positionnez la valeur à 7 si vous souhaitez que tous les
avertissements soient actifs.
- --admindir=répertoire
- Changer l'endroit où se trouve la base de données de
dpkg (depuis dpkg 1.14.0). Par défaut, c'est
/var/lib/dpkg.
- -?, --help
- Afficher un message d'aide puis quitter.
- --version
- Afficher le numéro de version puis quitter.
- DPKG_COLORS
- Définit le mode de couleur (depuis dpkg 1.18.5). Les valeurs
actuellement acceptées sont auto (par défaut),
always et never.
- DPKG_NLS
- Si cette variable est définie, elle sera utilisée pour
décider l'activation de la prise en charge des langues (NLS
– Native Language Support), connu aussi comme la gestion de
l'internationalisation (ou i18n) (depuis dpkg 1.19.0). Les valeurs
permises sont : 0 et 1 (par défaut).
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 bibliothèque et il doit être
lié avec une bibliothèque supplémentaire durant le
processus de construction (l'option -lbibliothè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
bibliothè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 n'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 multiples.
- 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 performance dans le temps de chargement de
celui-ci peuvent être obtenues 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.
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 le 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 bibliothè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 ajoutés par l'option -l, les
répertoires listés dans la variable d'environnement
LD_LIBRARY_PATH, les répertoires croisés
multi-architerctures (par exemple, /lib/arm64-linux-gnu,
/usr/lib/arm64-linux-gnu), les répertoires publics standard (/lib,
/usr/lib), les répertoires listés dans /etc/ld.so.conf et
les répertoires obsolètes multilib (/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 le fichier shlibs/symbols de ce paquet a
déjà créé 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 correspondants et les fichiers symboles
de /var/lib/dpkg/info/ et enfin les différents arbres des paquets
construits (debian/*/DEBIAN/).
This failure can be caused by a bad or missing shlibs or
symbols file in the package of the library. It might also happen if the
library is built within the same source package and if the shlibs files
has not yet been created (in which case you must fix debian/rules to
create the shlibs before calling dpkg-shlibdeps). Bad RPATH can
also lead to the library being found under a non-canonical name
(example: /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 instead of
/usr/lib/libssl.so.0.9.8) that's not associated to any package,
dpkg-shlibdeps tries to work around this by trying to fallback on
a canonical name (using realpath(3)) but it might not always
work. It's always best to clean up the RPATH of the binary to avoid
problems.
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. Cela
peut être utile si vous ne comprenez pas pourquoi vous obtenez
cette erreur.
deb-substvars(5), deb-shlibs(5),
deb-symbols(5), dpkg-gensymbols(1).
Ariel VARDI <ariel.vardi@freesbee.fr>, 2002. Philippe
Batailler, 2006. Nicolas François, 2006. Veuillez signaler toute
erreur à <debian-l10n-french@lists.debian.org>.