Elencare tutti i pacchetti RPM installati dal repository "X"


44

Come posso ottenere un elenco di tutti i pacchetti RPM che sono stati installati sul mio sistema da un determinato repository (ad es. "Epel")?

Risposte:


45

CentOS / RHEL / Fedora 22 o precedenti

yum list installed | grep @epel

Fedora 23 o successive

dnf list installed | grep @epel

8
Questo non funzionerà. Yum emetterà delle linee sul tubo che verranno spezzate se diventano troppo lunghe. Quindi l'input di grep è principalmente una riga per pacchetto, ma potrebbe essere due righe. Yum potrebbe passare "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel". (Immagina i trattini bassi come spazi.) "@Epel" è sulla riga successiva dell'input che grep vede. Quindi grep produrrà quella riga con nient'altro che "@epel" ma non la riga precedente con il nome del pacchetto.
Todd Walton

Potrebbe essere necessario eseguire quei comandi come root fino a quando bugzilla.redhat.com/show_bug.cgi?id=1525645 è stato corretto.
proski,

il comando yum non sembra funzionare se uno dei repository ha dei problemi. avevo bisogno di questo elenco per vedere se volevo disabilitare il repository con problemi.
Jayen,

@Todd Watson Lo so, è un trucco, ma che dire di "export COLONNE = 999 yum ..."
Massimo

Funziona, @Massimo? Sarebbe una bella soluzione. Ho trovato anche questa domanda Unix StackExchange: unix.stackexchange.com/questions/308731/…
Todd Walton

17

A partire da RHEL6, come suggerito in questa risposta StackOverflow , esiste un metodo più completo per farlo con yumdb:

yumdb search from_repo REPOID*

Il repoid prende i jolly.

Pretty-stampa

Se stiamo per ingannare e convogliare l'output, allora possiamo ottenere anche un effetto di stampa carina. Eccone uno che usaawk

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

Utilizzando egrepogrep -e

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

list_ALL_AVAILABLE_from_repo

Per elencare tutti i pacchetti disponibili in un repository specificato, eseguire:

repoquery -a --repoid=REPONAME

Solo una nota a repoquery -qa --repoid=REPONAME
margine

2
Questa è anche un'ottima risposta. L'output è più lungo della risposta accettata, ma è formattato in un modo migliore.
Routhinator,

Può essere semplificato repoquery -a --repoid=REPONAMEperché secondo l' -qopzione della pagina man è per la compatibilità rpmquery, non fa nulla.
Rockallite,

@Rockallite ha ragione; per dnf, -qaeffettivamente fallisce. Non posso votare il commento a causa della rimozione precedente del voto :( Sto aggiornando la risposta per riflettere questo.
ILMostro_7

11
dnf repo-pkgs <repoid> list installed

Gli appunti

Il comando sopra usa DNF per elencare i pacchetti installati da <repoid>. Nota repo-pkgsè solo un alias di repository-packages.

Dalle manpagine:

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

Ulteriori letture:

man dnf

3

L'output di Grepping yum è il modo più ovvio:

yum list installed | grep @epel

Tuttavia, non è possibile visualizzare ulteriori proprietà dei pacchetti ed è difficile analizzare uno script. Lo strumento repoquerydal pacchetto yum-utilsè lo strumento, ma non è installato per impostazione predefinita.

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

e un esempio più complesso:

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

2

RHEL Server 7.5 (Maipo)

yum repo-pkgs <repoid> list installedpuò essere utilizzato per recuperare le stesse informazioni di yumdb search from_repo <repoid>, ma in un formato diverso.

# 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

epelOutput di esempio :

# 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

1

È possibile controllare l' Vendorintestazione di rpms installati.

Questo esempio elenca tutti i pacchetti dal repository VideoLAN :

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

Ovviamente, devi determinare se l' Vendorintestazione del tuo repository è unica tra i diversi repository.


3
Non esiste un mapping uno a uno tra fornitore e repository e, in alcuni casi, la stringa del fornitore è vuota.
Lorin Hochstein,

1

Per le persone che vogliono semplicemente trovare repository mancanti:

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

Questo dovrebbe restituire tutti i repository da cui hai installato i pacchetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.