यम में संकुल को सूचीबद्ध करना जो दूसरे संस्थापित पैकेज पर निर्भर करता है


48

मैं RHEL5 पर एक 3-पार्टी RPM पैकेज स्थापित करने की कोशिश कर रहा हूं जो कि sqlite के संस्करण 3.4 पर निर्भर करता है। यम के अनुसार मेरे पास पहले से ही 3.3.6 स्थापित है।

क्या स्थापित पैकेजों को सूचीबद्ध करने का एक तरीका है जो sqlite 3.3.6 पर निर्भर है?

जवाबों:


47

आरपीएम विकल्प आप चाहते हैं:

rpm -q --whatrequires sqlite

संपादित: जोड़ा गया - अन्य उत्तरों / टिप्पणियों में प्रति चर्चा की स्थापना

संपादित: हटाया गया - यह rpm के लिए एक अमान्य विकल्प है


3
इसके अलावा, repoqueryसभी पैकेजों की संरचना जैसे एक विशेष पैकेज की आवश्यकता के लिए एक अच्छा पेड़ उत्पन्न करने के लिए इस्तेमाल किया जा सकता है, उदाहरण के लिए:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
मैं इस बात से सहमत नहीं हूँ कि यह उत्तर विश्वसनीय है - निश्चित रूप से CentOS 7.x पर नहीं। परीक्षण करने के लिए, ImageMagick स्थापित करें। OpenEXR-libs भी स्थापित किया जाएगा क्योंकि ImageMagick इस पर निर्भर करता है। अब rpm -q --whatrequires OpenEXR-libs चलाएं और रिटर्न "कोई पैकेज OpenEXR-libs की आवश्यकता नहीं है" जो कि INCORRECT है। अब "repoquery -q --installed --whatrequires OpenEXR-libs" चलाएं और यह सही ढंग से "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64" लौटाता है। @ अन्याय यादृच्छिक लड़के का जवाब यहाँ सही उत्तर होना चाहिए।
पंचो

6
--installedके लिए एक विकल्प है, repoqueryलेकिन इसके लिए अमान्य है rpm
दान चावल

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
इस उत्तर को स्वीकार कर लिया जवाब से बेहतर है
पान्चो

11

Dnf (yum का नया संस्करण) के लिए आप रेपोवेरी रैपर कमांड के साथ प्रयास कर सकते हैं:

dnf repoquery --whatrequires sqlite

यदि यह उपलब्ध नहीं है, तो आप इसे कमांड के साथ स्थापित कर सकते हैं:

dnf -y install dnf-plugins-core

आपको --installed --recursiveअंत में इसकी आवश्यकता है इसलिए यह केवल वही लौटाता है जो वास्तव में स्थापित है और रिपॉजिटरी से नहीं खींचता है
हैशब्रोएन


3

मुझे लगता है कि आप वास्तव में जो जानना चाहते हैं वह है "वे कौन से पैकेज हैं जिनके लिए sqlite-3.3.6 की आवश्यकता होती है, लेकिन sqlite-3.4.z से खुश नहीं होंगे" ... और उस खोज का एकमात्र अच्छा तरीका है, कोशिश करो। पसंद:

echo | yum upgrade sqlite

1

जैसा कि वेस हार्डेकर ने कहा , एक अच्छा बिल्ट-इन तरीका है rpm -q --whatrequires <package>। बात यह है कि निर्भरता संकल्प के लिए क्षमताओंrpm पर काम करता है, न केवल संकुल पर, जैसा कि लिनक्स वितरण के डेबियन / उबंटू परिवार में होता है। जैसा कि अन्य ने उल्लेख किया है, बस करने से पूरी कहानी नहीं मिलती है , इसलिए कुछ का उपयोग करने का सुझाव दिया गया है । हालाँकि, आरएचईएल / सेंटोस 7 में डिफ़ॉल्ट रूप से स्थापित नहीं किया गया है 7 न्यूनतम (शायद डेस्कटॉप भी?), इसलिए यह सभी के लिए उपलब्ध नहीं हो सकता है।dpkgrpm -q --whatrequires sqliterepoqueryrepoquery

एक उपयोगकर्ता उन 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)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.