การแสดงรายการแพ็คเกจใน Yum ที่ขึ้นอยู่กับแพ็คเกจที่ติดตั้งอื่น


48

ฉันพยายามติดตั้งแพ็กเกจ RPM บุคคลที่สามบน RHEL5 ซึ่งขึ้นอยู่กับเวอร์ชั่น 3.4 ของ sqlite ตาม Yum ฉันได้ติดตั้ง 3.3.6

มีวิธีในการแสดงรายการแพ็คเกจที่ติดตั้งซึ่งขึ้นอยู่กับ sqlite 3.3.6 หรือไม่?

คำตอบ:


47

ตัวเลือก rpm ที่คุณต้องการคือ:

rpm -q --whatrequires sqlite

แก้ไข: เพิ่ม - ติดตั้งต่อการสนทนาในคำตอบ / ความคิดเห็นอื่น ๆ

แก้ไข: ลบแล้ว - ติดตั้งเนื่องจากเป็นตัวเลือกที่ไม่ถูกต้องสำหรับรอบต่อนาที


3
เพิ่มเติมrepoqueryสามารถใช้ในการสร้างต้นไม้ที่ดีเช่นโครงสร้างของแพคเกจทั้งหมดที่ต้องใช้แพคเกจเฉพาะเช่น:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
ฉันไม่เห็นด้วยที่คำตอบนี้เชื่อถือได้แน่นอนไม่ใช่ใน CentOS 7.x ในการทดสอบให้ติดตั้ง ImageMagick OpenEXR-libs จะถูกติดตั้งด้วยเนื่องจาก ImageMagick ขึ้นอยู่กับมัน ตอนนี้รัน rpm -q - สิ่งที่ต้องการ OpenEXR-libs และการส่งคืนคือ "ไม่ต้องใช้แพ็กเกจ OpenEXR-libs" ซึ่งก็คือ INCORRECT ตอนนี้เรียกใช้ "repoquery -q - ติดตั้ง - สิ่งที่ต้องการ OpenEXR-libs" และมันจะส่งกลับอย่างถูกต้อง "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64" @ เพียงแค่คำตอบของคนที่แต่งตัวประหลาดด้านล่างควรเป็นคำตอบที่ถูกต้องที่นี่
Pancho

6
--installedเป็นตัวเลือกสำหรับแต่ไม่ถูกต้องสำหรับrepoquery rpm
Dan Rice

36

ตอบ

repoquery -q --installed --whatrequires sqlite

คำอธิบาย

rpm -q --whatrequires sqlite รายงานการขึ้นต่อกันของชื่อแพ็คเกจเท่านั้น

ในทางตรงกันข้ามrepoqueryทำหน้าที่ดังต่อไปนี้ (จาก manpages):

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

ตัวอย่าง

มาห่อของlibdbกัน

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

ไม่มีแพ็คเกจขึ้นอยู่libdbดังนั้นเราควรจะสามารถลบออกได้อย่างราบรื่น อย่างไรก็ตาม ...

# 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

ในขณะที่คุณสามารถดูแพคเกจอื่น ๆ ได้ขึ้นอยู่กับแพคเกจไม่ได้โดยตรง แต่ในไฟล์ที่libdb-5.3.so()(64bit)ให้ไว้

สุดท้ายนี่คือรายการแพ็คเกจจริงขึ้นอยู่กับ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

1
คำตอบนี้ดีกว่าคำตอบที่ได้รับการยอมรับ
Pancho

11

สำหรับ dnf (yum รุ่นใหม่) คุณอาจลองใช้คำสั่ง repoquery wrapper:

dnf repoquery --whatrequires sqlite

หากไม่พร้อมใช้งานคุณสามารถติดตั้งได้ด้วยคำสั่ง:

dnf -y install dnf-plugins-core

คุณต้องการ--installed --recursiveที่สุดแล้วมันจะคืนสิ่งที่ติดตั้งจริงเท่านั้นและไม่ดึงออกมาจากที่เก็บ
Hashbrown

7

คุณสามารถลองใช้คำสั่งนี้

repoquery --whatrequires sqlite

ฉันได้รับคำสั่งนี้จากServerFaultและจากThe Fedora Forums


แพ็คเกจที่ส่งคืนนี้ฉันไม่ได้ติดตั้ง
2rs2ts

3

ฉันคิดว่าสิ่งที่คุณอยากรู้คือ "อะไรคือแพ็คเกจที่ต้องใช้ sqlite-3.3.6 แต่จะไม่มีความสุขกับ sqlite-3.4.z" ... และวิธีเดียวที่จะค้นพบมันคือ ลองมัน. ชอบ:

echo | yum upgrade sqlite

1

ในฐานะที่เป็นWes Hardaker กล่าวว่าrpm -q --whatrequires <package>เป็นวิธีการในตัวที่ดีคือการใช้ สิ่งนี้คือrpmทำงานกับความสามารถในการแก้ไขปัญหาการพึ่งพาไม่ใช่เพียงแค่บนแพ็คเกจเช่นdpkgในตระกูล Debian / Ubuntu ของ Linux ดิสทริบิวชัน เป็นคนอื่นได้ระบุไว้เพียงแค่ทำไม่ได้บอกเรื่องราวทั้งหมดจึงทำไมบางแนะนำให้ใช้rpm -q --whatrequires sqlite อย่างไรก็ตามจะไม่ได้รับการติดตั้งตามค่าเริ่มต้นใน RHEL / CentOS 7 ขั้นต่ำ (อาจเป็นเดสก์ท็อปด้วย) ดังนั้นจึงอาจไม่สามารถใช้ได้สำหรับทุกคนrepoqueryrepoquery

ผู้ใช้สามารถทำได้rpm -q --provides <pkgname>เพื่อดูความสามารถทั้งหมดที่มีในแพ็คเกจจากนั้นใช้rpm -q --whatrequires <capability>เพื่อดูว่าแพ็คเกจใดที่ติดตั้งไว้ต้องใช้ความสามารถนั้น สามารถสอบถามข้อมูลนี้ได้อย่างกระชับโดยใช้ BASH หนึ่งไลเนอร์ (คั่นที่นี่เป็นความยาวสองบรรทัด):

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

ใช้ตัวเลือกในrpmตัวเท่านั้นดังนั้นจึงไม่จำเป็นต้องติดตั้งแพคเกจเพิ่มเติมใด ๆ (เช่นyum-utilsใน CentOS 7 ซึ่งเป็นแพ็คเกจที่มีrepoquery)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.