Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Cách liệt kê các tệp phụ thuộc của một gói RPM trong Linux

Khi gỡ cài đặt hoặc nâng cấp phần mềm trên hệ thống dựa trên RPM, bạn thường gặp lỗi phụ thuộc (dependency) – hiện tượng quen thuộc gọi là "RPM hell" hoặc "dependency hell". Dưới đây là cách kiểm tra xem một gói RPM đã cài đặt phụ thuộc vào những tệp/gói nào để dễ dàng khắc phục sự cố.

Kiểm tra phụ thuộc của gói đã cài đặt

Giả sử bạn đang cố gỡ gói sendmail và gặp lỗi phụ thuộc:

# rpm -e sendmail-8.13.1-3.2

Để xem danh sách phụ thuộc, dùng cờ -qR (query requires):

# rpm -qR sendmail-8.13.1-3.2
/bin/bash
/bin/mktemp
/bin/sh
/usr/sbin/alternatives
/usr/sbin/useradd
bash >= 2.0
chkconfig >= 1.3
config(sendmail) = 8.13.1-3.2.el4
cyrus-sasl
fileutils
gawk
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
...

Danh sách trên bao gồm cả tệp nhị phân/thư viện cụ thể (như /bin/bash, libc.so.6) và gói RPM ảo/capability (như bash >= 2.0, cyrus-sasl).

Kiểm tra phụ thuộc của file .rpm chưa cài đặt

Nếu bạn có file cài đặt package.rpm và muốn xem phụ thuộc trước khi cài:

# rpm -qpR package.rpm

Tìm gói cung cấp một tệp/thư viện cụ thể

Nếu lỗi báo thiếu libc.so.6(GLIBC_2.2), hãy tìm gói cung cấp nó:

# rpm -qf /lib/libc.so.6
# hoặc tìm trong repo:
# yum provides "*/libc.so.6"   # trên RHEL/CentOS/Fedora
# dnf provides "*/libc.so.6"   # trên Fedora mới

Gỡ cài đặt bỏ qua kiểm tra phụ thuộc (Không khuyến khích)

Chỉ dùng khi cực kỳ cần thiết và bạn hiểu rủi ro:

# rpm -e --nodeps sendmail-8.13.1-3.2

Lưu ý: Việc bỏ qua phụ thuộc có thể làm hỏng các gói khác đang phụ thuộc vào gói bạn gỡ.

Công cụ hiện đại hơn

Trên các hệ thống hiện đại (RHEL 8+, Fedora, CentOS Stream), dnf quản lý phụ thuộc tốt hơn nhiều:

# dnf repoquery --requires sendmail
# dnf remove sendmail  # tự động xử lý phụ thuộc