Bagaimana cara mendaftar dependensi RPM?

36

Server produksi kami menjalankan rilis CentOS 5.2 (Final).

Bagaimana saya melihat / mendapatkan / mendaftar semua dependensi dari paket RPM yang sudah diinstal ?

Sebagai contoh: SQLite v3.3.6 sudah diinstal di server. Saya ingin melihat semua dependensi dari paket khusus ini.

Ini adalah output dari perintah: rpm -qa |grep sqlite

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

Juga, mengapa daftar 2 entri di sqlite-3.3.6-2sini?

Gnanam
sumber

Jawaban:

28
  1. rpm -q --requires somepackagehere

  2. Satu adalah i?86paket, yang lainnya adalah x86_64paket.

Ignacio Vazquez-Abrams
sumber
OS saya adalah 64-bit. Bisakah 2 paket arsitektur hidup berdampingan di server yang sama? Apa tujuan / kebutuhan memiliki 2 paket arsitektur secara bersamaan?
Gnanam
2
Distro yang diturunkan dari RH- / Fedora mendukung multiarch , di mana beberapa paket milik lengkungan "berbeda-namun-cukup-sama" dapat hidup berdampingan untuk memungkinkan menjalankan executable yang dibangun untuk kedua lengkung.
Ignacio Vazquez-Abrams
Sayangnya ini membutuhkan paket yang sudah diinstal secara lokal: \
rogerdpack
@rogerdpack: Ya, benar. Itulah tepatnya pertanyaan yang diajukan.
Ignacio Vazquez-Abrams
Ya sayangnya google mengirimkan "semua orang langsung di sini" jika Anda google "daftar dependensi RPM" - google memiliki ruang lingkup merayapi pertanyaan! Apapun, lihat jawaban davey untuk setiap pengikut yang menginginkan fungsi itu.
rogerdpack
34

The yum deplistperintah akan menunjukkan kepada Anda yang rpm 's dependensi, inilah contoh untuk expectpaket (ini akan bekerja bahkan jika Anda belum memiliki paket diinstal secara lokal):

# 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
sumber
Perintah ini tidak berfungsi. Apakah saya melewatkan sesuatu atau ada sesuatu yang hilang dalam perintah Anda?
Gnanam
Maaf ada ruang yang hilang, perintahnya adalah paket yum deplist.
davey
1
+1 penggunaan YUM di sini bagus, bersifat rekursif dan menyelesaikan hal-hal seperti 'perl (COnfig :: Tiny)' atau 'libc.so (64bit)'.
djhaskin987
6

Mengikuti jawaban Ignacio, Anda dapat melihat arsitektur spesifik paket dengan melakukan hal berikut:

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

Dalam kasus saya, saya hanya punya satu, paket i686 ... tetapi Anda bisa mendapatkan arsitektur yang terkait dengan paket seperti itu. Jika Anda tertarik pada apa lagi yang bisa Anda dapatkan dari --queryformat, keluarkan a rpm --querytagsuntuk melihat daftar variabel yang tersedia.

Alex
sumber
1
+1 Perintah Anda tentang cantuman menurut arsitektur juga membantu.
Gnanam
3

Saya memiliki cuplikan shell cepat yang mencetak semua paket yang diinstal bersama dengan dependensinya:

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done
Daeon
sumber
3

Orang-orang sudah merespons dengan:

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

Ya, baik bekerja rpmatau yummenjawab pertanyaan dengan benar. Perbedaan utama antara rpmdan yumadalah bahwa yum juga menunjukkan paket apa yang dapat Anda instal untuk memenuhi persyaratan perpustakaan dan / atau file. Sayangnya, jika paket tidak diinstal, tak satu pun dari metode ini berguna. Karena poster asli sudah menentukan bahwa paket yang Anda periksa diinstal, ini adalah titik bisu.

Bagaimana jika Anda tidak menginstal paket? yummasih bisa digunakan, tetapi secara tidak langsung. Anda dapat melakukan instalasi tiruan dengan membatalkan operasi instalasi.

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

Berikut ini sebuah contoh:

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
sumber
Solusi brilian untuk batasan pelaporan.
MarkHu