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.