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.