it-swarm-vi.com

Liệt kê các gói trong Yum phụ thuộc vào gói đã cài đặt khác

Tôi đang cố gắng cài đặt gói RPM của bên thứ 3 trên RHEL5, tùy thuộc vào phiên bản 3.4 của sqlite. Theo Yum Tôi đã cài đặt 3.3.6.

Có cách nào để liệt kê các gói đã cài đặt phụ thuộc vào sqlite 3.3.6 không?

53
Rich

Tùy chọn vòng/phút bạn muốn là:

rpm -q --whatrequires sqlite

Đã chỉnh sửa: đã thêm - được cài đặt cho mỗi cuộc thảo luận trong các câu trả lời/nhận xét khác

Đã chỉnh sửa: đã xóa - đã cài đặt vì đây là tùy chọn không hợp lệ cho vòng/phút

50
Wes Hardaker

Câu trả lời

repoquery -q --installed --whatrequires sqlite

Giải thích

rpm -q --whatrequires sqlite Chỉ báo cáo phụ thuộc vào tên gói.

Ngược lại, repoquery hoạt động như sau (từ trang nam):

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

Thí dụ

Hãy lấy gói libdb.

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

Không có gói nào phụ thuộc vào libdb, vì vậy chúng tôi sẽ có thể loại bỏ nó một cách trơn tru. Tuy nhiên...

# 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

Như bạn có thể thấy một số gói khác không phụ thuộc trực tiếp vào gói, mà là trên tệp libdb-5.3.so()(64bit) được cung cấp bởi nó.

Cuối cùng, đây là danh sách thực sự của các gói tùy thuộc vào 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
Elouan Keryell-Even

Đối với dnf (phiên bản mới của yum), bạn có thể thử với lệnh trình bao bọc repoquery:

dnf repoquery --whatrequires sqlite

Nếu nó không có sẵn, bạn có thể cài đặt nó bằng lệnh:

dnf -y install dnf-plugins-core
12
teoincontatto

Bạn cũng có thể thử lệnh này.

repoquery --whatrequires sqlite

Tôi đã nhận lệnh này từ ServerFault và cũng từ Diễn đàn Fedora.

7
FilBot3

Tôi nghĩ điều bạn thực sự muốn biết là "các gói yêu cầu sqlite-3.3.6 là gì, nhưng sẽ không hài lòng với sqlite-3.4.z" ... và cách tốt nhất để tìm ra điều đó, là thử nó. Giống:

echo | yum upgrade sqlite
3
James Antill

Như Wes Hardaker đã nói , một phương thức tích hợp tốt là sử dụng rpm -q --whatrequires <package>. Vấn đề là, rpm hoạt động trên khả năng để phân giải phụ thuộc, không chỉ đơn giản trên các gói, ví dụ: dpkg hiện trong phân phối Linux/Ubuntu của Linux. Như những người khác đã lưu ý, chỉ cần làm rpm -q --whatrequires sqlite không kể toàn bộ câu chuyện, do đó một số đề xuất sử dụng repoquery. repoquery, tuy nhiên, không được cài đặt theo mặc định trong tối thiểu RHEL/CentOS 7 (có thể cả máy tính để bàn?), vì vậy nó có thể không có sẵn cho tất cả mọi người.

Một người dùng có thể làm rpm -q --provides <pkgname> để xem tất cả các khả năng mà gói cung cấp, sau đó sử dụng rpm -q --whatrequires <capability> để xem các gói cài đặt yêu cầu khả năng đó. Thông tin này có thể được truy vấn ngắn gọn bằng cách sử dụng một lớp lót BASH (được phân tách ở đây thành hai dòng cho chiều dài):

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

Điều này chỉ sử dụng các tùy chọn tích hợp sẵn cho rpm và do đó, nó không yêu cầu cài đặt bất kỳ gói bổ sung nào (ví dụ: yum-utils trong CentOS 7, là gói chứa repoquery).

1
villapx