Comment déterminer si un package est un méta-package à partir de la ligne de commande?

14

Comment puis-je déterminer si un package est un méta-package à partir de la ligne de commande, éventuellement via apt-get, aptitude ou apt-cache?

J'ai essayé:

apt-cache show texlive-full
apt-cache showpkg texlive-full

mais la seule façon dont je peux dire que ce paquet est méta est en lisant le champ "en-description".

Existe-t-il une manière plus automatique de procéder, qui me donnera une réponse oui / non, ou au moins un champ tel que "en-description" est-il dédié à cela?

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
1
Mis à part le fait que cette question et les réponses sont assez intéressantes, pourquoi voulez-vous le savoir?
Joe
1
J'installais des choses avec apt-get, et j'ai remarqué que si j'installe un métapaquet (texlive-full), il installe les dépendances que je veux, mais si je désinstalle le métapaquet, les dépendances restent là (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Ensuite, j'ai constaté que ce n'est le cas que pour les métapaquets brainstorm.ubuntu.com/idea/17785 . aptitude, d'autre part, supprime les dépendances inutiles d'un métapaquet.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

7

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 copyrightfichier, 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 showsur l'un affiche "Impossible de sélectionner les versions du package 'zcav' car il est purement virtuel". Running aptitude showré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\$"
Gilles 'SO- arrête d'être méchant'
la source
merci pour ces méthodes: je ne connaissais pas les detteags! aussi, j'ai lu quelque part que lorsque vous installez un métapaquet avec apt-get, c'est exactement comme si vous aviez installé chaque dépendance à la main individuellement, ce qui signifie que la suppression du package d'origine ne supprimera pas immédiatement ses dépendances, tandis que pour les packages normaux, remove will supprimez les dépendances installées. Est-ce vrai? Si oui, comment apt-get peut-il faire la différence? Cela pourrait être exploité aussi ... (il semble également que l'aptitude ne se soucie pas de sa méta ou non, est-ce vrai?)
Ciro Santilli 事件 改造 中心 法轮功 六四 事件
@cirosantilli La fonction de suppression automatique des dépendances n'est pas liée aux métapaquets. Cela se produit car si vous ne demandez pas explicitement un package, il est marqué comme installé automatiquement et un package marqué comme installé automatiquement est supprimé si aucun package qui en dépend n'est installé. Voir apt-get autoremove, aptitude (un)markautola Mcommande dans l'interface interactive aptitude.
Gilles 'SO- arrête d'être méchant'
@cirosantilli Après réflexion, je me demande si vous pensiez à des packages virtuels et non à des métapaquets? Voir ma réponse mise à jour.
Gilles 'SO- arrête d'être méchant'
Je ne connaissais vraiment pas les paquets virtuels, mais je pense que texlive-full n'est pas virtuel puisque apt-cache show texlive-full montre les résultats habituels. Même si, après que je l'ai fait apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovene pas supprimer toutes les dépendances installées. J'ai lu quelque part que c'est parce que texlive-full était un métapaquet, et que c'était un comportement normal d'un métapaquet, mais c'était peut-être faux. aptitude, d'autre part, semblait bien supprimer les dépendances installées automatiquement.
Ciro Santilli 27 改造 中心 法轮功 六四 事件
2

Vous pouvez essayer d'entrer

apt-cache search 'metapackage | meta-package'

qui vous donnera une longue liste, puis utilisera grep, par exemple, pour montrer tous les métapaquets liés à la science avec

apt-cache search 'metapackage | meta-package' | grep -i science

Cela retournera une longue liste (je l'ai raccourcie ici)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Vous pouvez utiliser un certain nombre d'alternatives pour la science, comme KDEpour trouver tous les KDEmétapaquets.

Il s'agit probablement de ce que vous pouvez faire de mieux apt-cache, mais cela devrait rapidement localiser la plupart des métapaquets que vous souhaitez trouver. S'il ne trouve pas exactement tout ce que vous cherchiez, le plus simple est de regarder dans la section métapaquetage de Synaptic.


la source