rpm que fornece um arquivo

rpm que fornece um arquivo

Qual é o comando para listar quais rpms podem fornecer um determinado arquivo: os rpms que fornecem arquivos já instalados ou os rpms que podem fornecer arquivos que não estão instalados?

Responder1

Para arquivos/pacotes já instalados:

[jb@smokey ~]$ rpm -qf /etc/sudoers
sudo-1.6.9p13-8.fc9.x86_64

Para arquivos e pacotes ainda não instalados:

[jb@smokey ~]$ yum o que fornece "/etc/sudoers"
sudo-1.6.9p13-8.fc9.x86_64: Permite acesso root restrito para usuários especificados
Repo: atualizações-newkey
Correspondente de:
Nome do arquivo: /etc/sudoers  

sudo-1.6.9p13-4.fc9.x86_64: Permite acesso root restrito para usuários especificados
Repositório: fedora
Correspondente de:
Nome do arquivo: /etc/sudoers

sudo-1.6.9p13-8.fc9.x86_64: Permite acesso root restrito para usuários especificados
Repositório: instalado
Correspondente de:
Outros: fornece correspondência: /etc/sudoers

Observe que "yum whatprovides" é uma correspondência de padrão, portanto, se você não tiver certeza de onde o arquivo que está procurando ficaria na estrutura de diretórios, coloque-o entre aspas e asteriscos:

yum, o que fornece "*foo*"

Da mesma forma, se tiver certeza de que o que está procurando é um binário, você pode fazer:

yum, o que fornece "*bin/foo"

Responder2

Não sei sobre arquivos que ainda não estão instalados, mas para um arquivo que já está instalado você pode usar rpm -qif:

rpm -qif /bin/ls
Nome: coreutils Realocações: (não relocável)
Versão: 5.97 Fornecedor: Red Hat, Inc.
Lançamento: 23.el5 Data de construção: segunda-feira, 13 de julho de 2009, 04:21:27 AM MDT
Data de instalação: Sexta-feira, 11 de setembro de 2009, 04:46:01 AM MDT Build Host: hs20-bc1-7.build.redhat.com
Grupo: Ambiente do sistema/RPM de origem base: coreutils-5.97-23.el5.src.rpm
Tamanho: 9053874 Licença: GPLv2+
Assinatura: DSA/SHA1, terça-feira, 28 de julho de 2009, 03:42:40 MDT, ID da chave 5326810137017186
Empacotador: Red Hat, Inc.
URL:
Resumo: Os utilitários principais do GNU: um conjunto de ferramentas comumente usadas em scripts shell
Descrição :
Estes são os utilitários principais do GNU. Este pacote é a combinação de
os antigos pacotes GNU fileutils, sh-utils e textutils.
Se você baixou o RPM você pode consultar para ver o que vai instalar:
rpm -qilp ./Server/jzlib-1.0.7-4jpp.1.i386.rpm
aviso: ./Server/jzlib-1.0.7-4jpp.1.i386.rpm: Assinatura DSA do cabeçalho V3: NOKEY, ID da chave 37017186
Nome: jzlib Relocações: (não relocável)
Versão: 1.0.7 Fornecedor: Red Hat, Inc.
Lançamento: 4jpp.1 Data de construção: terça-feira, 8 de agosto de 2006, 12h10:03 MDT
Data de instalação: (não instalado) Host de compilação: hs20-bc1-6.build.redhat.com
Grupo: Desenvolvimento/Bibliotecas/Java Source RPM: jzlib-1.0.7-4jpp.1.src.rpm
Tamanho: 280436 Licença: estilo BSD
Assinatura: DSA/SHA1, quinta-feira, 18 de janeiro de 2007, 08:49:50 MST, ID da chave 5326810137017186
Empacotador: Red Hat, Inc.
URL:
Resumo: JZlib reimplementação de zlib em Java puro
Descrição :
O zlib foi projetado para ser um software gratuito, de uso geral e legalmente desimpedido.
- isto é, não coberto por nenhuma patente - compactação de dados sem perdas
biblioteca para uso em praticamente qualquer hardware de computador e sistema operacional.
O zlib foi escrito por Jean-loup Gailly (compressão) e Mark Adler
(descompressão).
/usr/lib/gcj/jzlib/jzlib-1.0.7.jar.db
/usr/lib/gcj/jzlib/jzlib-1.0.7.jar.so
/usr/share/doc/jzlib-1.0.7
/usr/share/doc/jzlib-1.0.7/LICENSE.txt
/usr/share/java/jzlib-1.0.7.jar
/usr/share/java/jzlib.jar
você pode omitir o "-i" das opções se não quiser ver todas as informações sobre o RPM.

Responder3

Em repositórios baseados em yum, você poderia tentar algo como yum provides */filename

Responder4

Se você não quiser (ou não puder) usar o yum (por exemplo, em uma máquina offline), você pode pesquisar dentro de RPMs não instalados fazendo

# rpm -qp --filesbypkg *rpms-to-search-in* | grep *file-to-search-for*

Isso pode levar algum tempo, então seja paciente ao pesquisar entre *.rpm em um repositório grande, como um DVD de instalação, por exemplo. Mas, diferentemente de "-qpl", "-qp --filesbypkg" listará o arquivo e o RPM ao qual ele pertence, por exemplo:

# rpm -qpl p*.rpm|grep libpq.so.4
/usr/lib/libpq.so.4
/usr/lib64/libpq.so.4

# rpm -qp --filesbypkg p*.rpm|grep libpq.so.4
postgresql-libs          /usr/lib/libpq.so.4
postgresql-libs          /usr/lib64/libpq.so.4

nesse caso, a aparente duplicata é devido à presença dos pacotes i386 e x86_64 (tornado óbvio pela string "lib64").

informação relacionada