Por que o rpm --whaquerquires falha ao reportar dependências?

1

Estou pensando em usar o LibreSSL em vez do OpenSSL para o CentOS 7 . Como esta máquina será muito limitada em quais serviços ela é executada, eu me perguntei se o OpenSSL poderia ser removido completamente.

#> rpm -qa | grep ssl
openssl-libs-1.0.1e-42.el7.9.x86_64
openssl-1.0.1e-42.el7.9.x86_64

Ok, então tente

#> rpm -q --whatrequires openssl-libs-1.0.1e-42.el7.9.x86_64
no package requires openssl-libs-1.0.1e-42.el7.9.x86_64
#> rpm -q --whatrequires openssl-1.0.1e-42.el7.9.x86_64
no package requires openssl-1.0.1e-42.el7.9.x86_64

Realmente?

#> sudo yum remove openssl-libs-1.0.1e-42.el7.9.x86_64

Isso fornece muitas linhas como esta:

--> Processing Dependency: perl(IPC::Cmd) >= 0.42 for package: perl-File-Fetch-0.42-2.el7.noarch
--> Running transaction check
---> Package perl-File-Fetch.noarch 0:0.42-2.el7 will be erased

etc ad nauseum, então

Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Eu não esperava que a remoção do OpenSSL acontecesse sem reclamação, mas por que rpm -q --whatrequires não relata essas deficiências?

Como faço para listar todos os pacotes que exigem, direta ou indiretamente, um determinado pacote?

Com isto quero dizer: se o pacote X fosse removido, e o pacote / arquivo Y seria removido se X fosse removido, e o pacote Z dependesse de Y, como eu listaria todos esses Z para qualquer dado X?

    
por spraff 12.10.2016 / 16:25

2 respostas

0

Como já foi mencionado, outros pacotes podem exigir arquivos ou algo mais da lista "fornece" do pacote:

rpm -q --list openssl openssl-libs
rpm -q --provides openssl openssl-libs

Para ver se existem alguns "whatrequires" (não todos):

rpm -e --test openssl openssl-libs

Para listar todos , o IMO não é diretamente possível com rpm , mas em yum case (não testado):

yes "N" | yum remove openssl openssl-libs

ou

yum deplist openssl openssl-libs

ou

repoquery --alldeps --whatrequires openssl openssl-libs
    
por 12.10.2016 / 17:01
0

isso significa que ninguém pede explicitamente que o pacote seja instalado; mas alguns pacotes podem depender dos arquivos instalados por esses pacotes. Por exemplo, na minha máquina; ninguém depende do pacote; mas alguns dependem da biblioteca fornecida pelo pacote:

$ rpm -q libopenssl1_0_0-32bit
libopenssl1_0_0-32bit-1.0.1i-18.1.x86_64 # whence this package is installed
$ rpm -q --whatrequires libopenssl1_0_0-32bit
no package requires libopenssl1_0_0-32bit
$ rpm -ql libopenssl1_0_0-32bit
/lib/engines
/lib/engines/libcapi.so
/lib/engines/libgmp.so
/lib/engines/libgost.so
/lib/engines/libpadlock.so
/lib/libcrypto.so.1.0.0
/lib/libssl.so.1.0.0
$ rpm -q --whatrequires libssl.so.1.0.0
libldap-2_4-2-32bit-2.4.41-14.1.x86_64
cups-libs-32bit-1.7.5-7.1.x86_64

EDIT devido à pergunta editada:

você pode usar rpm -e --test para descobrir quais são esses rpms. Com algum processamento bash, você pode obter uma lista limpa:

$ rpm -e --test libopenssl1_0_0-32bit 2>&1 | grep needed | awk '{print $6}' | sort | uniq
cups-libs-32bit-1.7.5-7.1.x86_64
libldap-2_4-2-32bit-2.4.41-14.1.x86_64
    
por 12.10.2016 / 16:38