Certains packages ont un en- Provides:
tête. Par exemple, le paquet postfix
sur Debian Wheezy a Provides: mail-transport-agent
.
Le package mail-transport-agent
qui n'existe pas physiquement est considéré comme un package "virtuel".
Comment puis-je savoir, sur un système basé sur Debian, si un paquet virtuel donné est "installé" (ou "fourni")? Puis-je répertorier tous les packages virtuels "fournis"?
Astuce : pour répertorier tous les packages virtuels existants, installés ou non, procédez comme suit:aptitude search "~v"
Réponses:
Pour répertorier les packages fournissant
mail-transport-agent
:Faites cela
aptitude search '~Pmail-transport-agent ~i'
pour ne lister que les packages installés (le cas échéant).Pour répertorier tous les packages virtuels fournis par les packages actuellement installés:
Voir le manuel d'aptitude pour une explication des modèles de recherche.
la source
aptitude
. J'aime bien l'explication de @ umläute.aptitude search '~Pmysql-server ~i'
qui donnemariadb-server-10.0
etmariadb-server-core-10.0
, mais quand je faisaptitude search '~Rprovides:~i ~v'
, je ne vois pasmysql-server
dans la liste ... Je ne vois cependantvirtual-mysql-client
,virtual-mysql-client-core
,virtual-mysql-server
etvirtual-mysql-client-core
dans la liste.le problème ici est qu'il existe une différence subtile entre les packages virtuels et les packages fournis par d'autres packages.
la différence est qu'un package peut également fournir un package réel , pas seulement un package virtuel .
de toute façon, les éléments suivants rechercheront tous les packages qui fournissent un package et imprimeront à la fois le nom du package et les packages qu'il fournit:
pour savoir si un paquet est installé sur votre système qui en fournit un (par exemple, mail-transport-agent), utilisez
la source
grep-available
etgrep-status
sont disponibles une fois que vous avez installé ledctrl-tools
package.Vous pouvez détecter la présence d'un package virtuel donné en utilisant
apt-cache showpkg <virtual>
pour afficher une liste de packages candidats, puisdpkg -l <canddate> <candidate> ...
pour afficher l'état d'installation des candidats.Par exemple:
Voici une impression complète:
Je crois
dpkg
etapt-cache
sont des outils de niveau inférieur àaptitude
,grep-available
etgrep-status
. L'utilisation d'outils de niveau inférieur peut ou non être un avantage, selon vos besoins particuliers.la source
Vous pouvez obtenir tous les packages virtuels de la LISTE AUTORITAIRE DES NOMS DE PAQUETS VIRTUELS . Quant à déterminer si un paquet virtuel est installé j'utilise
dpkg -l
et le fait qu'il a un code de sortie de 0 si le paquet est installé et un code de sortie de 1 s'il n'est pas installé.la source
dpkg -l mail-transport-agent
peut retourner 0 même s'il n'y a pas de package le fournissant qui est actuellement installé. Je pense que c'est basé sur la présence dans/var/dpkg/lib/available
mais je ne suis pas sûr. J'ai vérifié quedpkg -l foo
renvoie 1 pour un package que je n'ai jamais installé mais 0 pour un package que je viens de purger.