Listar todos os pacotes RPM instalados no repositório "X"

44

Como posso obter uma lista de todos os pacotes RPM que foram instalados no meu sistema em um repositório específico (por exemplo, "epel")?

Lorin Hochstein
fonte

Respostas:

45

CentOS / RHEL / Fedora 22 ou anterior

yum list installed | grep @epel

Fedora 23 ou posterior

dnf list installed | grep @epel
David Schwartz
fonte
8
Isso não vai funcionar. Yum produzirá linhas para o tubo que serão quebradas se ficarem muito longas. Portanto, a entrada do grep é basicamente uma linha por pacote, mas pode ser duas linhas. Yum poderia passar "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel". (Imagine os sublinhados como espaços.) O "@epel" está na próxima linha da entrada que grep vê. Então, o grep exibirá essa linha com nada além de "@epel", mas não a linha anterior com o nome do pacote.
Todd Walton
Pode ser necessário executar esses comandos como root até que o bugzilla.redhat.com/show_bug.cgi?id=1525645 seja corrigido.
Pros19:
o comando yum parece não funcionar se um dos repositórios estiver com problemas. Eu precisava dessa lista para ver se queria desativar o repositório com problemas.
Jayen
@Todd Watson Eu sei, é um hack, mas e quanto a "exportar COLUNAS = 999 yum ..."
Massimo
Isso funciona, @Massimo? Isso seria uma boa solução alternativa. Eu também encontrei esta pergunta sobre o Unix StackExchange: unix.stackexchange.com/questions/308731/…
Todd Walton
17

No RHEL6, conforme sugerido nesta resposta do stackoverflow , há um método mais completo de fazer isso com yumdb:

yumdb search from_repo REPOID*

O repoid recebe curingas.

Pretty-print

Se vamos trapacear e canalizar a saída, também podemos obter um efeito bonito de impressão. Aqui está um usandoawk

yumdb search from_repo REPOID* |awk -F"\n" '{ RS=""; print $1 }'

Usando egrepougrep -e

yumdb search from_repo REPOID* |egrep -v '(from_repo|^$)'

list_ALL_AVAILABLE_from_repo

Para listar todos os pacotes disponíveis em um repositório especificado, faça:

repoquery -a --repoid=REPONAME
ILMostro_7
fonte
Apenas uma observação lateral: Para listar todos os pacotes de um repoquery -qa --repoid=REPONAME
repositório
2
Essa também é uma ótima resposta. A saída é maior que a resposta aceita, mas é formatada de uma maneira melhor.
Routhinator
Pode ser simplificado repoquery -a --repoid=REPONAMEporque, de acordo com a -qopção da página de manual, é compatível com rpmquery e não faz nada.
Rockallite 16/02
@Rockallite está certo; para dnf, o -qarealmente falha. Eu não posso upvote o comentário devido à remoção anteriormente a upvote :( Estou atualizando a resposta para refletir isso.
ILMostro_7
11
dnf repo-pkgs <repoid> list installed

Notas

O comando acima usa DNF para listar os pacotes instalados a partir do <repoid>. Nota repo-pkgsé apenas um alias de repository-packages.

Nas manpáginas:

man dnf | grep "repository-packages.*list.*installed" -A 1

Leitura adicional:

man dnf
Peque
fonte
3

A saída de Grepping yum é a maneira mais óbvia:

yum list installed | grep @epel

No entanto, você não pode exibir propriedades extras de pacotes e é difícil analisar com um script. A ferramenta repoquerydo pacote yum-utilsé a ferramenta, mas não é instalada por padrão.

repoquery -a --installed --qf "%{ui_from_repo} %{name}" | grep '^@epel'

e um exemplo mais complexo:

repoquery -a --installed --qf "%-20{ui_from_repo} %-30{name} %-7{arch} %{epoch}:%-12{version} %-4{release}" | grep '^@epel'
Franklin Piat
fonte
2

Servidor RHEL 7.5 (Maipo)

yum repo-pkgs <repoid> list installedpode ser usado para recuperar as mesmas informações de yumdb search from_repo <repoid>, mas em um formato diferente.

# yum help repo-pkgs
repo-pkgs <repoid> <list|info|install|remove|upgrade|reinstall*|remove-or-*> [pkg(s)]

Treat a repo. as a group of packages, so we can install/remove all of them

aliases: repo-packages, repository-pkgs, repository-packages

epelSaídas de amostra :

# yumdb search from_repo epel
htop-2.2.0-1.el7.x86_64
    from_repo = epel

supervisor-3.1.4-1.el7.noarch
    from_repo = epel


# yum repo-pkgs epel list installed
Installed Packages
htop.x86_64            2.2.0-1.el7          @epel
supervisor.noarch      3.1.4-1.el7          @epel
alexandrul
fonte
1

Você pode verificar o Vendorcabeçalho dos rpms instalados.

Este exemplo lista todos os pacotes do repositório VideoLAN :

 rpm -q -a --qf "%{Name}:%{Vendor}\n" \
     | grep -F ":VideoLAN Project (http://www.videolan.org)"

Obviamente, você precisa determinar se o Vendorcabeçalho do seu repositório é único entre diferentes repositórios.

andcoz
fonte
3
Não há um mapeamento individual entre o fornecedor e os repositórios e, em alguns casos, a sequência do fornecedor está em branco.
Lorin Hochstein 13/10
1

Para pessoas que só querem encontrar repositórios ausentes:

yum list installed | awk '{print $3}' | sort | uniq

Isso deve retornar todos os repositórios de onde você tem pacotes instalados.

derberlinersmurf
fonte