Comment savoir à partir de quel référentiel yum un paquet a été installé?


152

Après avoir installé un paquet par yum (avec plusieurs référentiels configurés), comment puis-je trouver à partir de quel référentiel il a été installé?

Si je lance yum info package-name(ou yum list package-name), je peux seulement voir que le paquet est "installé".


1
Bonne question! J'ai installé yum-utils et en ai essayé un, appelé repoquery, mais sans succès.
Sean Staats


@warren votre lien n'est pas utile car votre lien est une question sur "quel repo est un rpm stocké dans" mais cette question demande "quel repo est un rpm INSTALLED from". différentes questions.
Trevor Boyd Smith

si vous êtes habitué à faire rpm -qa|grep NAME, vous pouvez faire yum list installed|grep NAMEpour trouver ce que le régime repo est de .
Trevor Boyd Smith

@TrevorBoydSmith - Il y a 7 ans, c'était proche. Aujourd'hui, c'est toujours pareil. Je n'ai jamais dit que c'était pareil . Juste que c'était lié.
Warren

Réponses:


82

Avec yum-utils installé, Repoquery fournira les informations que vous recherchez (ici, "epel" étant le référentiel).

└─[$]> 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
la repoquerie ne semble pas fonctionner correctement, j’obtiens des versions de paquetages différentes yum info package_name, elle ne semble pas interroger les référentiels dans le même ordre que yum.
Mike Miller

Même chose ici sur quelques serveurs. yum info package_namerenvoie plus de résultats que la repoquerie apparemment. C'est pourquoi l'échange de pile ne doit pas bloquer les votes.
Reflexiv

8
J'ai trouvé la réponse de Xiong Chiamiov incorrecte. repoquery -i $pkgdonne repo à partir duquel a $pkgest disponible, pas le repo à partir duquel a $pkgété installé. J'ai fait cette commande rpm -qi $pkget j'ai obtenu des numéros de version différents. rpma abouti à un numéro de version antérieur à celui de repoquery.

Il est possible que votre copie locale soit obsolète ou qu'elle ait été installée avec des commandes supplémentaires à yum (par exemple --use-mirror). Je ne pense pas qu'il soit possible d' avoir toujours la bonne réponse.
Xiong Chiamiov

user158844 a raison. Cela vous indiquera quel référentiel fournit un package donné, mais pas de quel repo provient un package spécifique. Si vous avez installé un package à partir d'un certain référentiel, supprimé ce référentiel, puis installé un autre référentiel fournissant un package portant le même nom, exécuter «repoquery -i» comme ceci renverrait à vos packages la liste du référentiel récemment installé, et non celui qui vous avez réellement installé le paquet à partir de. Le demandeur veut savoir de quel paquet provient le logiciel installé. Pas ce que les dépôts actuels ont des paquets avec le même nom.
Todd Walton le

43

Quelle version de miam?

Sur la version actuelle, si le package installé est identique à la version la plus récente, le référentiel à partir duquel il a été installé est affiché.

$ 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 un package plus récent est disponible, il sera affiché séparément, avec la nouvelle version indiquant le référentiel depuis lequel il est disponible.


J'utilise yum 3.2.19 sur CentOs 5.3 et la ligne "From repo" n'existe pas.
lg.

Oui ... je le testais sur 3.2.21, qui n'a cette information nulle part. Quand je l'ai fait sur ma boîte qui a 3.2.23, cela a fonctionné.
Alex

Il s’agit maintenant de la meilleure solution, mais non applicable pour RHEL / Centos 5.3. J'accepte cette solution, mais je suis prêt à choisir une autre réponse si elle s'appliquera également à RHEL / Centos 5.3.
lg.

2
C'est un non-aller dans CentOS 5.5 non plus.
Mike Miller

"Du représentant" n'est pas disponible même en centos 5.8
sepehr

22

Venant trop tard, mais (du moins sur Fedora 15), on peut utiliser yumdb pour des requêtes similaires:

yumdb info 'python*'

Et ce dont j'avais réellement besoin pour lister les paquets de repo (s) donné (s):

yumdb search from_repo 'my-*-repo'

Cela fonctionne également sur Fedora 14
lg.

1
fonctionne sur RHEL 6.2
pixelbeat

8

Si tout échoue, vous pouvez inspecter la yumdb manuellement. Il se trouve dans /var/lib/yum/yumdbet contient des informations détaillées sur chaque paquet installé. Vous serez particulièrement intéressé par from_repo. Par exemple, pour le bind-utilspackage:

# 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

Pour obtenir uniquement les informations souhaitées:

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

Les versions ultérieures fourniront encore plus de données; Par exemple, dans EL 7, le miroir et l'adresse URL exacts à partir desquels le paquet a été téléchargé sont stockés ici.


+1 Mais il est même préférable de faire quelque chose comme:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; donequi, dans l'exemple ci-dessus, renvoie: updates- beaucoup plus lisible!
Greg Dubicki

1
@GregDubicki Le but de la commande était de montrer plus le contexte de ce qui se passe et comment les choses sont stockées. Il a apparemment échoué à le faire: rien n’est nécessaire grepici, et vous pouvez même laisser tomber la boucle. Un très simple cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoest tout ce dont vous avez besoin.
Michael Hampton

6
rpm -qi packagename

Vous dira le vendeur et emballeur


5

Pour voir ce qui est installé à partir de repo epel: (devrait fonctionner sous Centos 5.5), notez que si vous n'avez pas de repo nommé epel, tout ce qui est installé sera recraché.

repoquerie --repoid = epel -a | xargs yum list installé


1
Cela semble fonctionner tant qu'il n'y a pas de paquet mis à jour dans le référentiel. Vous devez donc exécuter yum update juste avant de l’utiliser.
codewaggle

4

Si le paquet a été installé récemment, vous pouvez regarder dans / var / cache / yum.

Dans ce répertoire, il y a un répertoire pour chaque dépôt et un répertoire de packages. Donc, vous feriez quelque chose comme:

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

Cependant, le cache doit être activé dans votre fichier /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Notez que a yum clean [packages|all]va effacer le répertoire de cache.

Si le répertoire de cache est vide, il existe un autre moyen. Les informations lues yum info [package]proviennent de /var/cache/yum/[repo]/primary.xml.gz.

Vous pouvez parcourir le fichier en entrant:

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

Cependant, sur les machines sur lesquelles yum info [package]n'affiche pas "From repo:", comme indiqué par "theotherreceive", c'est parce qu'il ne se trouve pas dans le fichier primary.xml, il n'y aura donc aucun moyen de récupérer ces informations. Par conséquent, si le package se trouve dans plusieurs fichiers primary.xml, vous devrez déterminer la priorité du référentiel sur votre système.


Cette solution est peut-être une option (je vote), mais je cherche une réponse définitive.
lg.

4

Basé sur et répondez par Swoogan
Sur RedHat et CentOS on peut faire

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

Les résultats devraient ressembler à quelque chose comme

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

repository_name est le référentiel dans lequel votre paquet peut être trouvé, et il a probablement été installé à partir du premier de la liste (voir yum repolist)


1

Cette information est-elle capturée quelque part? Le paquet n'a pas cette information et yum ne s'en soucie pas après l'avoir trouvé. Vous pouvez probablement regrouper les éléments en déterminant quels dépôts ont le package, puis déterminer celui qui est prioritaire.


Cette solution est peut-être une option (je vote), mais uniquement pour les packages installés récemment, car je peux modifier le référentiel et sa priorité.
lg.

1

Pas une bonne solution, mais j’ai trouvé que la liste de yum disponible vous indiquera où se trouve la version la plus récente de chaque paquet, par exemple:

yum list available | grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 met à jour
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 sans rpmfusion
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 sans rpmfusion

Vous pouvez donc créer une liste de yum disponible sur votre paquet, puis comparer votre version installée avec la liste de yum installée et avoir une bonne idée de son dépôt si les versions correspondent.


Ceci est vrai seulement si le paquet n'est pas encore installé.
lg.

Bien que cela ne réponde pas exactement à la question des OP, cela m'a été très utile car cela fonctionne dans Centoss 5.5 avec juste yum et aucun autre utilitaire, et vous pouvez: 1. Désinstaller le paquet puis interroger pour voir où le référentiel est ensuite réinstallé , ou 2. Requête sur une autre machine sans que le paquet ne soit installé.
lreeder

1

Vous pouvez ajouter le drapeau détaillé à "miam info":

yum info -v <package_name>

Le référentiel d'installation sera sous la sortie "From repo".


Cela semble être la seule solution qui ne nécessite pas l'installation de yum-utils.
Mark Edington

Cela ne fait que lister "installé" pour moi.
frogstarr78

1

Je sais donc que la question est un peu ancienne, mais elle apparaît dans les recherches sur Google pour trouver ce que je cherchais.

Il existe également une méthode pour obtenir une liste unique des pensions utilisées:

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

Cela listera les référentiels sur lesquels les packages ont été installés.


1

L’approche la plus simple et la plus simple sans installer d’outils supplémentaires, sans greping ou en sortie d’informations superflues est simplement:

yum list installed [package name]

La troisième colonne fournira l'ID du référentiel à partir duquel le paquet a été installé.

Cela a été mentionné dans un commentaire sur la question initiale en utilisant grep, mais ce n'est pas nécessaire. Vous pouvez simplement passer le nom du paquet directement yumà filtrer.



-1

Le moyen le plus simple est le suivant:

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

Plus de trucs et astuces sont disponibles ici: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
De cette manière (en ajoutant un canal avec le nom du paquetage grep -i), je découvre le fournisseur, mais pas le référentiel.
lg.

1
Le fournisseur n'a (presque) rien à voir avec le référentiel.
Matteo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.