Enumere todos los paquetes RPM instalados desde el repositorio "X"

44

¿Cómo puedo obtener una lista de todos los paquetes RPM que se han instalado en mi sistema desde un repositorio particular (por ejemplo, "epel")?

Lorin Hochstein
fuente

Respuestas:

45

CentOS / RHEL / Fedora 22 o anterior

yum list installed | grep @epel

Fedora 23 o posterior

dnf list installed | grep @epel
David Schwartz
fuente
8
Esto no funcionará. Yum enviará líneas a la tubería que se romperán si se alargan demasiado. Entonces, la entrada de grep es principalmente una línea por paquete, pero podría ser dos líneas. Yum podría pasar "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel". (Imagine los guiones bajos como espacios). El "@epel" se encuentra en la siguiente línea de entrada que ve grep. Entonces grep generará esa línea con nada más que "@epel" pero no la línea anterior con el nombre del paquete.
Todd Walton
Es posible que deba ejecutar esos comandos como root hasta que se corrija bugzilla.redhat.com/show_bug.cgi?id=1525645 .
proski
el comando yum no parece funcionar si uno de los repos tiene problemas. Necesitaba esta lista para ver si quería deshabilitar el repositorio con problemas.
Jayen
@Todd Watson Lo sé, es un truco, pero ¿qué pasa con "export COLUMNS = 999 yum ..."
Massimo
¿Funciona eso, @ Massimo? Esa sería una buena solución. También encontré esta pregunta de Unix StackExchange: unix.stackexchange.com/questions/308731/…
Todd Walton
17

A partir de RHEL6, como se sugiere en esta respuesta de stackoverflow , hay un método más completo para hacer esto con yumdb:

yumdb search from_repo REPOID*

El repoid toma comodines.

Bonito estampado

Si vamos a engañar y canalizar la salida, también podemos lograr un efecto de impresión bonita. Aquí hay uno usandoawk

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

Usando egrepogrep -e

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

list_ALL_AVAILABLE_from_repo

Para enumerar todos los paquetes disponibles en un repositorio especificado, haga:

repoquery -a --repoid=REPONAME
ILMostro_7
fuente
Solo una nota al margen: para enumerar todos los paquetes de un repositorio especificado, hagarepoquery -qa --repoid=REPONAME
ILMostro_7
2
Esta también es una gran respuesta. La salida es más larga que la respuesta aceptada, pero está formateada de una manera más agradable.
Routhinator
Se puede simplificar repoquery -a --repoid=REPONAMEporque, según la -qopción de la página de manual,
Rockallite
@Rockallite tiene razón; para dnf, el -qarealmente falla. No puedo votar a favor el comentario debido a que
eliminé el voto a favor
11
dnf repo-pkgs <repoid> list installed

Notas

El comando anterior usa DNF para enumerar los paquetes instalados desde <repoid>. Note repo-pkgses solo un alias de repository-packages.

De las manpáginas:

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

Otras lecturas:

man dnf
Peque
fuente
3

Grepping la salida de yum es la forma más obvia:

yum list installed | grep @epel

Sin embargo, no puede mostrar propiedades de paquetes adicionales y es difícil de analizar con un script. La herramienta repoquerydel paquete yum-utilses la herramienta, pero no está instalada de manera predeterminada.

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

y un ejemplo más complejo:

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

Servidor RHEL 7.5 (Maipo)

yum repo-pkgs <repoid> list installedse puede usar para recuperar la misma información yumdb search from_repo <repoid>, pero en un 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

Resultados de muestra epel:

# 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
fuente
1

Puede verificar el Vendorencabezado de los rpms instalados.

Este ejemplo enumera todos los paquetes del repositorio de VideoLAN :

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

Obviamente, debe determinar si el Vendorencabezado de su repositorio es único entre los diferentes repositorios.

andcoz
fuente
3
No hay un mapeo uno a uno entre el proveedor y los repositorios, y en algunos casos, la cadena del proveedor está en blanco.
Lorin Hochstein el
1

Para las personas que solo quieren encontrar repositorios faltantes:

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

Esto debería devolver todos los repositorios donde tiene instalados los paquetes.

derberlinersmurf
fuente