Wyświetlanie pakietów w Yum, które zależą od innego zainstalowanego pakietu


48

Próbuję zainstalować pakiet RPM innej firmy na RHEL5, który zależy od wersji sqlite 3.4. Według Yum mam już zainstalowaną wersję 3.3.6.

Czy istnieje sposób na wyświetlenie listy zainstalowanych pakietów, które zależą od sqlite 3.3.6?

Odpowiedzi:


47

Wybrana opcja rpm to:

rpm -q --whatrequires sqlite

Edytowane: dodane - zainstalowane na dyskusję w innych odpowiedziach / komentarzach

Edytowane: usunięte - zainstalowane, ponieważ jest to nieprawidłowa opcja dla rpm


3
Ponadto repoquerymożna go użyć do wygenerowania ładnej, drzewiastej struktury wszystkich pakietów wymagających określonego pakietu, na przykład:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
Nie zgadzam się, że ta odpowiedź jest wiarygodna - na pewno nie w CentOS 7.x. Aby przetestować, zainstaluj ImageMagick. OpenEXR-libs również zostaną zainstalowane, ponieważ ImageMagick zależy od tego. Teraz uruchom rpm -q --whatrequires OpenEXR-libs, a wynikiem jest „żaden pakiet nie wymaga OpenEXR-libs”, co jest NIEPRAWIDŁOWE. Teraz uruchom „repoquery -q --installed --whatrequires OpenEXR-libs” i poprawnie zwróci „ImageMagick-0: 6.7.8.9-15.el7_2.x86_64”. @ Just odpowiedź przypadkowego faceta poniżej powinna być poprawną odpowiedzią tutaj.
Pancho

6
--installedjest opcją, repoqueryale jest nieważna dla rpm.
Dan Rice

36

Odpowiedź

repoquery -q --installed --whatrequires sqlite

Objaśnienia

rpm -q --whatrequires sqlite zgłasza tylko zależności od nazw pakietów.

Przeciwnie, repoquerydziała w następujący sposób (ze stron podręcznika):

   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.

Przykład

Weźmy paczkę libdb.

# rpm -q --whatrequires libdb
no package requires libdb

Żadne opakowanie nie zależy od tego libdb, więc powinniśmy być w stanie go płynnie usunąć. Jednak...

# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Jak widać niektóre inne pakiety nie były bezpośrednio w zależności od pakietu, ale w aktach libdb-5.3.so()(64bit)przekazanych przez niego.

Wreszcie, oto prawdziwa lista pakietów w zależności od libdb:

# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64

1
Ta odpowiedź jest lepsza niż odpowiedź zaakceptowana
Pancho

11

W przypadku dnf (nowa wersja yum) możesz spróbować za pomocą polecenia otoki repoquery:

dnf repoquery --whatrequires sqlite

Jeśli nie jest dostępny, możesz zainstalować go za pomocą polecenia:

dnf -y install dnf-plugins-core

Potrzebujesz --installed --recursivena końcu, więc zwraca tylko to, co jest faktycznie zainstalowane i nie pobiera z repozytoriów
Hashbrown,


3

Myślę, że tak naprawdę chcesz wiedzieć, „jakie są pakiety, które wymagają narzędzia sqlite-3.3.6, ale nie będą zadowolone z narzędzia sqlite-3.4.z” ... a jedynym dobrym sposobem na znalezienie tego jest: Spróbuj. Lubić:

echo | yum upgrade sqlite

1

Jak powiedział Wes Hardaker , dobrą wbudowaną metodą jest użycie rpm -q --whatrequires <package>. Chodzi o to, że rpmdziała na możliwościach rozwiązywania zależności, a nie tylko na pakietach, jak np. dpkgW rodzinie dystrybucji Linuksa Debian / Ubuntu. Jak zauważyli inni, samo robienie rpm -q --whatrequires sqlitenie mówi całej historii, dlatego niektórzy sugerowali użycie repoquery. repoquery, jednak nie jest domyślnie instalowany w RHEL / CentOS 7 minimal (może też na komputerze?), więc może nie być dostępny dla wszystkich.

Użytkownik może zrobić, rpm -q --provides <pkgname>aby zobaczyć wszystkie możliwości oferowane przez pakiet, a następnie użyć, rpm -q --whatrequires <capability>aby zobaczyć, jakie zainstalowane pakiety wymagają takiej możliwości. Ta informacja może być zwięźle przeszukana za pomocą jedno-liniowej BASH (podzielonej tutaj na dwie linie dla długości):

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

Używa tylko opcji wbudowanych w rpmsiebie, więc nie wymaga instalowania żadnych dodatkowych pakietów (np. yum-utilsW CentOS 7, który zawiera pakiet repoquery).

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.