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”.

lg.
źródło
1
Świetne pytanie! Zainstalowałem yum-utils i wypróbowałem taki, który nazywa się repoquery, ale bez powodzenia.
Sean Staats
patrz także serverfault.com/questions/90409/… :)
warren
@ 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.
Xiong Chiamiov
źródło
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.

inne
źródło
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'
Marsjanin
źródło
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.

Michael Hampton
źródło
+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
6
rpm -qi packagename

Powie ci sprzedawca i pakujący

Esmail
źródło
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

David A.
źródło
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.

Swoogan
źródło
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)

iddqd
źródło
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.

Alex
źródło
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.

gareth_bowles
źródło
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”.

smw
źródło
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.

Steven Haigh
źródło
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.

Scott Buchanan
źródło
-1

Najłatwiej jest to zrobić:

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

Więcej porad i wskazówek można znaleźć tutaj: http://wiki.centos.org/TipsAndTricks/YumAndRPM

Bluesguy
źródło
2
W ten sposób (dodając potok z nazwą pakietu grep -i) odkrywam dostawcę, ale nie repozytorium.
lg.
1
Sprzedawca nie ma (prawie) nic wspólnego z repozytorium.
Matteo,