Làm thế nào để liệt kê các phụ thuộc RPM?


36

Máy chủ sản xuất của chúng tôi đang chạy phiên bản CentOS 5.2 (Final).

Làm cách nào để xem / get / liệt kê tất cả các phụ thuộc của gói RPM đã được cài đặt ?

Ví dụ: SQLite v3.3.6 đã được cài đặt trong máy chủ. Tôi muốn xem tất cả các phụ thuộc của gói cụ thể này.

Đây là đầu ra của lệnh: rpm -qa |grep sqlite

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

Ngoài ra, tại sao nó được liệt kê 2 mục sqlite-3.3.6-2ở đây?

Câu trả lời:


28
  1. rpm -q --requires somepackagehere

  2. Một là i?86gói, hai là x86_64gói.


HĐH của tôi là 64 bit. 2 gói kiến ​​trúc có thể cùng tồn tại trong cùng một máy chủ không? Mục đích / nhu cầu của việc có 2 gói kiến ​​trúc cùng một lúc là gì?
Gnanam

2
Các distro có nguồn gốc từ RH- / Fedora hỗ trợ multiarch , theo đó nhiều gói thuộc các vòm "khác nhau nhưng đủ tương tự" có thể cùng tồn tại để cho phép chạy các tệp thực thi được xây dựng cho cả hai vòm.
Ignacio Vazquez-Abrams

Thật không may, điều này đòi hỏi gói phải được cài đặt cục bộ: \
rogerdpack

@rogerdpack: Vâng, vâng. Đó chính xác là những gì câu hỏi yêu cầu.
Ignacio Vazquez-Abrams

Thật không may, google sẽ gửi "tất cả mọi người ở đây" nếu bạn google "liệt kê các phụ thuộc RPM" - google có phạm vi câu hỏi! Bất kể, hãy xem câu trả lời của davey cho bất kỳ người theo dõi nào mong muốn chức năng đó.
rogerdpack

34

Các yum deplistlệnh sẽ cho bạn thấy những rpm 's là phụ thuộc, đây là một ví dụ cho các expectgói (điều này sẽ làm việc ngay cả khi bạn chưa có gói cài đặt cục bộ):

# 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

Lệnh này không hoạt động. Tôi đang thiếu một cái gì đó hoặc có một cái gì đó thiếu trong lệnh của bạn?
Gnanam

Xin lỗi đã có một không gian bị thiếu, lệnh là gói deplist yum.
davey

1
+1 việc sử dụng YUM ở đây rất hay, nó đệ quy và giải quyết những thứ như 'perl (COnfig :: Tiny)' hoặc 'libc.so (64 bit)'.
djhaskin987

6

Theo câu trả lời của Ignacio, bạn có thể thấy kiến ​​trúc cụ thể của các gói bằng cách thực hiện như sau:

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

Trong trường hợp của tôi, tôi chỉ có gói một, i686 ... nhưng bạn có thể lấy kiến ​​trúc được liên kết với các gói theo cách đó. Nếu bạn quan tâm đến những gì khác bạn có thể nhận được từ --queryformat, hãy đưa ra a rpm --querytagsđể xem danh sách các biến có sẵn.


1
+1 Lệnh của bạn về danh sách theo kiến ​​trúc-khôn ngoan cũng hữu ích.
Gnanam

3

Tôi có đoạn mã shell nhanh chóng in ra tất cả các gói đã cài đặt cùng với phần phụ thuộc của chúng:

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

3

Mọi người đã trả lời:

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

Có, hoặc rpmhoặc yumhoạt động và trả lời chính xác câu hỏi. Sự khác biệt chính giữa rpmyumlà yum cũng hiển thị những gói bạn có thể cài đặt để đáp ứng các yêu cầu về thư viện và / hoặc tệp. Thật không may, nếu gói không được cài đặt, không một trong những phương pháp này là hữu ích. Vì áp phích gốc đã chỉ định rằng gói bạn đang kiểm tra đã được cài đặt, đây là điểm câm.

Nếu bạn chưa cài đặt gói thì sao? yumvẫn có thể được sử dụng, nhưng gián tiếp. Bạn có thể thực hiện cài đặt giả bằng cách hủy thao tác cài đặt.

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

Đây là một ví dụ:

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

Giải pháp tuyệt vời cho những hạn chế báo cáo.
MarkHu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.