web-dev-qa-db-fra.com

Liste des packages dans Yum qui dépendent d'un autre package installé

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à 3.3.6 installé.

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

53
Rich

L'option rpm que vous souhaitez est:

rpm -q --whatrequires sqlite

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

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

50
Wes Hardaker

Réponse

repoquery -q --installed --whatrequires sqlite

Explications

rpm -q --whatrequires sqlite Signale uniquement les dépendances sur les noms de packages.

Au contraire, repoquery agit 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 package libdb.

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

Aucun package ne dépend de libdb, nous devrions donc pouvoir le supprimer en douceur. Toutefois...

# 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 voir, certains autres packages ne dépendaient pas directement du package, mais du fichier libdb-5.3.so()(64bit) fourni par celui-ci.

Enfin, voici la vraie liste des packages 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
43

Pour dnf (nouvelle version de yum), vous pouvez essayer avec la commande wrapper repoquery:

dnf repoquery --whatrequires sqlite

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

dnf -y install dnf-plugins-core
12
teoincontatto

Vous pouvez également essayer cette commande.

repoquery --whatrequires sqlite

J'ai obtenu cette commande de ServerFault et aussi de Les forums Fedora.

7
FilBot3

Je pense que ce que vous voulez vraiment savoir, c'est "quels sont les paquets qui nécessitent sqlite-3.3.6, mais vous ne serez pas satisfait de sqlite-3.4.z" ... et la seule bonne façon de le savoir est de essayez-le. Comme:

echo | yum upgrade sqlite
3
James Antill

Comme Wes Hardaker a dit , une bonne méthode intégrée consiste à utiliser rpm -q --whatrequires <package>. Le fait est que rpm fonctionne sur les capacités pour la résolution des dépendances, et pas seulement sur les packages, comme par exemple dpkg fait dans la famille Debian/Ubuntu des distributions Linux. Comme d'autres l'ont fait remarquer, faire simplement rpm -q --whatrequires sqlite ne raconte pas toute l'histoire, c'est pourquoi certains ont suggéré d'utiliser repoquery. repoquery, cependant, n'est pas installé par défaut dans RHEL/CentOS 7 minimal (peut-être aussi sur le bureau?), il peut donc ne pas être disponible pour tout le monde.

Un utilisateur peut faire rpm -q --provides <pkgname> pour voir toutes les fonctionnalités d'un package, puis utilisez rpm -q --whatrequires <capability> pour voir quels packages installés nécessitent cette fonctionnalité. Cette information peut être interrogée de manière succincte à l'aide d'un BASH à une ligne (séparé ici en deux lignes pour la longueur):

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

Cela n'utilise que les options intégrées à rpm lui-même, et il ne nécessite donc pas d'installer de packages supplémentaires (par exemple yum-utils dans CentOS 7, qui est le package qui contient repoquery).

1
villapx