Como listar dependências de RPM?

36

Nosso servidor de produção está executando o CentOS versão 5.2 (Final).

Como vejo / get / listar todas as dependências de um pacote RPM já instalado ?

Por exemplo: SQLite v3.3.6 já está instalado no servidor. Eu quero ver todas as dependências deste pacote específico.

Aqui está a saída do comando: rpm -qa |grep sqlite

python-sqlite-1.1.7-1.2.1
sqlite-3.3.6-2
sqlite-3.3.6-2

Além disso, por que ele está listando 2 entradas sqlite-3.3.6-2aqui?

Gnanam
fonte

Respostas:

28
  1. rpm -q --requires somepackagehere

  2. Um é o i?86pacote, o outro é o x86_64pacote.

Ignacio Vazquez-Abrams
fonte
Meu sistema operacional é de 64 bits. 2 pacotes de arquitetura podem coexistir no mesmo servidor? Qual é o objetivo / necessidade de ter 2 pacotes de arquitetura ao mesmo tempo?
Gnanam
2
As distros derivadas do RH- / Fedora suportam multiarch , pelo que vários pacotes pertencentes a arcos "diferentes, mas similares o suficiente" podem coexistir para permitir a execução de executáveis ​​criados para ambos os arcos.
Ignacio Vazquez-Abrams
Infelizmente, isso requer que o pacote já esteja instalado localmente: \
rogerdpack 4/17/17
@rogerdpack: Bem, sim. Isso é exatamente o que a pergunta pediu.
Ignacio Vazquez-Abrams
Sim, infelizmente, o Google envia "todo mundo aqui", se você "listar dependências de RPM" no Google - o Google tem o escopo em questão! Independentemente disso, consulte a resposta de davey para todos os seguidores que desejam essa funcionalidade.
Rogerdpack
34

O yum deplistcomando mostrará quais rpm são dependências, eis um exemplo para o expectpacote (isso funcionará mesmo que você ainda não tenha o pacote instalado localmente):

# yum deplist expect
..
..
package: expect.i386 5.43.0-5.1
 dependency: libc.so.6
  provider: glibc.i686 2.5-49
  provider: glibc.i686 2.5-49
 dependency: libtcl8.4.so
  provider: tcl.i386 8.4.13-4.el5
davey
fonte
Este comando não está funcionando. Estou faltando alguma coisa ou algo está faltando em seu comando?
Gnanam
Desculpe, falta um espaço, o comando yum deplist package.
davey
1
Marcar com +1 o uso do YUM aqui é legal, é recursivo e resolve coisas como 'perl (COnfig :: Tiny)' ou 'libc.so (64bit)'.
precisa saber é o seguinte
6

Seguindo a resposta de Ignacio, você pode ver a arquitetura específica dos pacotes fazendo o seguinte:

$ rpm -qa --queryformat "%{NAME} %{ARCH}\n" sqlite
sqlite i686

No meu caso, eu só tenho o pacote i686 ... mas você pode obter a arquitetura associada aos pacotes dessa maneira. Se você estiver interessado no que mais pode obter no --queryformat, emita a rpm --querytagspara ver a lista de variáveis ​​disponíveis.

Alex
fonte
1
+1 Seu comando de listagem por arquitetura também é útil.
Gnanam
3

Eu tenho um snippet de shell rápido que imprime todos os pacotes instalados junto com suas dependências:

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done
Daeon
fonte
3

As pessoas já responderam com:

  1. rpm -q --requires PKG
  2. yum -q deplist PKG

Sim, rpmou yumfunciona ou responde corretamente à pergunta. A principal diferença entre rpme yumé que o yum também mostra quais pacotes você pode instalar para atender aos requisitos da biblioteca e / ou arquivo. Infelizmente, se o pacote não estiver instalado, nenhum desses métodos será útil. Como o pôster original já especificou que o pacote que você está verificando está instalado, esse é um ponto mudo.

E se você não tivesse o pacote instalado? yumainda pode ser usado, mas indiretamente. Você pode fazer uma instalação simulada cancelando a operação de instalação.

printf n  |  yum install PKG  |  grep -- "---> Package"

Aqui está um exemplo:

printf n  |  yum install php  |  grep -- "---> Package"
---> Package php.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-cli.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-common.x86_64 0:5.4.16-45.el7 will be installed
---> Package libzip.x86_64 0:0.10.1-8.el7 will be installed
Suave-V
fonte
Solução brilhante para as limitações de relatórios.
MarkHu