प्रत्येक पैकेज अपनी स्वयं की निर्भरता की एक सूची के साथ आता है। के लिए Debs , जो Ubuntu का उपयोग करता है, तो आप कर सकते हैं: -
[andys@daedalus ~]$ apt-cache depends git-core
git-core
Depends: git
जब पैकेज बनाया जाता है तो पैकेज के लिए निर्भरताएँ निर्दिष्ट की जाती हैं। उनमें से कुछ मैन्युअल रूप से पैकेज मेंटेनर ( पैकेज के निर्माण के लिए जिम्मेदार व्यक्ति) द्वारा निर्दिष्ट किए जाते हैं , और कुछ स्वचालित रूप से निर्धारित किए जाते हैं जब पैकेज बनाया जाता है। यदि आप एक डेबियन स्रोत पैकेज को डाउनलोड, और में देखें, तो debian/control
फ़ाइल, आप की तरह लाइनों की एक संख्या दिखाई देगी Depends:
, Conflicts:
, Replaces:
, आदि
तो, उदाहरण के लिए - git-core
केवल एक पैकेज पर निर्भर करता है, जो है git
। git
संभवतः किसी प्रकार का एक रूपांतर है, जिसमें निर्भरता का एक पूरा बेड़ा है, यह सुनिश्चित करने के लिए कि सभी पैकेजों को चलाने के लिए परिशिष्ट स्थापित किए गए हैं - केवल एक पैकेज की निर्भरता को पूरा करने के लिए नहीं। अगर हम git
पैकेज को देखें: -
[andys@daedalus ~]$ apt-cache depends git
git
Depends: libc6
Depends: libcurl3-gnutls
<...snip...>
Suggests: git-cvs
Suggests: git-svn
Suggests: git-email
<...snip...>
Recommends: rsync
<...snip...>
Conflicts: git-core
<...snip...>
Breaks: stgit
Breaks: stgit-contrib
Replaces: <cogito>
Replaces: git-core
... आप देखेंगे कि git
स्वयं में और भी निर्भरताएँ हैं। आगे चीजों को जटिल करने के लिए, एक और पैकेज स्थापित करने की आवश्यकता के अलावा अन्य प्रकार की निर्भरता है ...
- संघर्ष - यह पैकेज किसी अन्य पैकेज के साथ संघर्ष करता है, और आप शायद इस एक की स्थापना रद्द किए बिना विरोधी पैकेज स्थापित करने में सक्षम नहीं होंगे, और इसके विपरीत। इस मामले में,
git
के साथ संघर्ष git-core
। यहां मेरे बॉक्स पर, git-core
पैकेज को अप्रचलित के रूप में चिह्नित किया गया है , यही कारण है कि शायद यह यहां सूचीबद्ध है।
- ब्रेक्स - यह पैकेज एक और पैकेज को तोड़ता है, और इसे स्थापित करता है - हालांकि शायद आपको उस पैकेज को अनइंस्टॉल करने की आवश्यकता नहीं है जो टूट जाएगा - उस पैकेज द्वारा स्थापित सॉफ़्टवेयर के साथ समस्याएं पैदा करेगा। फिर से, हमारे उदाहरण को देखते हुए,
stgit
और stgit-contrib
संकुल को एक बार git
स्थापित होने के बाद टूटा हुआ माना जाएगा ।
- स्थान - यह पैकेज दूसरे पैकेज को बदल देता है, जिसका अर्थ है कि दूसरा पैकेज अप्रचलित है और संभवत: इसे अनइंस्टॉल किया जा सकता है।
git-core
पैकेज फिर से यहां दिखाई देगी।
'सॉफ्ट' निर्भरता प्रकार भी होते हैं, जैसे कि अनुशंसाएँ और सुझाव , जो आपके द्वारा इंस्टॉल किए जा रहे पैकेज द्वारा आवश्यक नहीं हैं, लेकिन जैसा कि नाम से पता चलता है, अनुशंसित या सुझाए गए हैं । एक बार फिर, उदाहरण को देखते हुए, सुझाए गए और अनुशंसित पैकेज को जोड़ने के लिए ऐड-ऑन हैं, या सीधे संबंधित उपकरण नहीं हैं जो इसका उपयोग करना आसान बना देगा।
यह सब एक साथ रखकर, आपके द्वारा उपयोग किया जाने वाला पैकेज प्रबंधक उस पैकेज (या पैकेज) से शुरू होगा, जिसे आपने इसे स्थापित करने के लिए कहा है, और इसके लिए निर्भरताएँ देखेंगे, और फिर उन पैकेजों के लिए कोई निर्भरता, और इसी तरह। यह उन पैकेजों की भी जांच करेगा जो अनुरोध किए गए पैकेजों या उनकी निर्भरताओं को संघर्ष, तोड़ या प्रतिस्थापित करते हैं। एक बार जब यह खुश हो जाता है कि यह एक ऐसा तरीका है जो आपके मूल अनुरोध को संतुष्ट कर सकता है, तो यह इंस्टॉल के साथ आगे बढ़ेगा।
विभिन्न पैकेज प्रबंधकों के पास इस निर्भरता समाधान को करने के विभिन्न तरीके हैं । apt-get
, aptitude
और dselect
, उदाहरण के लिए, सभी अनिवार्य रूप से एक ही काम करते हैं लेकिन जिस तरह से वे अपने निर्णय को अलग करते हैं। आप ऐसा कर सकते हैं aptitude
और dselect
खुशी से आपको एक पैकेज स्थापित करने के तरीके के साथ पेश करेंगे जबकि apt-get
ऐसा नहीं कर सकते।
यदि आप डेबियन पैकेज के बारे में अधिक जानने में रुचि रखते हैं, तो डेबियन न्यू मेंटेनर्स गाइड पर एक नज़र डालें , जो डेब्स के कुछ हिम्मत से अधिक है।