Liste des paquets dans Yum qui dépendent d'un autre paquet installé

49

J'essaie d'installer un package RPM tiers sur RHEL5, qui dépend de la version 3.4 de sqlite. Selon Yum, j'ai déjà installé 3.3.6.

Existe-t-il un moyen de répertorier les packages installés qui dépendent de sqlite 3.3.6?

Riches
la source

Réponses:

47

L'option rpm que vous voulez est:

rpm -q --whatrequires sqlite

Édité: ajouté - installé par discussion dans d'autres réponses / commentaires

Édité: supprimé - installé car il s'agit d'une option non valide pour rpm

Wes Hardaker
la source
3
De plus, repoquerypeut être utilisé pour générer une belle arborescence ressemblant à la structure de tous les paquets nécessitant un paquet particulier, par exemple:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp
3
Je ne pense pas que cette réponse soit fiable - certainement pas avec CentOS 7.x. Pour tester, installez ImageMagick. OpenEXR-libs sera également installé car ImageMagick en dépend. Maintenant, lancez rpm -q --whatrequire OpenEXR-libs et le retour est "aucun paquet ne nécessite OpenEXR-libs" qui est INCORRECT. Maintenant, lancez "repoquery -q --installed --whatrequires OpenEXR-libs" et cela retournera correctement "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64". @just la réponse d'un type aléatoire ci-dessous devrait être la bonne réponse ici.
Pancho
6
--installedest une option pour repoquerymais n'est pas valide pour rpm.
Dan Rice
37

Répondre

repoquery -q --installed --whatrequires sqlite

Des explications

rpm -q --whatrequires sqlite rapporte uniquement les dépendances sur les noms de paquets.

Au contraire, repoqueryagit comme suit (à partir des pages de manuel):

   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.

Exemple

Prenons le paquet libdb.

# rpm -q --whatrequires libdb
no package requires libdb

Aucun paquet ne dépend libdb, nous devrions donc pouvoir le retirer en douceur. Pourtant...

# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Comme vous pouvez le constater, certains autres paquets ne dépendaient pas directement du paquet, mais du fichier libdb-5.3.so()(64bit)fourni par celui-ci.

Enfin, voici la liste réelle des paquets en fonction de libdb:

# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
Elouan Keryell-Even
la source
1
Cette réponse est meilleure que la réponse acceptée
Pancho
11

Pour dnf (nouvelle version de yum), essayez avec la commande de wrapper de repoquerie:

dnf repoquery --whatrequires sqlite

S'il n'est pas disponible, vous pouvez l'installer avec la commande suivante:

dnf -y install dnf-plugins-core
teoincontatto
la source
Vous avez besoin --installed --recursivede la fin pour qu'elle ne retourne que ce qui est réellement installé et qu'elle ne soit pas extraite des référentiels
Hashbrown
7

Vous pouvez également essayer cette commande.

repoquery --whatrequires sqlite

J'ai reçu cette commande de ServerFault et également de The Fedora Forums.

Pred
la source
Cela renvoyait des paquets que je n'avais pas installés.
2rs2ts
3

Je pense que ce que vous voulez vraiment savoir, c’est "quels sont les paquets qui nécessitent sqlite-3.3.6, mais ne seront pas satisfaits de sqlite-3.4.z" ... et le seul bon moyen de le savoir est de: l'essayer Comme:

echo | yum upgrade sqlite
James Antill
la source
1

Comme l'a dit Wes Hardaker , une bonne méthode intégrée consiste à utiliser rpm -q --whatrequires <package>. Le fait est que cela rpmfonctionne sur les capacités de résolution des dépendances, pas simplement sur les paquets, comme c'est le dpkgcas par exemple dans la famille de distributions Linux Debian / Ubuntu. Comme d'autres l'ont noté, le simple fait de rpm -q --whatrequires sqliteraconter ne raconte pas toute l'histoire, raison pour laquelle certains ont suggéré d'utiliser repoquery. repoqueryCependant, RHEL / CentOS 7 n’est pas installé par défaut (peut-être aussi sur le bureau?), de sorte qu’il n’est peut-être pas disponible pour tout le monde.

Un utilisateur peut rpm -q --provides <pkgname>afficher toutes les fonctionnalités fournies par un package, puis utiliser rpm -q --whatrequires <capability>pour déterminer les packages installés qui en ont besoin. Cette information peut être interrogée de manière succincte à l'aide d'une ligne simple BASH (séparée ici en deux lignes):

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

Cela utilise uniquement les options intégrées à rpmlui-même et ne nécessite donc pas l'installation de packages supplémentaires (par exemple yum-utilsdans CentOS 7, qui contient le package repoquery).

villapx
la source