เมื่อพยายามถอนหรืออัปเกรดซอฟต์แวร์ใน Linux แบบ RPM บ่อยครั้งจะเจอปัญหา Dependency (ที่เรียกว่า "RPM Hell" หรือ "Dependency Hell") คู่มือนี้ช่วยดูว่า Package ตัวไหนต้องการไฟล์อะไรบ้าง
คำสั่งตรวจสอบ Dependency
# rpm -qR <package-name>
ตัวอย่าง: ตรวจสอบ sendmail
# 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)
...
ประเภทของ Dependency ที่แสดง
- ไฟล์ระบบ (Files): เช่น
/bin/bash,/usr/sbin/useradd - Package อื่น (Packages): เช่น
bash >= 2.0,cyrus-sasl - Library แบบเฉพาะเจาะจง (Libraries): เช่น
libc.so.6(GLIBC_2.1)
คำสั่ง RPM ที่เกี่ยวข้องเพิ่มเติม
| คำสั่ง | หน้าที่ |
|---|---|
rpm -qa | แสดงแพ็กเกจที่ติดตั้งทั้งหมด |
rpm -qa | grep <keyword> | ค้นหาแพ็กเกจที่ติดตั้งแล้ว |
rpm -ivh package.rpm | ติดตั้งแพ็กเกจใหม่ |
rpm -Uvh package.rpm | อัปเกรดแพ็กเกจ |
rpm -e package-name | ถอนแพ็กเกจ |
rpm -qRp package.rpm | ดู dependency ของไฟล์ .rpm ที่ยังไม่ติดตั้ง |
เคล็ดลับแก้ Dependency Hell
- ใช้ yum หรือ dnf แทน rpm โดยตรง - จะจัดการ dependency ให้อัตโนมัติ
- เพิ่ม Repository ที่มีแพ็กเกจครบถ้วน (EPEL, Remi, ฯลฯ)
- ใช้
rpm --test -e packageทดสอบการถอนก่อนทำจริง
การดู dependency ล่วงหน้าช่วยวางแผนการติดตั้ง/ถอนแพ็กเกจได้ดีขึ้น และหลีกเลี่ยงระบบเสียหาย