क्यों लगता है कि यह इस अतिरिक्त निर्भरता की जरूरत है?


9

मैं कुछ मशीन सेटअप निर्देशों पर काम कर रहा हूं, और मुझे यह जानकर आश्चर्य हुआ कि इससे apt-get install A Bअलग व्यवहार कर सकते हैं apt-get install A && apt-get install B

मेरे विशिष्ट उदाहरण है A == openjdk-7-jdkऔर B == ant

तो, openjdk-7-jdkनिर्भर करता है openjdk-7-jre-headless, जो antनिर्भरता को संतुष्ट करता है java6-runtime-headless। लेकिन अगर आप उन्हें स्थापित करते हैं apt-get install openjdk-7-jdk ant, तो APT को यह पता नहीं लगता है और इंस्टॉल हो जाता है default-jre-headless। लेकिन यदि आप स्थापित करने openjdk-7-jdkसे पहले स्थापित करते हैं ant, तो इसकी निर्भरता संतुष्ट है और सभी अच्छे हैं।

APT आमतौर पर इस तरह की चीज़ों का पता लगाने के लिए काफी स्मार्ट है, तो इस मामले में ऐसा क्यों नहीं किया जा सकता है? मैं एक बेहतर समझ रखना चाहता हूं कि यह इस तरह क्यों काम करता है, इसलिए इस तरह की चीज मुझे भविष्य में फिर से यात्रा नहीं कराती है।


मेरे apt कैश को देखकर मुझे लगता है कि Openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 Openjdk-7-jre पर निर्भर करता है, जो बदले में Openjdk-7-jre-headless पर निर्भर करता है, इसलिए यह निर्भरता अप्रत्यक्ष है । चींटी डिफॉल्ट- jre-headless पर सीधे निर्भर करती है। मैं Precise का उपयोग कर रहा हूँ। मैं केवल अनुमान लगा रहा हूं, लेकिन एप-एंट या तो मनमाने ढंग से चींटी के साथ शुरू कर सकता है, या स्तर 1 निर्भरता से शुरू कर सकता है और फिर स्तर निर्भरता पर जा सकता है। किसी भी स्थिति में, यदि आप संकुल के अंतिम विन्यास के बारे में परवाह करते हैं (डिफ़ॉल्ट रूप से ओपन -ddk-7-jre-headless चाहते हैं -..- ..) उन्हें विशेष रूप से निर्दिष्ट करते हैं और व्यक्तिगत रूप से संभवतः इसे नियंत्रित करने का सबसे अच्छा तरीका है।
जॉन एस ग्रबेर

क्या आप अभी भी उस प्रश्न में रुचि रखते हैं?
गुंटबर्ट

@guntbert Sure, हालांकि मैंने खुद को इस बात पर विश्वास करने के लिए इस्तीफा दे दिया है कि कोई कारण नहीं है; यह सिर्फ तरीका है।
leedm777

5
एपीटी रिज़ॉल्वर कैसे काम करता है, यह देखने के लिए apt-get install -o Debug::pkgProblemResolver=true package1 package2...। यह आपको संकेत दे सकता है कि यह इस तरह से क्यों काम कर रहा है।
लासल

जवाबों:


2

लगता है कि यहाँ "वज़न" प्रणाली खेल रही है:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

जैसा कि आप देख सकते हैं कि सुझावों, सिफारिशों और निर्भरता की एक जटिल और जटिल मात्रा antके openjdk-7-jdkकारण निर्भर करता है , जबकि openjdk-6-jdkनिर्भरता का उपयोग करते समय अधिक महत्वपूर्ण होता है:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

निश्चित रूप aptitudeसे निर्भरता संकल्प के तरीके, अलग हो सकते हैं apt-get। BTW, Openjdk-7-jdk के बिना चींटी का अनुकरण चलाने के लिए Openjdk-6-jdk स्थापित नहीं किया गया है:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

हो सकता है कि यदि आप मेरे द्वारा किए गए तरीकों का उपयोग करते हैं, तो आप अधिक जानकारी प्राप्त कर सकते हैं, क्योंकि मैं अभी डेबियन परीक्षण का उपयोग कर रहा हूं और इस बीच रिपॉजिटरी बदल सकता है।


0

AFAIK, यह एक निर्भरता को संतुष्ट करने के लिए चूक है, इसलिए अगर वह निर्भरता पैकेज स्थापित करने से पहले संतुष्ट नहीं हुई है, तो यह निर्भरता स्थापित करता है और फिर अनुरोधित पैकेज को स्थापित करता है।

यह भी सिर्फ एक बड़ा बग हो सकता है, हालांकि।

किसी भी तरह से, आशा है कि मदद करता है।

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