Lors de mon audit périodique des packages installés, j'ai rencontré une erreur. Pour cet audit, une application génère un graphique des packages installés, à l'aide de dpkg-query
. Au cours de ce processus, il vérifie dans le temps, toutes les dépendances sont en effet satisfaites, car cela signifierait sinon que quelque chose ne va pas dans le système ou quelque chose ne va pas avec l'application générant le graphique. Il est arrivé aujourd'hui que l'application s'est arrêtée sur une erreur, indiquant qu'elle a trouvé un package avec une dépendance non satisfaite à python:any
. Cependant, le package dépendant est très bien. J'ai vérifié python:any
est un package virtuel fourni par le package python
. Synaptic dit que python
fournit python:any
, mais ma candidature ne reçoit pas ces informations de dpkg-query
.
Voici un test que vous pouvez exécuter à partir de la ligne de commande, qui montre le problème (en supposant Ubuntu 14.04):
$ dpkg-query --showformat='${Package}\n${Provides}\n' --show python3
> python3
> python3-profiler
# Note `python3:any` does not appear
À propos du même package, Synaptic indique qu'il fournit python3:any
et python3-profiler
. Le premier est absent des informations retournées par dpkg-query
.
Quand on apparaît comme une dépendance, ça va:
$ dpkg-query --showformat='${Package}\n${Depends}\n' --show apturl-common
# Note the second item in the format is now `Depends`
> apturl-common
> python3:any (>= 3.3.2-2~), python3-apt, python3-update-manager
Est-ce un bug dans dpkg-query
? Ou est-ce que je m'attends à tort à ce qu'il parle de tous les packages virtuels alors que je peux être supposé déduire ce type de packages virtuels "moi-même"? Y a-t-il des règles que je ne connais pas sur ce qui est retourné dans ${Provides}
?
python3:any (>= 3.3.2-2~)
n'est pas un package virtuel, c'est une chaîne de substitution créée par le ${python3:Depends}
motif et rempli par dh_python3
lorsque appelé depuis dh_gencontrol
lors de la construction du package. Jetez un oeil à la debian/control
fichier du paquet source apturl
:
Package: apturl-common
Architecture: any
Depends: ${python3:Depends},
${shlibs:Depends},
${misc:Depends},
python3-apt,
python3-update-manager
Replaces: apturl (<< 0.3.6ubuntu2)
Description: install packages using the apt protocol - common data
AptUrl is a simple graphical application that takes an URL (which follows the
apt-protocol) as a command line option, parses it and carries out the
operations that the URL describes (that is, it asks the user if he wants the
indicated packages to be installed and if the answer is positive does so for
him).
Maintenant pourquoi python3:any
? Citons la politique debian:
La spécification de any indique que le package source ne dépend d'aucune architecture particulière et devrait compiler correctement sur n'importe laquelle. Le ou les packages binaires produits seront spécifiques à l'architecture actuelle de la construction.
Et c'est exactement le cas pour le python3
paquet binaire:
Package: python3
Architecture: any
Multi-Arch: allowed
Pre-Depends: python3-minimal (= ${binary:Version})
Depends: python3.4 (>= 3.4.3-1), libpython3-stdlib (= ${binary:Version}), ${misc:Depends}, dh-python
Suggests: python3-doc (>= ${binary:Version}), python3-tk (>= 3.4.3-1) , python3-venv (>= ${binary:Version})
Replaces: python3-minimal (<< 3.1.2-2)
Provides: python3-profiler
Description: interactive high-level object-oriented language (default python3 version)
Python, the high-level, interactive object oriented language,
includes an extensive class library with lots of goodies for
network programming, system administration, sounds and graphics.
.
This package is a dependency package, which depends on Debian's default
Python 3 version (currently v3.4).
Sources:
J'ai l'impression de deviner une réponse, n'hésitez pas à ajouter votre propre réponse.
J'ai appris qu'il y a un /var/lib/dpkg/available
base de données, en tant que texte brut. J'ai vérifié python3
(pour continuer avec le même exemple que dans la question) il est dit Provides: python3-profiler
: il n'y a pas python3:any
.
Il se peut donc que la réponse soit: il n'y a pas toujours de correspondance directe entre les exigences renvoyées par dpkg-query
et un package fourni retourné par dpkg-query
aussi, et probablement Synaptic déduit un "faux" paquet virtuel, et python3:any
n'est pas vraiment un paquet virtuel (je dirais que Synaptic est trompeur ici).
Il n'y a probablement rien avec les paquets fournis, et c'est moi qui lit par erreur :xyz
à la fin d'un paquet, les dépendances faisant partie du nom du paquet, alors que ce n'est pas le cas.