2009-03-11 5 views
28

Si spera che la versione breve della domanda: Se sono su una macchina che ha un particolare pacchetto installato, c'è un comando yum che mi dirà quale dei suoi repository configurati ha fornito quel pacchetto? (O in alternativa, quale repository fornirebbe un pacchetto ancora da installare.)Può dirmi quale dei miei repository fornisce un pacchetto particolare?

Sfondo in caso sia necessario un contesto: Abbiamo un labirinto di repository yum da cui attingiamo. Ho una macchina che ha un particolare pacchetto rpm installato, e un'altra macchina con un labirinto apparentemente insufficiente di repository configurati, e quindi non sono in grado di installare il pacchetto che voglio su quella macchina. Devo aggiungere i repository minimi necessari alla nuova macchina. Non posso semplicemente sparare ai repository da una macchina all'altra. E uscire e prendere il rpm non è un'opzione perché ho bisogno che questo sia riproducibile.

risposta

30
yum list packagename 

Ciò mostra da quale repository il pacchetto si trova nella terza colonna dell'output.

Per i pacchetti già installati, ciò non funzionerà, poiché la terza colonna mostra solo "installato". In tal caso, puoi farlo ad es. "rpm -qi nomepacchetto", in genere i tag Vendor, Packager e BuildHost daranno un'indicazione a quale repository appartiene il pacchetto. Inoltre è abbastanza comune che alcuni simboli repo vengano aggiunti al numero di versione del pacchetto.

+0

atomica Repo utenti: Fornitore è vuoto per RPM Atomic, ma se il "Build Host" è "Archelon", è da Atomic. – johnorourke

23
repoquery -i {packagename} 

Questo vi darà il nome del repository effettivo rispetto al "installato" non utile restituito da yum. Il repoquery viene fornito da yum-utils.

1

Per un singolo pacchetto, è possibile trovare questo con

PACKAGE=ruby-enterprise 
repoquery --qf "%{repoid}" $PACKAGE 

Sostituire $ PACCHETTO con il nome del pacchetto che ti interessano.

Potete trovare tutti i pacchetti che provenivano da un repository specifico con

REPO=ruby-enterprise-opt 
repoquery --repoid=$REPO -a --qf "%{name}" | sort > repo_packages 
rpm -qa --qf "%{name}\n" | sort > installed_packages 
comm -1 -2 repo_packages installed_packages 

Sostituire $ REPO con l'id del repository che ti interessano; puoi vedere gli ID di tutti i tuoi repository abilitati con yum repolist.

0
yum reinstall [package_name] 

Poi quando gli viene chiesto di confermare, è possibile scegliere N per non cambiare il sistema:

Esempio di output su un CentOS:

Resolving Dependencies 
--> Running transaction check 
---> Package mc.x86_64 1:4.6.1a-35.el5 set to be updated 
--> Finished Dependency Resolution 

Dependencies Resolved 

============================================================================================================================================== 
Package      Arch        Version         Repository      Size 
============================================================================================================================================== 
Reinstalling: 
mc       x86_64       1:4.6.1a-35.el5       base       2.1 M 

Transaction Summary 
============================================================================================================================================== 
Remove  0 Package(s) 
Reinstall  1 Package(s) 
Downgrade  0 Package(s) 

Total download size: 2.1 M 
Is this ok [y/N]: