Réponses:
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
--installed
est une option pour repoquery
mais n'est pas valide pour rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
rapporte uniquement les dépendances sur les noms de paquets.
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.
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
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
--installed --recursive
de 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
Vous pouvez également essayer cette commande.
repoquery --whatrequires sqlite
J'ai reçu cette commande de ServerFault et également de The Fedora Forums.
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
Comme l'a dit Wes Hardaker , une bonne méthode intégrée consiste à utiliser rpm -q --whatrequires <package>
. Le fait est que cela rpm
fonctionne sur les capacités de résolution des dépendances, pas simplement sur les paquets, comme c'est le dpkg
cas par exemple dans la famille de distributions Linux Debian / Ubuntu. Comme d'autres l'ont noté, le simple fait de rpm -q --whatrequires sqlite
raconter ne raconte pas toute l'histoire, raison pour laquelle certains ont suggéré d'utiliser repoquery
. repoquery
Cependant, 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 à rpm
lui-même et ne nécessite donc pas l'installation de packages supplémentaires (par exemple yum-utils
dans CentOS 7, qui contient le package repoquery
).
repoquery
peut ê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