¿Cómo saber desde qué repositorio de yum se ha instalado un paquete?


152

Después de haber instalado un paquete de yum (con múltiples repositorios configurados), ¿cómo puedo encontrar desde qué repositorio se ha instalado?

Si ejecuto yum info package-name(o yum list package-name), solo puedo ver que el paquete está "instalado".


1
Gran pregunta! Instalé yum-utils y probé uno llamado utilidades llamado repoquery, pero no tuve suerte.
Sean Staats


@warren su enlace no es útil porque su enlace es una pregunta sobre "qué repositorio es un rpm almacenado en" pero esta pregunta pregunta "de qué repositorio es un rpm INSTALADO". diferentes preguntas
Trevor Boyd Smith

si estás acostumbrado a hacerlo, rpm -qa|grep NAMEentonces puedes hacer yum list installed|grep NAMEpara encontrar de qué repo proviene el rpm .
Trevor Boyd Smith

@TrevorBoydSmith - Hace 7 años, estaba cerca. Hoy sigue siendo similar. Nunca dije que era lo mismo . Solo que estaba relacionado.
Warren

Respuestas:


82

Con yum-utils instalado, el repositorio proporcionará la información que busca (aquí 'epel' es el repositorio).

└─[$]> 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.

2
el repositorio no parece funcionar bien, obtengo diferentes versiones de paquetes yum info package_name, no parece consultar los repositorios en el mismo orden que yum.
Mike Miller el

Lo mismo aquí en algunos servidores. yum info package_nameAl parecer, devuelve más resultados que el repositorio. Esta es la razón por la cual el intercambio de la pila no debe bloquear los votos.
reflexiv

8
Encontré la respuesta de Xiong Chiamiov incorrecta. repoquery -i $pkgda un repositorio del que $pkgestá disponible un a, no el repositorio desde el que $pkgse instaló. Hice ese comando rpm -qi $pkgy obtuve diferentes números de versión. rpmresultó en un número de versión anterior al de repoquery.

Es posible que su copia local esté desactualizada o que se haya instalado con comandos adicionales para yum (por ejemplo --use-mirror). No creo que sea posible obtener siempre la respuesta correcta.
Xiong Chiamiov

user158844 tiene razón. Esto le dirá qué repositorios proporcionan un paquete dado, pero no de qué repositorio proviene un paquete específico. Si instaló un paquete de un cierto repositorio, eliminó ese repositorio, luego instaló otro repositorio que proporciona un paquete con el mismo nombre, ejecutando 'repoquery -i' de esta manera, devolvería a sus paquetes una lista del repositorio recién instalado, no el que en realidad instaló el paquete desde. El autor de la pregunta quiere saber de qué paquete proviene realmente el software instalado. No es qué repositorios actuales tienen paquetes con el mismo nombre.
Todd Walton

43

¿Qué versión de ñam?

En la versión actual, si el paquete instalado es la misma versión que la más reciente disponible, se muestra el repositorio desde el que se instaló.

$ 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

Si hay un paquete más nuevo disponible, se mostrará por separado, y la nueva versión mostrará el repositorio desde el que está disponible.


Estoy usando yum 3.2.19 en CentOs 5.3 y la fila "From repo" no existe.
lg.

Sí ... lo estaba probando en 3.2.21, que no tiene esa información en ninguna parte. Cuando lo hice en mi caja que tiene 3.2.23, funcionó.
Alex

Ahora esta es la mejor solución, pero no aplicable para RHEL / Centos 5.3. Acepto esta solución, pero estoy listo para elegir otra respuesta si será aplicable también para RHEL / Centos 5.3.
lg.

2
Esta es una opción prohibida en CentOS 5.5 tampoco.
Mike Miller el

"De representante" no está disponible incluso en centos 5.8
sepehr

22

Llegando tarde, pero (al menos en Fedora 15) se puede usar yumdb para consultas similares:

yumdb info 'python*'

Y lo que realmente necesitaba para enumerar los paquetes de los repositorios dados:

yumdb search from_repo 'my-*-repo'

Funciona también en Fedora 14
lg.

1
funciona en RHEL 6.2
pixelbeat

8

Si todo lo demás falla, puede inspeccionar el yumdb manualmente. Se encuentra en /var/lib/yum/yumdby contiene información detallada sobre cada paquete instalado. Te interesará particularmente from_repo. Por ejemplo, para el bind-utilspaquete:

# 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 obtener solo la información que desea:

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

Las versiones posteriores proporcionarán aún más datos; por ejemplo, en EL 7, el espejo exacto y la URL desde la que se descargó el paquete se almacenan aquí.


+1. Pero es aún mejor hacer algo como:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneque en el ejemplo anterior devuelve: ¡ updatesmucho más legible!
Greg Dubicki

1
@GregDubicki El objetivo del comando era mostrar más del contexto de lo que está sucediendo y cómo se almacenan las cosas. Aparentemente no pudo hacerlo: no hay necesidad de grepnada aquí, e incluso puede abandonar el ciclo. Un muy simple cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoes todo lo que necesitas.
Michael Hampton

6
rpm -qi packagename

Le informará al vendedor y al empaquetador.


5

Para ver qué se instaló desde repo epel: (Debería funcionar bajo Centos 5.5), tenga en cuenta que si no tiene un repositorio llamado epel, escupirá todo lo que esté instalado.

repoquery --repoid = epel -a | lista de xargs yum instalada


1
Esto parece funcionar siempre que no haya un paquete actualizado en el repositorio. Por lo tanto, debe ejecutar yum update justo antes de usarlo.
codewaggle

4

Si el paquete se instaló recientemente, puede buscar en / var / cache / yum.

Dentro de ese directorio, hay un directorio para cada repositorio, y en ese directorio de paquetes. Entonces, harías algo como:

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

Sin embargo, la memoria caché debe estar habilitada en su archivo /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Tenga en cuenta que a yum clean [packages|all]borrará el directorio de caché.

Si el directorio de caché está vacío, hay una forma alternativa. La información que se lee yum info [package]proviene de /var/cache/yum/[repofont>/primary.xml.gz

Puede consultar el archivo ingresando:

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

Sin embargo, en máquinas donde yum info [package]no se muestra "From repo:", como lo indica 'theotherreceive', es porque no está en el archivo primary.xml, por lo que no habrá forma de recuperar esa información. Por lo tanto, si el paquete está en dos o más archivos primary.xml, tendrá que determinar la prioridad de repositorio en su sistema.


Esta solución puede ser una opción (la voto), pero estoy buscando una respuesta definitiva.
lg.

4

Basado y respondido por Swoogan
en RedHat y CentOS, uno puede hacer

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

Los resultados deberían ser parecidos a

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

Donde repository_name es el repositorio donde se puede encontrar su paquete, y probablemente se instaló desde el primero de una lista (ver yum repolist)


1

¿Se captura esa información en alguna parte? El paquete no tiene esa información, y a yum no le importa después de encontrar el paquete. Probablemente podría juntarlo averiguando qué repositorios tiene el paquete y luego determinar cuál tiene prioridad.


Esta solución puede ser una opción (la voto), pero solo para el paquete instalado recientemente, porque puedo cambiar el repositorio y su prioridad.
lg.

1

No es una gran solución, pero descubrí que la lista yum disponible le mostrará dónde está disponible la versión más actualizada de cada paquete, por ejemplo:

lista de yum disponible | grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 actualizaciones
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 rpmfusion-free
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

Entonces, podría hacer una lista de yum disponible en su paquete, luego comparar su versión instalada usando la lista de yum instalada y tener una buena idea de qué repositorio proviene si las versiones coinciden.


Esto es cierto solo si el paquete aún no está instalado.
lg.

Si bien no responde exactamente la pregunta de los OP, fue muy útil para mí porque funciona en Centoss 5.5 con solo yum y sin otras utilidades, y puede: 1. Desinstalar el paquete y luego consultar para ver dónde se reinstala el repositorio. , o 2. Consulte en una máquina diferente sin el paquete instalado.
lreeder

1

Puede agregar la bandera detallada a "yum info":

yum info -v <package_name>

El repositorio de instalación estará debajo de la salida "Desde el repositorio".


Esta parece ser la única solución que no requiere instalar yum-utils.
Mark Edington

Esto solo enumera "instalado" para mí.
frogstarr78

1

Así que sé que esta es una pregunta un tanto antigua, pero aparece en la búsqueda de Google de lo que estaba buscando.

También hay un método para obtener una lista única de repositorios utilizados:

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

Esto mostrará una lista de los repositorios desde los que se han instalado paquetes.


1

El enfoque más simple y directo sin instalar herramientas adicionales, codificar o generar información extraña es simplemente:

yum list installed [package name]

La tercera columna proporcionará la ID del repositorio desde el que se instaló el paquete.

Esto se mencionó en un comentario sobre la pregunta original usando grep, pero eso no es necesario. Simplemente puede pasar el nombre del paquete directamente yumal filtro.



-1

La forma más fácil es esta:

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

Más consejos y trucos están disponibles aquí: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
De esta manera (agregando una tubería con el nombre del paquete grep -i) descubro el proveedor, pero no el repositorio.
lg.

1
El vendedor no tiene (casi) nada que ver con el repositorio.
Matteo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.