dpkg-gensymbols - Création des fichiers de symboles (information de
dépendances de bibliothèques partagées)
dpkg-gensymbols [
option...]
dpkg-gensymbols analyse un répertoire temporaire de construction
(par défaut debian/tmp), y recherche les bibliothèques et
crée un fichier
symbols qui les décrit. Si ce fichier
n'est pas vide, il est installé dans le sous-répertoire DEBIAN
du répertoire de construction afin de pouvoir être inclus dans
les informations de contrôle du paquet.
Lors de la création de ces fichiers, il utilise en entrée certains
fichiers de symboles fournis par le responsable. Il recherche les fichiers
suivants (en utilisant le premier trouvé) :
- •
- debian/paquet.symbols.arch
- •
- debian/symbols.arch
- •
- debian/paquet.symbols
- •
- debian/symbols
L'intérêt principal de ces fichiers est de fournir la version
minimale associée à chaque symbole fourni par les
bibliothèques. En général, cela correspond à la
première version du paquet qui a fourni ce symbole, mais cette valeur
peut être augmentée manuellement par le responsable si
l'interface binaire applicative (ABI) du symbole est étendue sans
casser la compatibilité avec les versions précédentes. La
tenue à jour de ces fichiers est à la charge du responsable du
paquet, avec l'aide de
dpkg-gensymbols.
Quand les fichiers de symboles créés sont différents de
ceux fournis par le responsable,
dpkg-gensymbols affichera les
différences entre les deux versions. Si ces différences sont
trop importantes, le programme peut même se terminer en échec
(le nombre de différences tolérées peut être
réglé avec l'option
-c).
Le format interchangeable de base du fichier de symboles est décrit dans
deb-symbols(5) et est utilisé par les fichiers de symboles
inclus dans les paquets binaires. Ils sont générés
à partir des fichiers de symboles modèles avec un format
basé sur le précédent décrit dans
deb-src-symbols(5) et inclus dans les paquets source.
Les fichiers de symboles deviennent réellement utiles lorsqu'ils
permettent de suivre l'évolution du paquet sur plusieurs versions. En
conséquence, le responsable doit les mettre à jour chaque fois
qu'un nouveau symbole est ajouté afin que la version minimale
associée corresponde à la réalité.
Pour effectuer cette opération correctement, le fichier de
différences indiqué dans le journal de construction peut
être utilisé, mais en plus, le mainteneur doit s'assurer que le
comportement de ces symboles n'a pas changé d'une manière qui
pourrait faire que tout ce qui utilise ces symboles et qui est lié
à la nouvelle version cesse de fonctionner avec l'ancienne version.
Dans la plupart des cas, ce fichier de différences peut être
appliqué tel quel au fichier debian/
paquet.symbols. Cela
étant, quelques adaptations sont généralement
nécessaires : il est par exemple recommandé de retirer le
numéro de révision Debian de la version minimale afin que les
paquets rétro-portés, de numéro de version
inférieur mais avec la même version amont continuent à
répondre aux pré-requis. Si le numéro de révision
Debian ne peut vraiment pas être retiré, car le nouveau symbole
est la conséquence d'une modification propre à Debian, il est
suggéré d'ajouter un suffixe «
~ » au numéro de version.
Avant d'appliquer le correctif au fichier de symboles, le responsable doit
contrôler qu'il est correct. Les symboles publics sont supposés
ne jamais disparaître et le correctif ne devrait donc qu'ajouter des
lignes.
Notez qu'il est possible d'introduire des commentaires dans les fichiers de
symboles.
N'oubliez pas de vérifier si les anciennes versions des symboles ne
doivent pas être incrémentées. Il n'y a pas de moyen pour
que
dpkg-gensymbols prévienne de cela. Appliquer aveuglement le
fichier de différences ou supposer qu'il n'y a rien à changer,
s'il n'y a pas de fichier de différences, sans vérifier s'il y a
ces modifications, peut faire que des paquets, avec des dépendances
lâches, prétendent qu'ils peuvent fonctionner avec des paquets
plus anciens avec lesquels ils ne peuvent fonctionner. Cela introduira des
bogues difficiles à trouver avec des mises à niveau
(partielles).
Une bibliothèque bien maintenue offre les possibilités
suivantes :
- •
- son interface de programmation (API) est stable (les
symboles publics ne sont jamais supprimés et les changements ne
concernent que des ajouts de nouveaux symboles publics) et les
modifications provoquant une incompatibilité doivent être
combinées avec un changement de SONAME ;
- •
- idéalement, elle utilise le versionnage des symboles
pour garantir la stabilité de l'interface applicative binaire (ABI)
malgré ses modifications internes et l'extension de son API ;
- •
- elle n'exporte pas les symboles privés (afin de
contourner cela, de tels symboles peuvent être
étiquetés comme optionnels).
En maintenant le fichier de symboles, il est facile d'en voir apparaître
et disparaître. Cependant, il est plus difficile de contrôler la
présence d'éventuelles modifications d'API ou ABI. En
conséquence, le responsable doit contrôler soigneusement le
journal des modifications amont, à la recherche de cas où une
saine gestion des bibliothèques peut avoir été omise. Si
des problèmes potentiels sont découverts, l'auteur amont doit
être averti(e), car une correction en amont est meilleure qu'un travail
spécifique au paquet Debian.
-
-Prépertoire-construction-paquet
- Analyse de répertoire-construction-paquet,
plutôt que debian/tmp.
-
-ppaquet
- Définit le nom du paquet. Requis si plus d'un paquet
binaire est indiqué dans debian/control (ou s'il n'y a pas de
fichier debian/control).
-
-vversion
- Définit la version du paquet. La valeur par
défaut est la version extraite de debian/changelog. Ce
paramètre est requis si le programme est lancé en dehors de
l'arborescence source d'un paquet.
-
-efichier-bibliothèque
- N'analyse que les bibliothèques explicitement
mentionnées au lieu de rechercher toutes les bibliothèques
publiques. Les motifs du shell peuvent être utilisés pour
l'expansion des chemins d'accès (voir la page de manuel de
File::Glob(3perl) pour plus d'informations) dans
fichier-bibliothèque pour établir une correspondance
avec plusieurs bibliothèques avec un seul paramètre (afin
d'éviter d'utiliser plusieurs options -e).
-
-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.19.1). 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ée pour contrôler l'éditeur
de liens d'exécution et se servir 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.
-
-Inom-de-fichier
- Utilise nom-de-fichier comme fichier de
référence pour créer le fichier de symboles à
intégrer dans le paquet lui-même.
-
-O[nom-de-fichier]
- Affiche le fichier de symboles créé sur la
sortie standard ou dans le nom-de-fichier, si
spécifié, plutôt que dans
debian/tmp/DEBIAN/symbols (ou
répertoire-construction-paquet /DEBIAN/symbols si
-P est présent). Si nom-de-fichier existe
déjà, son contenu sera utilisé comme base pour le
fichier créé. Cette fonctionnalité permet de mettre
à jour le fichier de symboles pour qu'il corresponde à une
nouvelle version amont de la bibliothèque.
- -t
- Écrit le fichier de symboles en mode modèle
plutôt que dans un format compatible avec deb-symbols(5). La
différence majeure réside dans le fait que les noms de
symboles et les étiquettes sont écrits dans leur forme
d'origine au lieu d'être interprétés, avec
réduction des étiquettes en mode de compatibilité. De
plus, certains symboles peuvent être omis lors de l'écriture
d'un fichier deb-symbols(5) standard (selon les règles de
traitement des étiquettes) alors que tous les symboles sont
écrits lors de la création d'un modèle de fichier de
symboles.
-
-c[0-4]
- Définit les contrôles à effectuer lors
de la comparaison du fichier de symboles créé en utilisant
le fichier de modèle comme point de départ. Le niveau par
défaut est 1. Plus le niveau est augmenté, plus le nombre de
contrôles effectués est important. Chaque niveau de
contrôle comporte les contrôles effectués pour les
niveaux inférieurs.
- Niveau 0
- Sans échec.
- Niveau 1
- Échoue si certains symboles ont disparu.
- Niveau 2
- Échoue si de nouveaux symboles ont été
ajoutés.
- Niveau 3
- Échoue si certaines bibliothèques ont
disparu.
- Niveau 4
- Échoue si des bibliothèques ont
été ajoutées.
Cette valeur peut être remplacée par la valeur de la variable
d'environnement
DPKG_GENSYMBOLS_CHECK_LEVEL.
- -q
- Fonctionne en mode silencieux et ne crée jamais de
fichier de différences entre le fichier de symboles
créé et le fichier modèle utilisé comme point
de départ. N'affiche également aucun avertissement à
propos de bibliothèques nouvelles ou disparues ou de symboles
nouveaux ou disparus. Cette option ne désactive que l'affichage
informatif, mais pas les contrôles eux-mêmes (voir l'option
-c).
-
-aarch
- Définit arch comme architecture lors du
traitement des fichiers de symboles. Cette option permet de créer
un fichier de symboles ou un fichier de différences pour n'importe
quelle architecture, à condition que les fichiers binaires
correspondants soient déjà disponibles.
- -d
- Active le mode bavard. De nombreux messages sont
affichés pour expliquer ce que dpkg-gensymbols fait.
- -V
- Active le mode bavard. Le fichier de symboles
créé contiendra les symboles dépréciés
sous forme de commentaires. De plus, en mode modèle, les motifs de
symboles seront suivis de commentaires affichant les symboles réels
qui correspondent au motif.
-
-?, --help
- Afficher un message d'aide puis quitter.
- --version
- Afficher le numéro de version puis quitter.
- DPKG_GENSYMBOLS_CHECK_LEVEL
- Remplace le niveau de vérification de commande,
même si l'argument en ligne de commande -c a
été donné (notez que cela va à l'encontre de
la convention générale qui veut que les arguments en ligne
de commande ont la préséance sur les variables
d'environnement).
- 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).
<
https://people.redhat.com/drepper/symbol-versioning>,
<
https://people.redhat.com/drepper/goodpractice.pdf>,
<
https://people.redhat.com/drepper/dsohowto.pdf>,
deb-src-symbol(5),
deb-symbols(5),
dpkg-shlibdeps(1).
Ariel VARDI <
[email protected]>, 2002. Philippe Batailler, 2006.
Nicolas François, 2006. Veuillez signaler toute erreur à
<
[email protected]>.