Respostas:
A opção rpm que você deseja é:
rpm -q --whatrequires sqlite
Editado: adicionado - instalado por discussão em outras respostas / comentários
Editado: removido - instalado, pois é uma opção inválida para rpm
--installed
é uma opção para, repoquery
mas é inválida para rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
relata apenas dependências nos nomes dos pacotes.
Pelo contrário, repoquery
age da seguinte forma (de páginas de manual):
--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.
Vamos pegar o pacote libdb
.
# rpm -q --whatrequires libdb
no package requires libdb
Nenhum pacote depende libdb
, portanto, poderemos removê-lo sem problemas. Contudo...
# 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
Como você pode ver, alguns outros pacotes dependiam não diretamente do pacote, mas do arquivo libdb-5.3.so()(64bit)
fornecido por ele.
Finalmente, aqui está a lista real de pacotes, dependendo 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
Para o dnf (nova versão do yum), você pode tentar com o comando repoquery wrapper:
dnf repoquery --whatrequires sqlite
Se não estiver disponível, você pode instalá-lo com o comando:
dnf -y install dnf-plugins-core
--installed --recursive
no final para que ele só retorna o que está realmente instalado e não puxar a partir dos repositórios
Você também pode experimentar este comando.
repoquery --whatrequires sqlite
Eu recebi esse comando do ServerFault e também dos Fóruns do Fedora.
Eu acho que o que você realmente quer saber é "quais são os pacotes que exigem o sqlite-3.3.6, mas não serão felizes com o sqlite-3.4.z" ... e a única maneira de descobrir isso é: tente. Gostar:
echo | yum upgrade sqlite
Como Wes Hardaker disse , um bom método interno é usar rpm -q --whatrequires <package>
. O fato é que rpm
opera em recursos para resolução de dependências, não apenas em pacotes, como por exemplo dpkg
na família de distribuições Linux Debian / Ubuntu. Como outros observaram, simplesmente fazer rpm -q --whatrequires sqlite
não conta a história toda, daí o motivo de alguns sugerirem o uso repoquery
. repoquery
, no entanto, não é instalado por padrão no RHEL / CentOS 7 mínimo (talvez na área de trabalho também?); portanto, pode não estar disponível para todos.
Um usuário pode fazer rpm -q --provides <pkgname>
para ver todos os recursos que um pacote fornece e depois usar rpm -q --whatrequires <capability>
para ver quais pacotes instalados exigem esse recurso. Esta informação pode ser consultada de forma sucinta usando uma linha única BASH (separada aqui em duas linhas para o comprimento):
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done
Isso usa apenas opções embutidas em rpm
si e, portanto, não requer a instalação de nenhum pacote adicional (por exemplo, yum-utils
no CentOS 7, que é o pacote que contém repoquery
).
repoquery
pode ser usado para gerar uma estrutura agradável como uma árvore de todos os pacotes que requerem um pacote específico, por exemplo:repoquery --pkgnarrow=installed --tree-whatrequires sqlite