Come sapere da quale repository yum è stato installato un pacchetto?


152

Dopo aver installato un pacchetto di yum (con più repository configurati), come posso trovare da quale repository è stato installato?

Se corro yum info package-name(o yum list package-name), vedo solo che il pacchetto è "installato".


1
Ottima domanda! Ho installato yum-utils e ne ho provato uno chiamato utility repoquery, ma senza fortuna.
Sean Staats,


@warren il tuo link non è utile perché il tuo link è una domanda su "in quale repository è memorizzato un rpm" ma questa domanda chiede "da quale repository è un rpm INSTALLATO da". domande diverse.
Trevor Boyd Smith,


@TrevorBoydSmith - 7 anni fa, era vicino. Oggi è ancora simile. Non ho mai detto che fosse lo stesso . Solo che era correlato.
Warren,

Risposte:


82

Con yum-utils installato, repoquery fornirà le informazioni che cerchi (qui 'epel' è il 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
il repoquery non sembra funzionare correttamente, ho diverse versioni del pacchetto quindi yum info package_name, non sembra interrogare i repository nello stesso ordine di yum.
Mike Miller,

Lo stesso qui su alcuni server. yum info package_namerestituisce apparentemente più risultati di repoquery. Ecco perché lo scambio di stack non dovrebbe bloccare i voti.
reflexiv

8
Ho trovato la risposta di Xiong Chiamiov non corretta. repoquery -i $pkgfornisce il repository da cui $pkgè disponibile a, non il repository da cui è $pkgstato installato. Ho fatto quel comando rpm -qi $pkge ho ottenuto numeri di versione diversi. rpmha provocato un numero di versione precedente a quello di repoquery.

È possibile che la tua copia locale non sia aggiornata o sia stata installata con comandi aggiuntivi su yum (ad es --use-mirror.). Non credo sia possibile ottenere sempre la risposta giusta.
Xiong Chiamiov il

user158844 ha ragione. Questo ti dirà quali repository forniscono un determinato pacchetto, ma non da quale repository provenga un pacchetto specifico. Se un pacchetto è stato installato da un determinato repository, rimosso quel repository, quindi installato un altro repository che fornisce un pacchetto con lo stesso nome, l'esecuzione di "repository -i" in questo modo restituirebbe a voi pacchetti che elencano il repository appena installato, non quello che hai installato il pacchetto da. L'asker vuole sapere da quale pacchetto proviene effettivamente il software installato. Non è possibile che i repository correnti abbiano pacchetti con lo stesso nome.
Todd Walton,

43

Quale versione di yum?

Nella versione corrente se il pacchetto installato è la stessa versione più recente disponibile, viene mostrato il repository da cui è stato installato.

$ 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

Se è disponibile un pacchetto più recente, verrà mostrato separatamente, con la nuova versione che mostra il repository da cui è disponibile.


Sto usando yum 3.2.19 su CentOs 5.3 e la riga "From repo" non esiste.
lg.

Sì ... lo stavo testando il 3.2.21, che non ha queste informazioni da nessuna parte. Quando l'ho fatto sulla mia scatola che ha 3.2.23, ha funzionato.
Alex,

Ora questa è la soluzione migliore, ma non applicabile per RHEL / Centos 5.3. Accetto questa soluzione, ma sono pronto a scegliere un'altra risposta se sarà applicabile anche per RHEL / Centos 5.3.
lg.

2
Anche in CentOS 5.5 questo è un gioco da ragazzi.
Mike Miller,

"Da rappresentante" non è disponibile nemmeno in centos 5,8
sepehr

22

Arrivando in ritardo ma (almeno su Fedora 15) si può usare yumdb per domande simili:

yumdb info 'python*'

E ciò di cui avevo effettivamente bisogno per elencare i pacchetti da determinati repository:

yumdb search from_repo 'my-*-repo'

Funziona anche su Fedora 14
lg.

1
funziona su RHEL 6.2
pixelbeat

8

Se tutto il resto fallisce, è possibile controllare manualmente il yumdb. Si trova in /var/lib/yum/yumdbe contiene informazioni dettagliate su ogni pacchetto installato. Ti interesserà particolarmente from_repo. Ad esempio, per il bind-utilspacchetto:

# 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

Per ottenere solo le informazioni desiderate:

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

Le versioni successive forniranno ancora più dati; ad esempio in EL 7 il mirror e l'URL esatti da cui è stato scaricato il pacchetto sono memorizzati qui.


+1. Ma è ancora meglio fare qualcosa del tipo:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneche nell'esempio sopra restituisce: updates- molto più leggibile!
Greg Dubicki,

1
@GregDubicki Il punto del comando era mostrare più del contesto di ciò che sta succedendo e di come vengono archiviate le cose. Apparentemente non è riuscito a farlo: non c'è bisogno di grepnulla qui, e puoi anche far cadere il ciclo. Un semplice cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoè tutto ciò che serve.
Michael Hampton

6
rpm -qi packagename

Ti dirà il venditore e il packager


5

Per vedere cosa è installato da repo epel: (Dovrebbe funzionare sotto Centos 5.5) nota, se non hai un repository chiamato epel, sputerà ogni cosa installata.

repoquery --repoid = epel -a | Elenco xargs yum installato


1
Questo sembra funzionare fino a quando non c'è un pacchetto aggiornato nel repository. Quindi è necessario eseguire l'aggiornamento yum appena prima di usarlo.
codewaggle

4

Se il pacchetto è stato installato di recente, è possibile cercare in / var / cache / yum.

All'interno di quella directory, c'è una directory per ogni repository, e in quella una directory di pacchetti. Quindi, faresti qualcosa del tipo:

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

Tuttavia, la cache deve essere abilitata nel file /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Si noti che a yum clean [packages|all]cancellerà la directory della cache.

Se la directory della cache è vuota, esiste un modo alternativo. Le informazioni che vengono lette yum info [package]provengono da /var/cache/yum/[repo[/primary.xml.gz

Puoi consultare il file inserendo:

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

Tuttavia, sui computer in cui yum info [package]non viene visualizzato "From repo:", come indicato da "theotherreceive", è perché non si trova nel file primary.xml, quindi non sarà possibile recuperare tali informazioni. Pertanto, se il pacchetto si trova in due o più file primary.xml, sarà necessario determinare la priorità di repository sul proprio sistema.


Questa soluzione forse è un'opzione (la voto), ma sto cercando una risposta definitiva.
lg.

4

Basato su e risposta di Swoogan
Su RedHat e CentOS si può fare

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

I risultati dovrebbero assomigliare a qualcosa

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

Dove repository_name è il repository in cui è possibile trovare il pacchetto ed è stato probabilmente installato dal primo in un elenco (vedere yum repolist)


1

Quelle informazioni vengono catturate da qualche parte? Il pacchetto non contiene tali informazioni e a yum non importa dopo aver trovato il pacchetto. Probabilmente potresti metterlo insieme capendo quali repository hanno il pacchetto e quindi determinare quale ha la priorità.


Questa soluzione può essere un'opzione (la voto), ma solo per un pacchetto installato di recente, perché posso modificare il repository e la loro priorità.
lg.

1

Non è un'ottima soluzione, ma ho scoperto che l'elenco yum disponibile ti mostrerà dove è disponibile la versione più aggiornata di ciascun pacchetto, ad esempio:

lista yum disponibile | grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 aggiorna
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 rpm senza fusione
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpm senza fusione

Quindi potresti fare un elenco di yum disponibile sul tuo pacchetto, quindi confrontare la tua versione installata usando l'elenco di yum installato e avere una buona idea di quale repo provenga se le versioni corrispondono.


Questo è vero solo se il pacchetto non è ancora installato.
lg.

Sebbene non risponda esattamente alla domanda dei PO, è stato molto utile per me perché funziona in Centoss 5.5 con solo yum e nessun altro programma di utilità, e puoi: 1. Disinstallare il pacchetto quindi eseguire una query per vedere dove si trova il repository, quindi reinstallare o 2. Eseguire una query su un altro computer senza il pacchetto installato.
Lreeder,

1

Puoi aggiungere il flag dettagliato a "informazioni yum":

yum info -v <package_name>

Il repository di installazione sarà nell'output "From repo".


Questa sembra essere l'unica soluzione che non richiede l'installazione di yum-utils.
Mark Edington,

Questo elenca solo "installato" per me.
frogstarr78

1

Quindi so che questa è una domanda un po 'vecchia, ma emerge dalla ricerca su Google per quello che stavo cercando.

Esiste anche un metodo per ottenere un elenco univoco di repository utilizzati:

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

Questo elencherà i repository da cui sono stati installati i pacchetti.


1

L'approccio più semplice e diretto senza l'installazione di strumenti aggiuntivi, il greping o la produzione di informazioni estranee è semplicemente:

yum list installed [package name]

La terza colonna fornirà l'ID del repository da cui è stato installato il pacchetto.

Questo è stato menzionato in un commento sulla domanda originale usando grep, ma non è necessario. Puoi semplicemente passare il nome del pacchetto direttamente yumal filtro.



-1

Il modo più semplice è questo:

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

Ulteriori suggerimenti e trucchi sono disponibili qui: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
In questo modo (aggiungendo una pipe con grep -i nome del pacchetto) scopro il fornitore, ma non il repository.
lg.

1
Il fornitore non ha (quasi) nulla a che fare con il repository.
Matteo
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.