Jak się dowiedzieć, z którego repozytorium yum pakiet został zainstalowany?


152

Po zainstalowaniu pakietu przez yum (ze skonfigurowanymi wieloma repozytoriami), jak mogę znaleźć, z którego repozytorium zostało zainstalowane?

Po uruchomieniu yum info package-name(lub yum list package-name) widzę tylko, że pakiet jest „zainstalowany”.


1
Świetne pytanie! Zainstalowałem yum-utils i wypróbowałem taki, który nazywa się repoquery, ale bez powodzenia.
Sean Staats


@ warren twój link nie jest użyteczny, ponieważ twój link jest pytaniem o „czym repo jest przechowywane RPM”, ale pytanie to pyta „z jakiego repo jest ZAINSTALOWANA RPM”. różne pytania.
Trevor Boyd Smith

jeśli jesteś przyzwyczajony do robienia rpm -qa|grep NAMEto można zrobić yum list installed|grep NAME, aby znaleźć to, co repo rpm pochodzi .
Trevor Boyd Smith

@TrevorBoydSmith - 7 lat temu było blisko. Dziś nadal jest podobnie. Nigdy nie powiedziałem, że było tak samo . Po prostu to było powiązane.
warren

Odpowiedzi:


81

Po zainstalowaniu yum-utils, repoquery dostarczy poszukiwanych informacji (tutaj „epel” jest repozytorium).

└─[$]> 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
repoquery nie działa poprawnie, wtedy otrzymuję różne wersje pakietów yum info package_name, nie wydaje się, aby zapytania do repozytoriów były w tej samej kolejności co yum.
Mike Miller,

To samo tutaj na kilku serwerach. yum info package_namezwraca więcej wyników niż pozornie repoquery. Dlatego wymiana stosów nie powinna blokować głosów.
reflexiv,

8
Uznałem, że odpowiedź Xionga Cziamiowa jest nieprawidłowa. repoquery -i $pkgdaje repo, z którego $pkgjest dostępny a, nie repo, z którego $pkgzostał zainstalowany. Zrobiłem to polecenie rpm -qi $pkgi otrzymałem różne numery wersji. rpmskutkowało wcześniejszym numerem wersji niż ten repoquery.

Możliwe, że twoja lokalna kopia jest nieaktualna lub została zainstalowana z dodatkowymi poleceniami do yum (np --use-mirror.). Nie sądzę, że zawsze można uzyskać właściwą odpowiedź.
Xiong Chiamiov

użytkownik158844 ma rację. Dzięki temu dowiesz się z jakich repozytoriów zapewnia dany pakiet, ale nie z jakiego repozytorium pochodzi dany pakiet. Jeśli zainstalowałeś pakiet z określonego repozytorium, usunąłeś to repozytorium, a następnie zainstalowałeś kolejne repozytorium, które udostępnia pakiet o tej samej nazwie, uruchomienie „repoquery -i” w ten sposób zwróciłoby ci pakiety z listą nowo zainstalowanego repozytorium, a nie tym, które faktycznie zainstalowałeś pakiet z. Pytający chce wiedzieć, z którego pakietu faktycznie pochodzi zainstalowane oprogramowanie. Nie to, jakie aktualne repo mają pakiety o tej samej nazwie.
Todd Walton

43

Jaka wersja mniam?

W bieżącej wersji, jeśli zainstalowany pakiet jest tej samej wersji, co najnowsza dostępna, zostanie wyświetlone repozytorium, z którego został zainstalowany.

$ 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

Jeśli dostępny jest nowszy pakiet, zostanie on pokazany osobno, a nowa wersja pokazuje repozytorium, z którego jest dostępny.


Używam yum 3.2.19 na CentOs 5.3 i wiersz „From repo” nie istnieje.
lg.

Tak ... Testowałem to na 3.2.21, które nigdzie nie zawierają tych informacji. Kiedy zrobiłem to na moim pudełku, które ma 3.2.23, zadziałało.
Alex

Teraz jest to najlepsze rozwiązanie, ale nie dotyczy RHEL / Centos 5.3. Akceptuję to rozwiązanie, ale jestem gotów wybrać inną odpowiedź, jeśli będzie dotyczyć również RHEL / Centos 5.3.
lg.

2
W CentOS 5.5 jest to niemożliwe.
Mike Miller,

„Od rep” nie jest dostępna nawet w CentOS 5.8
sepehr

22

Wychodzę za późno, ale (przynajmniej na Fedorze 15) można użyć yumdb do podobnych zapytań:

yumdb info 'python*'

I czego tak naprawdę potrzebowałem, aby wyświetlić listę pakietów z danych repozytoriów:

yumdb search from_repo 'my-*-repo'

Działa również na Fedorze 14
lg.

1
działa na RHEL 6.2
pixelbeat

8

Jeśli wszystko inne zawiedzie, możesz ręcznie sprawdzić yumdb. Znajduje się w nim /var/lib/yum/yumdbi zawiera szczegółowe informacje o każdym zainstalowanym pakiecie. Będziesz szczególnie zainteresowany from_repo. Na przykład dla bind-utilspakietu:

# 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

Aby uzyskać tylko potrzebne informacje:

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

Późniejsze wersje dostarczą jeszcze więcej danych; na przykład w EL 7 przechowywane jest tutaj dokładne lustro i adres URL, z którego pakiet został pobrany.


+1. Ale jeszcze lepiej zrobić coś takiego:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneco w powyższym przykładzie zwraca: updates- znacznie bardziej czytelny!
Greg Dubicki

1
@GregDubicki Celem polecenia było pokazanie większego kontekstu tego, co się dzieje i jak rzeczy są przechowywane. Najwyraźniej nie udało się tego zrobić: grepnic tu nie ma potrzeby , a nawet można porzucić pętlę. Bardzo proste cat /var/lib/yum/yumdb/b/*bind-utils*/from_repojest wszystko, czego potrzebujesz.
Michael Hampton


5

Aby zobaczyć, co zostało zainstalowane z repozytorium epel: (powinno działać w Centos 5.5), zauważ, że jeśli nie masz repozytorium o nazwie epel, to wypluje wszystko, co jest zainstalowane.

repoquery --repoid = epel -a | xargs mniam zainstalowana lista


1
Wygląda na to, że działa, dopóki w repozytorium nie ma zaktualizowanego pakietu. Musisz więc uruchomić mniam aktualizację tuż przed użyciem.
kodewaggle

4

Jeśli pakiet został niedawno zainstalowany, możesz zajrzeć do katalogu / var / cache / yum.

W tym katalogu znajduje się katalog dla każdego repozytorium, aw nim katalog pakietów. Zrobiłbyś więc coś takiego:

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

Pamięć podręczna musi być jednak włączona w pliku /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Zauważ, że a yum clean [packages|all]wyczyści katalog pamięci podręcznej.

Jeśli katalog pamięci podręcznej jest pusty, istnieje alternatywny sposób. Informacje odczytywane przez yum info [package]pochodzą z /var/cache/yum/[repo]/primary.xml.gz

Możesz przejrzeć plik, wprowadzając:

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

Jednak na komputerach, na których yum info [package]nie wyświetla się „From repo:”, jak wskazuje „theotherreceive”, dzieje się tak, ponieważ nie ma go w pliku primary.xml, więc nie będzie możliwości odzyskania tych informacji. Dlatego jeśli pakiet znajduje się w dwóch lub więcej plikach primary.xml, musisz określić priorytet repo w systemie.


To rozwiązanie może być opcją (głosuję na to), ale szukam ostatecznej odpowiedzi.
lg.

4

Na podstawie i odpowiedzi Swoogan
na RedHat i CentOS można zrobić

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

Wyniki powinny wyglądać mniej więcej tak

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

Gdzie nazwa_ repozytorium to repozytorium, w którym można znaleźć pakiet, i prawdopodobnie został on zainstalowany z pierwszego na liście (patrz yum repolist)


1

Czy te informacje są przechwytywane gdziekolwiek? Pakiet nie ma tych informacji, a yum nie przejmuje się tym, że znajdzie pakiet. Prawdopodobnie możesz to poskładać, ustalając, jakie repozytoria mają pakiet, a następnie określ, który z nich ma priorytet.


To rozwiązanie może być opcją (głosuję na to), ale tylko w przypadku ostatnio zainstalowanego pakietu, ponieważ mogę zmienić repozytorium i ich priorytet.
lg.

1

Nie jest to świetne rozwiązanie, ale stwierdziłem, że dostępna lista yum pokaże Ci, gdzie jest dostępna najbardziej aktualna wersja każdego pakietu, np .:

dostępna lista | grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 aktualizacje
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 rpmfusion-free
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

Możesz więc zrobić listę mniszek dostępną w pakiecie, a następnie porównać zainstalowaną wersję za pomocą zainstalowanej listy mniam i mieć dobry pomysł, z którego repozytorium pochodzi, jeśli wersje są zgodne.


Jest to prawdą tylko wtedy, gdy pakiet nie został jeszcze zainstalowany.
lg.

Chociaż nie odpowiada dokładnie na pytanie OP, było dla mnie bardzo pomocne, ponieważ działa w Centoss 5.5 tylko z yum i bez innych narzędzi, i możesz: 1. Odinstaluj pakiet, a następnie zapytaj, aby zobaczyć, gdzie repo jest następnie ponownie zainstalowane lub 2. Zapytanie na innym komputerze bez zainstalowanego pakietu.
lreeder,

1

Możesz dodać pełną flagę do „mniam informacji”:

yum info -v <package_name>

Repozytorium instalacji będzie znajdować się pod wyjściem „From repo”.


Wydaje się, że jest to jedyne rozwiązanie, które nie wymaga instalacji yum-utils.
Mark Edington,

To pokazuje tylko „zainstalowane” dla mnie.
frogstarr78

1

Wiem, że to nieco stare pytanie - ale pojawia się przy wyszukiwaniu w Google tego, czego szukałem.

Istnieje również metoda uzyskania unikalnej listy używanych repozytoriów:

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

Spowoduje to wyświetlenie repozytoriów, z których zostały zainstalowane pakiety.


1

Najprostsze i najprostsze podejście bez instalowania dodatkowych narzędzi, grepingowania lub wysyłania obcych informacji to po prostu:

yum list installed [package name]

Trzecia kolumna poda identyfikator repozytorium, z którego pakiet został zainstalowany.

Zostało to wspomniane w komentarzu do pierwotnego pytania za pomocą grep, ale nie jest to konieczne. Możesz po prostu przekazać nazwę pakietu bezpośrednio yumdo filtrowania.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.