Alle RPM-Pakete auflisten, die von Repo "X" installiert wurden

44

Wie kann ich eine Liste aller RPM-Pakete abrufen, die von einem bestimmten Repository auf meinem System installiert wurden (z. B. "epel")?

Lorin Hochstein
quelle

Antworten:

45

CentOS / RHEL / Fedora 22 oder früher

yum list installed | grep @epel

Fedora 23 oder höher

dnf list installed | grep @epel
David Schwartz
quelle
8
Das wird nicht funktionieren. Yum gibt Leitungen an die Pipe aus, die unterbrochen werden, wenn sie zu lang werden. Die Eingabe von grep ist also meistens eine Zeile pro Paket, aber es können auch zwei Zeilen sein. Yum könnte "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel" bestehen. (Stellen Sie sich die Unterstriche als Leerzeichen vor.) Das "@epel" steht in der nächsten Zeile der Eingabe, die grep sieht. Also wird grep diese Zeile nur mit "@epel" ausgeben, aber nicht mit der vorhergehenden Zeile mit dem Paketnamen.
Todd Walton
Möglicherweise müssen Sie diese Befehle als root ausführen, bis bugzilla.redhat.com/show_bug.cgi?id=1525645 behoben ist.
Proski
Der YUM-Befehl scheint nicht zu funktionieren, wenn einer der Repos Probleme hat. Ich brauchte diese Liste, um zu sehen, ob ich das Repo mit Problemen deaktivieren wollte.
Jayen
@ Todd Watson Ich weiß, es ist ein Hack, aber was ist mit "Export COLUMNS = 999 yum ..."
Massimo
Funktioniert das, @Massimo? Das wäre ein guter Workaround. Ich fand auch diese Unix StackExchange-Frage: unix.stackexchange.com/questions/308731/…
Todd Walton
17

Ab RHEL6 gibt es, wie in dieser Stackoverflow-Antwort vorgeschlagen , eine gründlichere Methode, um dies zu tun yumdb:

yumdb search from_repo REPOID*

Das Repoid akzeptiert Platzhalter.

Pretty-Print

Wenn wir die Ausgabe betrügen und pfeifen, können wir auch einen Pretty-Print-Effekt erzielen. Hier ist eine Verwendungawk

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

Mit egrepodergrep -e

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

list_ALL_AVAILABLE_from_repo

Zur Liste aller verfügbaren Pakete in einem bestimmten Repository zu tun:

repoquery -a --repoid=REPONAME
ILMostro_7
quelle
Nur eine Randnotiz: Um alle Pakete eines bestimmten repoquery -qa --repoid=REPONAME
Repos aufzulisten
2
Dies ist auch eine gute Antwort. Die Ausgabe ist länger als die akzeptierte Antwort, aber besser formatiert.
Routhinator
Kann vereinfacht werden, repoquery -a --repoid=REPONAMEweil laut Manpage- -qOption für rpmquery-Kompatibilität nichts zu tun ist.
Rockallite
@ Rockallite ist richtig; für dnf -qaschlägt das eigentlich fehl. Ich kann den Kommentar nicht positiv bewerten, da ich ihn zuvor entfernt habe :( Ich aktualisiere die Antwort, um dies zu
berücksichtigen
11
dnf repo-pkgs <repoid> list installed

Anmerkungen

Der obige Befehl verwendet DNF, um die von der installierten Pakete aufzulisten <repoid>. Hinweis repo-pkgsist nur ein Alias ​​von repository-packages.

Von den manSeiten:

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

Weitere Lektüre:

man dnf
Peque
quelle
3

Die Ausgabe von "Grepping Yum" ist der offensichtlichste Weg:

yum list installed | grep @epel

Sie können jedoch keine zusätzlichen Paketeigenschaften anzeigen und es ist schwierig, sie mit einem Skript zu analysieren. Das Tool repoqueryaus dem Paket yum-utilsist das Tool, es wird jedoch nicht standardmäßig installiert.

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

und ein komplexeres Beispiel:

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

RHEL Server 7.5 (Maipo)

yum repo-pkgs <repoid> list installedkann verwendet werden, um die gleichen Informationen wie yumdb search from_repo <repoid>, jedoch in einem anderen Format abzurufen .

# 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

Beispielausgaben 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
quelle
1

Sie können den VendorHeader der installierten RPMs überprüfen.

In diesem Beispiel werden alle Pakete aus dem VideoLAN- Repository aufgelistet :

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

Natürlich müssen Sie feststellen, ob der VendorHeader Ihres Repositorys für verschiedene Repositorys eindeutig ist.

andcoz
quelle
3
Zwischen Vendor und Repos gibt es keine Eins-zu-Eins-Zuordnung, und in einigen Fällen ist die Vendor-Zeichenfolge leer.
Lorin Hochstein
1

Für Leute, die nur fehlende Repositories finden wollen:

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

Dies sollte alle Repositorys zurückgeben, von denen aus Sie Pakete installiert haben.

derberlinersmurf
quelle