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é".

lg.
la source
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.
Xiong Chiamiov
la source
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.

theotherreceive
la source
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'
Martien
la source
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.

Michael Hampton
la source
+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

Esmail
la source
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é

David A.
la source
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.

Swoogan
la source
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)

iddqd
la source
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.

Alex
la source
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.

gareth_bowles
la source
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".

smw
la source
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.

Steven Haigh
la source
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.

Scott Buchanan
la source
-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

Bluesguy
la source
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