Jak wyświetlić listę zależności RPM?

36

Na naszym serwerze produkcyjnym działa CentOS wersja 5.2 (wersja ostateczna).

Jak wyświetlić / uzyskać / wyświetlić wszystkie zależności już zainstalowanego pakietu RPM?

Na przykład: SQLite v3.3.6 jest już zainstalowany na serwerze. Chcę zobaczyć wszystkie zależności tego konkretnego pakietu.

Oto wynik polecenia: rpm -qa |grep sqlite

python-sqlite-1.1.7-1.2.1
sqlite-3.3.6-2
sqlite-3.3.6-2

Ponadto, dlaczego wyświetla 2 wpisy sqlite-3.3.6-2tutaj?

Gnanam
źródło

Odpowiedzi:

28
  1. rpm -q --requires somepackagehere

  2. Jedna to i?86paczka, druga to x86_64paczka.

Ignacio Vazquez-Abrams
źródło
Mój system operacyjny jest 64-bitowy. Czy 2 pakiety architektury mogą współistnieć na tym samym serwerze? Jaki jest cel / potrzeba posiadania 2 pakietów architektury jednocześnie?
Gnanam,
2
Dystrybucje wywodzące się z RH / Fedory obsługują wiele ścieżek , dzięki czemu wiele pakietów należących do „różnych, ale wystarczająco podobnych” łuków może współistnieć, aby umożliwić uruchamianie plików wykonywalnych zbudowanych dla każdego z nich.
Ignacio Vazquez-Abrams,
Niestety wymaga to, aby pakiet był już zainstalowany lokalnie: \
rogerdpack
@rogerdpack: Cóż, tak. Właśnie o to pytano.
Ignacio Vazquez-Abrams
Tak, niestety, Google wysyła „wszyscy tutaj”, jeśli google „wypisuje zależności RPM” - Google ma zakres, który zadał pytanie! Niezależnie od tego, zapoznaj się z odpowiedzią davey'a dla wszystkich obserwujących, którzy chcą tej funkcjonalności.
rogerdpack,
34

yum deplistKomenda pokaże, która rpm „s są zależności, oto przykład dla expectpakietu (to będzie działać, nawet jeśli nie masz jeszcze pakiet zainstalowany lokalnie):

# yum deplist expect
..
..
package: expect.i386 5.43.0-5.1
 dependency: libc.so.6
  provider: glibc.i686 2.5-49
  provider: glibc.i686 2.5-49
 dependency: libtcl8.4.so
  provider: tcl.i386 8.4.13-4.el5
davey
źródło
To polecenie nie działa. Czy coś brakuje mi w Twoim poleceniu?
Gnanam,
Przepraszamy, brakowało miejsca, polecenie to pakiet yum deplist.
davey,
1
+1 użycie YUM tutaj jest fajne, jest rekurencyjne i rozwiązuje takie rzeczy jak „perl (COnfig :: Tiny)” lub „libc.so (64bit)”.
djhaskin987
6

Postępując zgodnie z odpowiedzią Ignacio, możesz zobaczyć konkretną architekturę pakietów, wykonując następujące czynności:

$ rpm -qa --queryformat "%{NAME} %{ARCH}\n" sqlite
sqlite i686

W moim przypadku mam tylko jeden pakiet i686 ... ale w ten sposób można uzyskać architekturę powiązaną z pakietami. Jeśli jesteś zainteresowany tym, co jeszcze możesz uzyskać z --queryformat, wydaj a, rpm --querytagsaby zobaczyć listę dostępnych zmiennych.

Alex
źródło
1
+1 Twoje polecenie dotyczące umieszczania na liście według architektury jest również pomocne.
Gnanam,
3

Mam szybki fragment powłoki, który wypisuje wszystkie zainstalowane pakiety wraz z ich zależnościami:

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done
Daeon
źródło
3

Ludzie już odpowiedzieli:

  1. rpm -q --requires PKG
  2. yum -q deplist PKG

Tak albo rpmalbo yumdziała i poprawnie odpowiada na pytanie. Główna różnica między rpmi yumpolega na tym, że yum pokazuje również, jakie pakiety można zainstalować, aby spełnić wymagania biblioteki i / lub plików. Niestety, jeśli pakiet nie jest zainstalowany, żadna z tych metod nie jest przydatna. Ponieważ w oryginalnym plakacie określono już, że pakiet, który sprawdzasz, jest zainstalowany, jest to punkt wyciszenia.

Co jeśli nie masz zainstalowanego pakietu? yummożna nadal używać, ale pośrednio. Możesz wykonać próbną instalację, anulując operację instalacji.

printf n  |  yum install PKG  |  grep -- "---> Package"

Oto przykład:

printf n  |  yum install php  |  grep -- "---> Package"
---> Package php.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-cli.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-common.x86_64 0:5.4.16-45.el7 will be installed
---> Package libzip.x86_64 0:0.10.1-8.el7 will be installed
Suave-V
źródło
Doskonałe obejście ograniczeń raportowania.
MarkHu