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.