Woher wissen Sie, aus welchem ​​YUM-Repository ein Paket installiert wurde?


152

Wie kann ich nach der Installation eines Pakets von yum (mit mehreren konfigurierten Repositorys) feststellen, aus welchem ​​Repository es installiert wurde?

Wenn ich laufe yum info package-name(oder yum list package-name), kann ich nur sehen, dass das Paket "installiert" ist.


1
Gute Frage! Ich habe yum-utils installiert und eines ausprobiert, das repoquery heißt, aber kein Glück.
Sean Staats


@warren Ihr Link ist nicht nützlich, da Ihr Link eine Frage zu "In welchem ​​Repo ist eine Drehzahl gespeichert" ist. In dieser Frage wird jedoch gefragt, von welchem ​​Repo eine installierte Drehzahl stammt. verschiedene Fragen.
Trevor Boyd Smith


@ TrevorBoydSmith - vor 7 Jahren war es knapp. Heute ist es immer noch ähnlich. Ich habe nie gesagt, dass es dasselbe ist . Nur dass es verwandt war.
Warren

Antworten:


82

Wenn yum-utils installiert ist, liefert repoquery die gesuchten Informationen (hier ist 'epel' das Repository).

└─[$]> 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
repoquery scheint nicht richtig zu funktionieren, ich bekomme dann verschiedene Paketversionen yum info package_name, es scheint nicht die Repositories in der gleichen Reihenfolge wie yum abzufragen.
Mike Miller

Gleiches hier auf ein paar Servern. yum info package_nameliefert anscheinend mehr ergebnisse als repoquery. Aus diesem Grund sollte der Stapelaustausch nicht an Stimmen gebunden sein.
Reflexiv

8
Ich fand die Antwort von Xiong Chiamiov nicht richtig. repoquery -i $pkgGibt das Repo an, von dem ein $pkgverfügbar ist, nicht das Repo, von dem das $pkginstalliert wurde. Ich habe diesen Befehl ausgeführt und rpm -qi $pkgunterschiedliche Versionsnummern erhalten. rpmergab eine frühere Versionsnummer als die von repoquery.

Möglicherweise ist Ihre lokale Kopie veraltet oder wurde mit zusätzlichen Befehlen (z --use-mirror. B. yum ) installiert . Ich denke nicht, dass es möglich ist, immer die richtige Antwort zu bekommen.
Xiong Chiamiov

user158844 ist richtig. Hier erfahren Sie, von welchen Repos ein bestimmtes Paket stammt, nicht jedoch von welchem ​​Repo ein bestimmtes Paket. Wenn Sie ein Paket von einem bestimmten Repo installiert haben, dieses Repo entfernt und dann ein anderes Repo installiert haben, das ein Paket mit demselben Namen bereitstellt, und 'repoquery -i' so ausführt, werden die Pakete mit dem neu installierten Repo zurückgegeben, nicht das Repo, das installiert wurde Sie haben das Paket von tatsächlich installiert. Der Fragesteller möchte wissen, von welchem ​​Paket die installierte Software tatsächlich stammt. Nicht welche aktuellen Repos haben Pakete mit dem gleichen Namen.
Todd Walton

43

Welche Version von yum?

In der aktuellen Version wird, wenn das installierte Paket mit der aktuellsten verfügbaren Version übereinstimmt, das Repository angezeigt, von dem aus es installiert wurde.

$ 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

Wenn ein neueres Paket verfügbar ist, wird es separat angezeigt, wobei die neue Version das Repo anzeigt, von dem es verfügbar ist.


Ich verwende yum 3.2.19 auf CentOs 5.3 und die Zeile "From Repo" existiert nicht.
lg.

Ja ... ich habe es am 3.2.21 getestet, der diese Informationen nirgendwo hat. Als ich es auf meiner Box gemacht habe, die 3.2.23 hat, hat es funktioniert.
Alex

Dies ist die beste Lösung, gilt jedoch nicht für RHEL / Centos 5.3. Ich akzeptiere diese Lösung, bin aber bereit, eine andere Antwort zu wählen, wenn dies auch für RHEL / Centos 5.3 gilt.
lg.

2
Dies ist auch in CentOS 5.5 ein No-Go.
Mike Miller

"From rep" ist nicht verfügbar, auch nicht in Centos 5.8
Sepehr

22

Kommt viel zu spät, aber (zumindest auf Fedora 15) kann man yumdb für ähnliche Abfragen verwenden:

yumdb info 'python*'

Und was ich eigentlich brauchte, um Pakete von bestimmten Repos aufzulisten:

yumdb search from_repo 'my-*-repo'

Es funktioniert auch auf Fedora 14
lg.


8

Wenn alles andere fehlschlägt, können Sie die YUMDB manuell überprüfen. Es befindet sich in /var/lib/yum/yumdbund enthält detaillierte Informationen zu jedem installierten Paket. Sie werden besonders interessiert sein an from_repo. Zum Beispiel für das bind-utilsPaket:

# 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

So erhalten Sie genau die gewünschten Informationen:

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

In späteren Versionen werden noch mehr Daten bereitgestellt. In EL 7 wird beispielsweise der genaue Spiegel und die URL, von der das Paket heruntergeladen wurde, hier gespeichert.


+1. Aber es ist noch besser, etwas wie: zu tun for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; done, was im obigen Beispiel ergibt: updates- viel besser lesbar!
Greg Dubicki

1
@GregDubicki Ziel des Befehls war es, mehr über den Kontext dessen zu erfahren, was gerade passiert und wie Dinge gespeichert werden. Anscheinend ist dies nicht gelungen: Hier ist nichts erforderlich grep, und Sie können sogar die Schleife fallen lassen. Ein sehr einfaches cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoist alles was Sie brauchen.
Michael Hampton

6
rpm -qi packagename

Informiert Sie über den Anbieter und den Verpacker


5

Um zu sehen, was von repo epel installiert wurde: (Sollte unter Centos 5.5 funktionieren) Beachten Sie, dass, wenn Sie kein repo namens epel haben, alles, was installiert wurde, ausgespuckt wird.

repoquery --repoid = epel -a | xargs yum list installiert


1
Dies scheint zu funktionieren, solange sich kein aktualisiertes Paket im Repository befindet. Sie müssen also yum update ausführen, bevor Sie es verwenden können.
Codewaggle

4

Wenn das Paket kürzlich installiert wurde, können Sie in / var / cache / yum nachsehen.

In diesem Verzeichnis gibt es für jedes Repo ein Verzeichnis und in diesem ein Paketverzeichnis. Also würden Sie etwas tun wie:

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

Der Cache muss jedoch in der Datei /etc/yum.conf aktiviert sein:

cachedir=/var/cache/yum
keepcache=1

Beachten Sie, dass a yum clean [packages|all]das Cache-Verzeichnis löscht.

Wenn das Cache-Verzeichnis leer ist, gibt es eine alternative Möglichkeit. Die Informationen, die von gelesen werden, yum info [package]stammen aus /var/cache/yum/[repo[/primary.xml.gz

Sie können die Datei durchsehen, indem Sie Folgendes eingeben:

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

Auf Computern, auf denen yum info [package]"From repo:" nicht angezeigt wird, wie durch "theotherreceive" angegeben, ist dies darauf zurückzuführen, dass es sich nicht in der Datei primary.xml befindet und es daher keine Möglichkeit gibt, diese Informationen abzurufen. Wenn sich das Paket in zwei oder mehr primary.xml-Dateien befindet, müssen Sie daher die Repo-Priorität auf Ihrem System bestimmen.


Diese Lösung ist vielleicht eine Option (ich stimme ab), aber ich suche eine endgültige Antwort.
lg.

4

Basierend auf und beantwortet von Swoogan
On RedHat und CentOS kann man das

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

Die Ergebnisse sollten ungefähr so ​​aussehen

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

Wobei repository_name das Repository ist, in dem sich Ihr Paket befindet und das wahrscheinlich von dem ersten in einer Liste installiert wurde (siehe yum repolist)


1

Werden diese Informationen irgendwo erfasst? Das Paket hat diese Informationen nicht und es interessiert dich nicht, nachdem es das Paket gefunden hat. Sie könnten es wahrscheinlich zusammensetzen, indem Sie herausfinden, welche Repos das Paket haben und dann bestimmen, welche Priorität hat.


Diese Lösung ist möglicherweise eine Option (ich stimme ab), aber nur für kürzlich installierte Pakete, da ich das Repository und deren Priorität ändern kann.
lg.

1

Keine großartige Lösung, aber ich habe festgestellt, dass die verfügbare Yum-Liste Ihnen zeigt, wo die aktuellste Version jedes Pakets verfügbar ist, z. B .:

Yum Liste verfügbar | grep gstreamer

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

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

Sie können also eine YUM-Liste erstellen, die in Ihrem Paket enthalten ist, und dann Ihre installierte Version mit der installierten YUM-Liste vergleichen und eine gute Vorstellung davon haben, von welchem ​​Repository sie stammt, wenn die Versionen übereinstimmen.


Dies gilt nur, wenn das Paket noch nicht installiert ist.
lg.

Obwohl es die OPs-Frage nicht genau beantwortet, war es für mich sehr hilfreich, da es in Centoss 5.5 mit nur yum und keinen anderen Utils funktioniert. Sie können: 1. Das Paket deinstallieren und danach abfragen, wo sich das Repo befindet und neu installieren oder 2. Fragen Sie auf einem anderen Computer ab, ohne dass das Paket installiert ist.
lreeder

1

Sie können das verbose Flag zu "yum info" hinzufügen:

yum info -v <package_name>

Das Installations-Repository befindet sich unter der Ausgabe "From repo".


Dies scheint die einzige Lösung zu sein, die keine Installation von yum-utils erfordert.
Mark Edington

Dies listet nur "installiert" für mich.
Frogstarr78

1

Ich weiß also, dass dies eine etwas alte Frage ist - aber sie taucht bei der Google-Suche nach dem auf, wonach ich gesucht habe.

Es gibt auch eine Methode, um eine eindeutige Liste der verwendeten Repos zu erhalten:

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

Dies listet die Repositorys auf, von denen Pakete installiert wurden.


1

Der einfachste und direkteste Ansatz, ohne zusätzliche Tools zu installieren und ohne zusätzliche Informationen auszugeben, ist einfach:

yum list installed [package name]

Die dritte Spalte enthält die ID des Repositorys, aus dem das Paket installiert wurde.

Dies wurde in einem Kommentar zur ursprünglichen Frage mit grep erwähnt, aber das ist nicht notwendig. Sie können den Paketnamen einfach direkt an yumden Filter übergeben.



-1

Der einfachste Weg ist dieser:

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

Weitere Tipps und Tricks finden Sie hier: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
Auf diese Weise (Hinzufügen einer Pipe mit dem Paketnamen grep -i) entdecke ich den Hersteller, aber nicht das Repository.
lg.

1
Der Anbieter hat (fast) nichts mit dem Repository zu tun.
Matteo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.