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ù
dependencyfield 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 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 utiliserait, 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 suivants (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(1) 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 utiliser 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épendance (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 à 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”
- 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é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).
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
bibliothèques partagées que demande exécutable.
- -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
- Affiche les définitions des variables de substitution
sur la sortie standard, 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 verbeux. De nombreux messages sont
affichés pour expliquer ce que dpkg-shlibdeps fait.
- -xpackage
- Exclut le paquet des dépendances
générées. 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. 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.
- --ignore-missing-info
- Pas d'échec si l'information de dépendance ne
peut pas être trouvée pour une bibliothèque partagée.
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. 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=dir
- Change l'endroit où se trouve la base de données
de dpkg. Par défaut, c'est /var/lib/dpkg.
- -?, --help
- Affiche un message d'aide puis quitte.
- --version
- Affiche le numéro de version puis quitte.
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 bibliothèque et elle doit être
liée 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 bilbiohtè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 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.
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 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
listés dans /etc/ld.so.conf, 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 des fichiers
DEBIAN/shlibs ou un 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 dans LD_LIBRARY_PATH. S'il est dans un autre
paquet binaire en cours de construction, alors assurez-vous que le fichier
shlibs/symbols de ce paquet est déjà créé et que
LD_LIBRARY_PATH 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/).
Cet échec peut être causé par un shlibs ou un fichier de
symboles 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/openoffice.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(3)), 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 verbeux (-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(1).
TRADUCTION¶
Ariel VARDI <ariel.vardi@freesbee.fr>, 2002. Philippe Batailler, 2006.
Nicolas François, 2006. Veuillez signaler toute erreur à
<debian-l10n-french@lists.debian.org>.