Daftar paket di Yum yang tergantung pada paket lain yang diinstal

48

Saya mencoba menginstal paket RPM pihak ke-3 di RHEL5 yang tergantung pada versi 3.4 dari sqlite. Menurut Yum saya sudah menginstal 3.3.6.

Apakah ada cara untuk mendaftar paket yang diinstal yang bergantung pada sqlite 3.3.6?

Kaya
sumber

Jawaban:

47

Opsi rpm yang Anda inginkan adalah:

rpm -q --whatrequires sqlite

Diedit: ditambahkan - diinstal per diskusi dalam jawaban / komentar lain

Diedit: dihapus - diinstal karena merupakan opsi yang tidak valid untuk rpm

Wes Hardaker
sumber
3
Selanjutnya, repoquerydapat digunakan untuk menghasilkan struktur seperti pohon semua paket yang memerlukan paket tertentu, misalnya:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp
3
Saya tidak setuju bahwa jawaban ini dapat diandalkan - tentu saja tidak pada CentOS 7.x. Untuk menguji, instal ImageMagick. OpenEXR-libs juga akan diinstal karena ImageMagick bergantung padanya. Sekarang jalankan rpm -q - apa yang membutuhkan OpenEXR-libs dan kembalinya adalah "tidak ada paket yang membutuhkan OpenEXR-libs" yang INCORRECT. Sekarang jalankan "repoquery -q --installed --whatrequires OpenEXR-libs" dan mengembalikan dengan benar "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64". @ cukup jawaban acak pria di bawah ini seharusnya jawaban yang benar di sini.
Pancho
6
--installedadalah opsi untuk repoquerytetapi tidak valid untuk rpm.
Dan Rice
36

Menjawab

repoquery -q --installed --whatrequires sqlite

Penjelasan

rpm -q --whatrequires sqlite hanya melaporkan ketergantungan pada nama paket.

Sebaliknya, repoquerybertindak sebagai berikut (dari halaman manual):

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

Contoh

Ayo ambil paket libdb.

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

Tidak ada paket yang tergantung libdb, jadi kita harus bisa menghapusnya dengan lancar. Namun...

# 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

Seperti yang Anda lihat, beberapa paket lainnya tidak tergantung langsung pada paket tersebut, tetapi pada file yang libdb-5.3.so()(64bit)disediakannya.

Akhirnya, inilah daftar paket yang sebenarnya tergantung pada 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
Elouan Keryell-Even
sumber
1
Jawaban ini lebih baik daripada jawaban yang diterima
Pancho
11

Untuk dnf (versi baru yum), Anda dapat mencoba dengan perintah pembungkus repoquery:

dnf repoquery --whatrequires sqlite

Jika tidak tersedia, Anda dapat menginstalnya dengan perintah:

dnf -y install dnf-plugins-core
teoincontatto
sumber
Anda perlu --installed --recursivepada akhirnya sehingga hanya mengembalikan apa yang sebenarnya diinstal dan tidak menarik dari repositori
Hashbrown
7

Anda juga dapat mencoba perintah ini.

repoquery --whatrequires sqlite

Saya mendapat perintah ini dari ServerFault dan juga dari Forum Fedora.

Pred
sumber
Ini mengembalikan paket yang tidak saya instal.
2rs2ts
3

Saya pikir apa yang benar-benar ingin Anda ketahui adalah "paket apa saja yang membutuhkan sqlite-3.3.6, tetapi tidak akan senang dengan sqlite-3.4.z" ... dan satu-satunya cara yang baik untuk mengetahuinya, adalah dengan Cobalah. Suka:

echo | yum upgrade sqlite
James Antill
sumber
1

Seperti yang dikatakan Wes Hardaker , metode bawaan yang baik adalah dengan menggunakan rpm -q --whatrequires <package>. Masalahnya, rpmberoperasi pada kemampuan untuk resolusi dependensi, tidak hanya pada paket, seperti misalnya dpkgdalam distribusi Linux keluarga Debian / Ubuntu. Seperti yang telah dicatat oleh orang lain, sekadar melakukan rpm -q --whatrequires sqlitetidak menceritakan keseluruhan cerita, karenanya mengapa beberapa orang menyarankan untuk menggunakan repoquery. repoqueryNamun, tidak diinstal secara default di RHEL / CentOS 7 minimal (mungkin desktop juga?), jadi mungkin tidak tersedia untuk semua orang.

Seorang pengguna dapat melakukan rpm -q --provides <pkgname>untuk melihat semua kemampuan yang disediakan paket, lalu gunakan rpm -q --whatrequires <capability>untuk melihat paket apa yang diinstal memerlukan kemampuan itu. Info ini dapat dengan singkat ditanyakan menggunakan BASH one-liner (dipisahkan di sini menjadi dua baris):

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

Ini hanya menggunakan opsi bawaan untuk rpmdirinya sendiri, sehingga tidak perlu menginstal paket tambahan apa pun (mis. yum-utilsDalam CentOS 7, yang merupakan paket yang berisi repoquery).

villapx
sumber