Como saber de qual repositório yum um pacote foi instalado?

152

Depois de instalar um pacote pelo yum (com vários repositórios configurados), como posso encontrar de qual repositório ele foi instalado?

Se eu executar yum info package-name(ou yum list package-name), só consigo ver que o pacote está "instalado".

lg.
fonte
1
Ótima pergunta! Eu instalei o yum-utils e tentei um chamado utils repoquery, mas sem sorte.
23413 Sean Staats
ver também serverfault.com/questions/90409/... :)
Warren
@warren seu link não é útil porque é uma pergunta sobre "qual repo é uma rpm armazenada", mas essa pergunta pergunta "qual repo é uma rpm INSTALADA". perguntas diferentes.
Trevor Boyd Smith
se você está acostumado a fazer rpm -qa|grep NAME, pode fazer yum list installed|grep NAMEpara descobrir de que repositório é o rpm .
Trevor Boyd Smith
@TrevorBoydSmith - há 7 anos, estava próximo. Hoje ainda é semelhante. Nunca disse que era o mesmo . Só que isso estava relacionado.
warren

Respostas:

82

Com o yum-utils instalado, o repoquery fornecerá as informações que você procura (aqui 'epel' é o repositório).

└─[$]> repoquery -i cherokee

Name        : cherokee
Version     : 0.99.49
Release     : 1.el5
Architecture: i386
Size        : 8495964
Packager    : Fedora Project
Group       : Applications/Internet
URL         : http://www.cherokee-project.com/
Repository  : epel
Summary     : Flexible and Fast Webserver
Description :
Cherokee is a very fast, flexible and easy to configure Web Server. It supports
the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, TLS and SSL
encrypted connections, Virtual hosts, Authentication, on the fly encoding,
Apache compatible log files, and much more.
Xiong Chiamiov
fonte
2
repoquery não parece funcionar corretamente, recebo diferentes versões de pacotes e yum info package_namenão parece consultar os repositórios na mesma ordem que o yum.
Mike Miller
O mesmo aqui em alguns servidores. yum info package_nameretorna mais resultados do que repoquery aparentemente. É por isso que a troca de pilhas não deve bloquear os votos.
reflexiv
8
Achei a resposta de Xiong Chiamiov incorreta. repoquery -i $pkgfornece um repositório a partir do qual a $pkgestá disponível, não o repositório a partir do qual o $pkgfoi instalado. Eu fiz esse comando rpm -qi $pkge obtive números de versão diferentes. rpmresultou em um número de versão anterior ao de repoquery.
É possível que sua cópia local esteja desatualizada ou tenha sido instalada com comandos adicionais para o yum (por exemplo --use-mirror). Eu não acho que é possível sempre obter a resposta certa.
Xiong Chiamiov
user158844 está certo. Isso informará quais repositórios fornecem um determinado pacote, mas não de que repositório veio um pacote específico. Se você instalou um pacote de um determinado repositório, removeu esse repositório e instalou outro repositório que fornece um pacote com o mesmo nome, executando 'repoquery -i' assim retornaria os pacotes que listam o repositório recém-instalado, não aquele que você realmente instalou o pacote. O solicitante deseja saber de qual pacote o software instalado realmente veio. Não é possível que repositórios atuais tenham pacotes com o mesmo nome.
Todd Walton
43

Qual versão do yum?

Na versão atual, se o pacote instalado for a mesma versão mais recente disponível, o repo do qual foi instalado é mostrado.

$ yum info irssi
Installed Packages
Name       : irssi
Arch       : i586
Version    : 0.8.14
Release    : 1.fc11
Size       : 2.3 M
Repo       : installed
From repo  : updates
Summary    : Modular text mode IRC client with Perl scripting
URL        : http://irssi.org/
License    : GPLv2+
Description: Irssi is a modular IRC client with Perl scripting. Only text-mode
           : frontend is currently supported. The GTK/GNOME frontend is no
           : longer being maintained.

$ yum --version
3.2.23

Se houver um pacote mais recente disponível, ele será mostrado separadamente, com a nova versão mostrando o repositório do qual está disponível.

theotherreceive
fonte
Estou usando o yum 3.2.19 no CentOs 5.3 e a linha "From repo" não existe.
lg.
Sim ... eu estava testando em 3.2.21, que não tem essa informação em lugar algum. Quando eu fiz na minha caixa que tem 3.2.23, funcionou.
Alex
Agora, esta é a melhor solução, mas não aplicável ao RHEL / Centos 5.3. Aceito esta solução, mas estou pronto para escolher outra resposta, se for aplicável também ao RHEL / Centos 5.3.
lg.
2
Isso também é proibido no CentOS 5.5.
Mike Miller
"De rep" não está disponível mesmo em centos 5.8
sepehr
22

Chegando muito tarde, mas (pelo menos no Fedora 15) é possível usar o yumdb para consultas semelhantes:

yumdb info 'python*'

E o que eu realmente precisava para listar pacotes de determinados repositórios:

yumdb search from_repo 'my-*-repo'
marciano
fonte
Também funciona no Fedora 14
lg.
1
funciona no RHEL 6.2
pixelbeat 8/08
8

Se tudo mais falhar, você pode inspecionar o yumdb manualmente. Ele está localizado /var/lib/yum/yumdbe contém informações detalhadas sobre cada pacote instalado. Você ficará particularmente interessado from_repo. Por exemplo, para o bind-utilspacote:

# for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i`; done
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_data: 39f7840f93d3d76825a9e8da79cfe0366f7fad68f018a273477aee62cccfa3f4
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_type: sha256
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/command_line: install bind-utils
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo: updates
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_revision: 1397654451
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_timestamp: 1397654759
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/installed_by: 0
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/reason: user
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/releasever: 6

Para obter apenas as informações desejadas:

# cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo
updates

Versões posteriores fornecerão ainda mais dados; por exemplo, no EL 7, o espelho exato e o URL do qual o pacote foi baixado são armazenados aqui.

Michael Hampton
fonte
+1. Mas é ainda melhor fazer algo como:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneque no exemplo acima retorna: updates- muito mais legível!
Greg Dubicki
1
@GregDubicki O objetivo do comando era mostrar mais o contexto do que está acontecendo e como as coisas são armazenadas. Aparentemente, ele não conseguiu: não há necessidade de grepnada aqui, e você pode até interromper o loop. Um muito simples cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoé tudo que você precisa.
Michael Hampton
6
rpm -qi packagename

Dirá a você o fornecedor e o empacotador

Esmail
fonte
5

Para ver o que foi instalado no repo epel: (Deve funcionar no Centos 5.5), observe que, se você não tiver um repositório chamado epel, ele emitirá todas as coisas instaladas.

repetição --repoid = epel -a | lista xargs yum instalada

David A.
fonte
1
Parece funcionar, desde que não haja um pacote atualizado no repositório. Então você precisa executar o yum update antes de usá-lo.
Codewaggle
4

Se o pacote foi instalado recentemente, você pode procurar em / var / cache / yum.

Dentro desse diretório, há um diretório para cada repositório e nesse diretório um pacote. Então, você faria algo como:

find /var/cache/yum -name [package-name]*

No entanto, o cache deve ser ativado no seu arquivo /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Observe que a yum clean [packages|all]limpará o diretório de cache.

Se o diretório de cache estiver vazio, há uma maneira alternativa. As informações que são lidas por yum info [package]vêm de /var/cache/yum/[repo}/primary.xml.gz

Você pode examinar o arquivo digitando:

gunzip -d -c /var/cache/yum/[repo]/primary.xml.gz | grep '<name>[package]'

No entanto, em máquinas nas quais yum info [package]não é exibido "Do repositório:", conforme indicado por 'theotherreceive', é porque ele não está no arquivo primary.xml, portanto, não há como recuperar essas informações. Portanto, se o pacote estiver em dois ou mais arquivos primary.xml, você precisará determinar a prioridade de repo em seu sistema.

Swoogan
fonte
Esta solução talvez seja uma opção (eu voto), mas estou procurando uma resposta definitiva.
lg.
4

Com base e resposta de Swoogan
On RedHat e CentOS, pode-se fazer

sudo grep -ir PACKAGE_NAME /var/cache/yum/

Os resultados devem ser algo como

Binary file /var/cache/yum/REPOSITORY_NAME/primary.xml.gz.sqlite matches

Onde repository_name é o repositório onde seu pacote pode ser encontrado e provavelmente foi instalado a partir do primeiro de uma lista (consulte yum repolist)

iddqd
fonte
1

Essas informações são capturadas em algum lugar? O pacote não possui essas informações e o yum não se importa depois de encontrar o pacote. Provavelmente, você pode descobrir tudo que repositórios têm o pacote e depois determinar qual deles tem prioridade.

Alex
fonte
Esta solução talvez seja uma opção (eu voto), mas apenas para os pacotes instalados recentes, porque posso alterar o repositório e sua prioridade.
lg.
1

Não é uma ótima solução, mas descobri que a lista do yum disponível mostrará onde a versão mais atualizada de cada pacote está disponível, por exemplo:

lista yum disponível | grep gstreamer

PackageKit-gstreamer-plugin.x86_64 0.3.16-1.fc10          updates               

O bluez-gstreamer.i386 4.30-2.fc10 atualiza o
gstreamer.i386 0.10.21-2.fc10 fedora
gstreamer-devel.i386 0.10.21-2.fc10 fedora
gstreamer-devel.x86_64 0.10.21-2.fc10 fedora
gstreamer- plugins-bad-devel.i386 0.10.9-1.fc10 livre de rpmfusion
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 livre de rpmfusion

Assim, você pode fazer uma lista do yum disponível no seu pacote, comparar a versão instalada usando a lista do yum instalada e ter uma boa idéia de qual repositório veio se as versões coincidirem.

gareth_bowles
fonte
Isso é verdade apenas se o pacote ainda não estiver instalado.
lg.
Embora não responda exatamente à pergunta dos OPs, foi muito útil para mim, porque funciona no Centoss 5.5 com apenas yum e nenhum outro utilitário, e você pode: 1. Desinstalar o pacote e consultar para ver onde o repositório é reinstalado ou 2. Consulte em uma máquina diferente sem o pacote instalado.
Lreeder 4/12/14
1

Você pode adicionar o sinalizador detalhado em "yum info":

yum info -v <package_name>

O repositório de instalação estará na saída "De repo".

smw
fonte
Esta parece ser a única solução que não requer a instalação do yum-utils.
Mark Edington
Isso lista apenas "instalado" para mim.
frogstarr78 19/03
1

Então eu sei que essa é uma pergunta um pouco antiga - mas aparece na pesquisa do google pelo que eu estava procurando.

Também existe um método para obter uma lista exclusiva de repositórios usados:

# repoquery -ai | grep 'Repository  : ' | sort | uniq

Isso listará os repositórios dos quais os pacotes foram instalados.

Steven Haigh
fonte
1

A abordagem mais simples e direta, sem a instalação de ferramentas extras, greping ou saída de informações estranhas, é simplesmente:

yum list installed [package name]

A terceira coluna fornecerá o ID do repositório do qual o pacote foi instalado.

Isso foi mencionado em um comentário sobre a pergunta original usando grep, mas isso não é necessário. Você pode simplesmente passar o nome do pacote diretamente yumpara o filtro.

Scott Buchanan
fonte
-1

A maneira mais fácil é esta:

rpm -qa --qf '%{NAME} %{VENDOR}\n'

Mais dicas e truques estão disponíveis aqui: http://wiki.centos.org/TipsAndTricks/YumAndRPM

Bluesguy
fonte
2
Dessa maneira (adicionando um canal com o nome grep -i package), descubro o fornecedor, mas não o repositório.
lg.
1
O fornecedor não tem (quase) nada a ver com o repositório.
Matteo