Il n'y a pas de définition formelle d'un métapaquet. La définition informelle est qu'un métapaquet est celui qui est uniquement destiné à être installé pour ses dépendances et ne contient aucun fichier utile qui lui soit propre.
Vous pouvez définir un métapaquet comme un package qui ne contient aucun fichier. Il n'y a aucun moyen de le déterminer à partir de la base de données de packages. Vous pouvez utiliser la base de données de fichiers et vérifier que le package ne contient que des répertoires (de nombreux packages de ce type contiennent quelques répertoires). En fait, la plupart des métapaquets contiennent quelques fichiers /usr/share/doc/<package name>
: un copyright
fichier, un journal des modifications, parfois quelques autres. Voici une approximation qui définit un métapaquet comme ne contenant que des fichiers /usr/share/doc/<some directory>
(pas dans ses sous-répertoires) et les répertoires principaux:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Une autre approche consiste à rechercher une balise de package avec debtags
. Plusieurs balises sont couramment utilisées sur les métapaquets.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Une autre approche consiste à rechercher des packages de petite taille. Chaque répertoire compte pour 4 Ko, alors planifiez en conséquence lorsque vous choisissez un seuil (encore une fois, il s'agit d'une approximation).
aptitude -F '%I %p' search "~n^$package\$"
Après réflexion, je me demande si vous parlez de packages virtuels plutôt que de métapaquets. Les packages virtuels ne sont en fait pas des packages mais des noms de packages utilisés dans les Provides:
champs. Vous pouvez les répertorier avec aptitude search '~v'
. L'exécution apt-cache show
sur l'un affiche "Impossible de sélectionner les versions du package 'zcav' car il est purement virtuel". Running aptitude show
répertorie les packages qui le fournissent. Un moyen pratique d'afficher les packages virtuels consiste à apt-cache
: cela imprime une ligne pour un package non virtuel et potentiellement plusieurs lignes (une pour chaque fournisseur) pour un package virtuel - vous pouvez dire si le package est virtuel même s'il existe un seul fournisseur car le nom du fournisseur est différent.
apt-cache -n search "^$package\$"