it-swarm-id.com

Daftar paket dalam Yum yang tergantung pada paket lain yang diinstal

Saya mencoba untuk 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?

53
Rich

Opsi rpm yang Anda inginkan adalah:

rpm -q --whatrequires sqlite

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

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

50
Wes Hardaker

Menjawab

repoquery -q --installed --whatrequires sqlite

Penjelasan

rpm -q --whatrequires sqlite Hanya melaporkan dependensi pada nama paket.

Sebaliknya, repoquery bertindak sebagai follow (dari 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

Mari kita ambil paket libdb.

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

Tidak ada paket yang bergantung pada libdb, jadi kami harus dapat 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 lain tidak tergantung langsung pada paket tersebut, tetapi pada file libdb-5.3.so()(64bit) yang disediakan olehnya.

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
43

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
12
teoincontatto

Anda juga dapat mencoba perintah ini.

repoquery --whatrequires sqlite

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

7
FilBot3

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
3
James Antill

As kata Wes Hardaker , metode bawaan yang baik adalah dengan menggunakan rpm -q --whatrequires <package>. Masalahnya adalah, rpm beroperasi pada kapabilitas untuk resolusi dependensi, tidak hanya pada paket, seperti mis. dpkg tidak di keluarga distribusi Linux Debian/Ubuntu. Seperti yang telah dicatat orang lain, cukup lakukan rpm -q --whatrequires sqlite tidak menceritakan keseluruhan cerita, oleh karena itu mengapa beberapa orang menyarankan menggunakan repoquery. repoquery, bagaimanapun, 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 secara ringkas 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 rpm sendiri, sehingga tidak perlu menginstal paket tambahan apa pun (mis. yum-utils dalam CentOS 7, yang merupakan paket yang berisi repoquery).

1
villapx