कुछ निर्भरता को अनदेखा करने के लिए मैं कैसे प्राप्त करूं?


86

मैं कुछ निर्भरता को कैसे अनदेखा कर सकता हूँ? उदाहरण के लिए, मैं mailx स्थापित करना चाहता था, इसलिए मैं इसे क्रोन स्क्रिप्ट / रिपोर्ट-जनरेटिंग टूल से ईमेल भेजने के लिए उपयोग कर सकता हूं। हालाँकि, mailx स्थापित करने से भी exim4 और निर्भरता का एक पूरा गुच्छा स्थापित होता है (मेरे पास पहले से ही पोस्टफ़िक्स स्थापित है) मुझे वास्तव में ज़रूरत नहीं है और जो मुझे लगता है कि mailx भी बिना रह सकता है।

मैं कुछ निर्भरता को कैसे अनदेखा कर सकता हूँ, लेकिन फिर भी यह एक अच्छा उपकरण है, क्योंकि इसका उपयोग करें?


पोस्टफ़िक्स कैसे स्थापित किया जाता है? डेबियन पैकेज के माध्यम से? या आपने स्रोत से पोस्टफिक्स स्थापित किया है?
स्टू

हां, पोस्टफिक्स को स्रोत से स्थापित किया गया था
फ्रांसिस वी

3
डेबियन का केवल एक एक्सएक्स 4 पैकेज 'एक्सिम' की सिफारिश करता है, इसकी आवश्यकता नहीं है। यदि आप अनुशंसित पैकेज स्थापित नहीं करना चाहते हैं, तो बस APT::Install-Recommends "false";अपने में जोड़ें apt.conf
खंडहर

मुझे इस पर unix.stackexchange.com पर संतोषजनक उत्तर मिला; unix.stackexchange.com/a/404449/23542
artfulrobot

जवाबों:


45

सरल और आसान समाधान: बस -उनमें से प्रत्येक के बाद एक अतिरिक्त के साथ अवांछित पैकेज निर्दिष्ट करें।

-स्विच के बिना उदाहरण :

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

स्थापित करने से बचने के लिए स्विच का उपयोग करके उदाहरण exim4-base। सूचना -अंत में:

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

जैसा कि आप देख सकते हैं, पैकेज apt-getको स्थापित करने के लिए अब और कोशिश नहीं करता है exim4-base, और यह इसकी विभिन्न निर्भरता ( exim4-configआदि) को स्थापित करने का प्रयास नहीं करता है ।

और अगर आप गलत थे और उस exim4-baseनिर्भरता की आवश्यकता थी , तो आप apt-get installइसे बाद में कर सकते हैं !


5
किसी भी विशिष्ट निर्भरता को स्थापित करने से बचने का यह सबसे अच्छा तरीका है । अन्य उत्तर या तो सभी निर्भरताओं को स्थापित करने से बचते हैं, उनके स्थापित होने के बाद निर्भरता की स्थापना रद्द करें, या थकाऊ संपादन पैकेज का सुझाव दें।
नील

1
यह वही था जो मुझे चाहिए था! ( एक्स gnupg2pinentry-gtk2
डिप्स

यह वास्तव में बहुत अच्छा है, हालांकि, मेरे मामले में "unmet निर्भरता" (जिसे मैंने इस पद्धति का उपयोग करके निर्दिष्ट किया था) के साथ पैकेज स्थापित करने से इनकार कर दिया। विशेष रूप से एक 100 मेगाबाइट प्रलेखन पैकेज जिसकी मुझे परवाह नहीं है।
रॉल्फ

3
केवल वैकल्पिक निर्भरता के साथ काम करता है, आवश्यक लोगों के साथ नहीं। त्रुटि rmessage Depends: xxx but it is not going to be installed:। आप सभी वैकल्पिक पैकेजों को छोड़ सकते हैंapt-get install --no-install-recommends PACKAGE
koppor

वर्चुअल पैकेज के साथ भी काम नहीं करता है। लेकिन देखें unix.stackexchange.com/a/404449/23542
artfulrobot

55

आप इस तरह एक डेब्यू पैकेज की निर्भरता बदल सकते हैं:

  1. अनपैक डिबेट: ar x golden-linux.deb(यानी तीन फाइलें बनाएगा: डेबियन-बाइनरी कंट्रोल.tar.gz data.tar.gz)
  2. नियंत्रण संग्रह को अनपैक करें: tar xzf control.tar.gz(बनाएगा: पोस्टस्ट्रीम पोस्टम प्रिंस्ट प्रर्म md5sums नियंत्रण)
  3. में निर्भरता को ठीक करें control(एक पाठ संपादक का उपयोग करें)
  4. नियंत्रण को फिर से लिखें ।ar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. निरस्त बहस: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(महत्वपूर्ण आदेश! देखें [नोट])

[नोट]: dpkg किसी पैकेज के मेटाडेटा को जल्दी से नहीं पढ़ पाएगा अगर उसे यह पता लगाना था कि डेटा सेक्शन कहाँ समाप्त हुआ है!


2
अच्छा है, यह मेरे लिए निर्भरता के एक विशेष मामले को "रेयरिंग 8" से "रेयरिंग 6" तक हल करता है, लेकिन एक ही संस्करण = (बहुत बहुत धन्यवाद
फेलिप अल्केबियर

1
मेरी तरफ से भी धन्यवाद; मुझे इसका उपयोग करना पड़ा क्योंकि एक एप्लिकेशन की आवश्यकता होती है, libmng1.so.1भले ही यह पूरी तरह से एक सिमलिंक के साथ काम करता हो libmng1.so.2apt-getबस मज़ाक नहीं किया जा सकता है और मुझे unmet निर्भरता के बारे में परेशान कर रहा है (यहां तक ​​कि जब कुछ पूरी तरह से असंबंधित स्थापित हो!)। क्या बकवास अवधारणा का एक भार है।
वाक्यविन्यास

+1 यह मेरे लिए भी संपूर्ण है। पैकेज gnome-settings-daemonचाहता था, gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11लेकिन मेरे पास पहले से ही है gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<- समाप्ति पर ".2" देखें)। इस प्रक्रिया ने मुझे पैकेज को संपादित करने और नए 11.2 संस्करण का उपयोग करने के लिए मजबूर करने की अनुमति दी। धन्यवाद!
एरिक डंकन

1
महान समाधान, धन्यवाद। मैंने चरण 2 और 4 को थोड़ा संशोधित किया: 2. FILES=$(tar zxvf control.tar.gz)फ़ाइल सूची को एक चर में संग्रहीत करने के लिए। 4. tar zcf control.tar.gz $FILES- मूल फ़ाइल सूची (संशोधन के बाद) का उपयोग करके पाइप या पुनर्निर्देश के बिना एक ही चरण में संग्रह बनाएं।
ब्रेट

2
एक और युगल सुझाव। # 4 के लिए: --ignore-failed-readताकि tarकमांड लाइन के बाकी हिस्सों से लापता फ़ाइलों को अनदेखा कर दें। (उदाहरण के लिए, prerm, postrmकई पैकेज से अनुपस्थित रहे हैं।) इसके अलावा, tarballs हो सकता है .xzबजाय .gzडेबियन संग्रह प्रारूप (जैसे के नए संस्करण में data.tar.xz)।
डैन लेन्स्की

33

--ignore-depends विकल्प के साथ पैकेज को स्थापित करने के बाद , /var/lib/dpkg/statusफ़ाइल पर जाएं और संपादित करें , और जो भी निर्भरता आपको लगता है उसे हटाने की आवश्यकता नहीं है। बस बहुत सावधान रहना चाहिए। एक डिपो में। आवश्यक होने के लिए, यह बीई की आवश्यकता से अधिक है


3
अद्यतन करने के बाद /var/lib/dpkg/statusस्थापना को समाप्त करना आवश्यक है sudo apt-get -f install(पैकेज निर्दिष्ट करने की आवश्यकता नहीं है)।
ज़िकिएर ज़लेज़निकेंका

इसके अलावा यहां मिली: superuser.com/a/815371/127024
जोहान

यह मुझे ढोंगी देता है, लेकिन यह निर्दोष रूप से काम करता है!
डेविड श्मिट

25

आप --nodepsझंडे के साथ कोशिश कर सकते हैं apt-get
या पैकेज डाउनलोड करें और dpkgविकल्प के साथ इसे स्थापित करें --ignore-depends

उदाहरण के लिए, यदि आप fooबिना निर्भरता के पैकेज स्थापित करना चाहते हैं bar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb

52
आपके पास कौन सा APT संस्करण है? मेरा ( 0.8.10 ) के पास ऐसा कोई विकल्प नहीं है।
tshepang

8
डिपेंडेंसी को नजरअंदाज करने के लिए dpkg बताना उसके लिए कोई विकल्प नहीं है। यह केवल dpkg को THIS लेन-देन के लिए निर्भरता को अनदेखा करने के लिए कहता है, यह निर्भरता को संतुष्ट करने या अगली बार कुछ भी करने पर pacakge को हटाने का प्रयास करेगा।
स्टू

2
फिर भी APT 0.8.16 BTW के साथ कोई भाग्य नहीं। बहुत बुरा है क्योंकि वहाँ उचित विकल्प नहीं लगते हैं। इसे काम करने के लिए आपने 2011 में किस संस्करण का उपयोग किया था?
ईसाई

2
आप apt-get download और उसके बाद dpkg
Frederick Roth

7
--no-install-recommendsमेरे लिए काम किया।
ओलले हर्स्टेड्ट

14

चूंकि आपने स्रोत से पोस्टफ़िक्स स्थापित किया है, इसलिए आपको एक "डमी" पैकेज स्थापित करने की आवश्यकता है जो मेल-ट्रांसपोर्ट-एजेंट की निर्भरता (या bsd-mailx) के मेल को संतुष्ट करेगा। डेबियन में "इक्विविज़" पैकेज एक ऐसा डमी पैकेज बनाने के लिए मौजूद है जिसे आप dpkg को बताने के लिए स्थापित कर सकते हैं "यह निर्भरता संतुष्ट है"

केवल निर्भरता को नजरअंदाज करने के लिए dpkg को बताने का कारण एक अच्छा समाधान नहीं है, यह है कि आप केवल dpkg / apt को एक ही लेन-देन के लिए इसे अनदेखा करने के लिए कह रहे हैं, आप इसे हमेशा के लिए निर्भरता को अनदेखा करने के लिए नहीं कह सकते हैं। हर बार जब आप इसका उपयोग करते हैं तो यह सभी पैकेजों पर निर्भरता की जांच करता है


2
इस उत्तर को भी देखें कि एक ट्यूटोरियल के लिंक (हालांकि यह अत्यधिक जटिल है) superuser.com/a/416560/128960 । लघु संस्करण: चलाया जाता है equivs-control <name>, सही निर्भरता प्रदान करने के लिए उत्पादित फ़ाइल को संपादित करें और एक अच्छा नाम है, फिर चलाएं equivs-build <name>और अंत dpkg -iमें परिणामित .deb फ़ाइल।
ईसाई

1
IMHO यह वास्तव में सबसे अच्छा समाधान है। यहां अनुरोध किए गए अन्य सभी समाधान थोड़े बहुत हैकिश हैं। यह केवल एक बार किया जाना है और आप बाद में स्वयं संकलित सॉफ्टवेयर के आधार पर किसी भी सॉफ़्टवेयर को स्थापित कर सकते हैं ... तो चलिए इस उत्तर को बढ़ाते हैं!
रग

7

मैं इस विकल्प को खोज रहा हूँ एक Ubuntu 12.04 सर्वर पर चल रहा है जो कि Xen है। अपने डोमेन में मैं -virtual कर्नेल का उपयोग करता हूं, और apt लगातार हर कर्नेल पैकेज अपग्रेड के साथ ग्रब स्थापित करने का प्रयास करता है। ग्रब हालांकि पी [युवी] ग्रब का उपयोग करते समय डोम के अंदर की आवश्यकता नहीं होती है।

मैं apt-get साथ -nodeps विकल्प की तलाश कर रहा हूं, लेकिन यह काम नहीं कर रहा है, इसलिए प्रत्येक कर्नेल अपग्रेड के बाद अनइंस्टॉलिंग / प्यूरिंग * की स्थापना समाप्त कर दी।

सब के बाद, वास्तव में एक आदमी पृष्ठ पढ़ने से कभी-कभी मदद मिलती है - यह 12.04 पर एक समान एप-गेट विकल्प निकलता है - ऐसा प्रतीत होता है कि -नो-इंस्टॉल-अनुशंसाएं, जो वास्तव में इस मामले में काम करती हैं, क्योंकि ग्रब को 'अनुशंसित' के रूप में सूचीबद्ध किया गया है। पैकेज की जानकारी (मुझे लगता है कि यह "वास्तविक" निर्भरता नहीं है?)।

मैं इसे यहाँ जोड़ रहा हूँ क्योंकि मेरे मामले में यह एक समान समस्या को हल करता है, और '- कोई-इंस्टॉल-अनुशंसाएँ' के लिए संकेत अभी तक उल्लेख नहीं किया गया है।


6

आप apt-get के साथ पैकेज को डाउनलोड कर सकते हैं और फिर इसे dpkg के साथ इंस्टॉल कर सकते हैं, मैन्युअल रूप से उस निर्भरता को सूचीबद्ध करते हैं जिसे आप अनदेखा करना चाहते हैं।

उदाहरण के लिए अगर मैं mypackage डाउनलोड करना चाहता हूं, लेकिन यह libperl5.14 पर निर्भर करता है और मैं libperl5.14 को स्थापित नहीं करना चाहता हूं क्योंकि मेरे पास एक अलग संस्करण है जो मैं इस निर्भरता को इस प्रकार अनदेखा कर सकता हूं:

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb

बस यह उल्लेख करने के लिए कि यह आपको "टूटा हुआ" छोड़ देगा। यह आपको अन्य पैकेजों को स्थापित करने की अनुमति नहीं देगा, जब तक आप लापता निर्भरता को ठीक नहीं करते हैं।
ड्रिपिगो

6

निर्भरता को मैन्युअल रूप से ट्विक करने का एक वैकल्पिक तरीका है:

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb

2

मेरे डेबियन सिस्टम पर, bsd-mailx वास्तव में निर्भर करता है default-mta | mail-transport-agent(आप जांच सकते हैं apt-cache show <pkg>कि संग्रह में किसी भी चीज़ के लिए या dpkg -s <pkg>स्थापित पैकेज के लिए पैकेज क्या निर्भर करता है।

यह हो सकता है कि आपके पोस्टफ़िक्स पैकेज में Provides: mail-transport-agentइतना उपयुक्त न हो कि आपको एमटीए स्थापित करने का एहसास न हो। यह एक बग दर्ज करने के लायक होगा अगर यह एक आधिकारिक पैकेज है।


1

इस के प्रयोजनों के लिए, आप सिर्फ नाखून स्थापित कर सकते हैं जो मुझे नहीं लगता कि इन पर निर्भरता है?

apt-get install nail

-5

अच्छा - नहीं।

किसी भी सफलता के लिए सड़क पर अन्य लोगों के काम का उपयोग करना बहुत महत्वपूर्ण है। जब आप स्रोत (तारबॉल) से कुछ सॉफ्टवेयर बनाते हैं, तो आप डिस्ट्रो के पैकेज मैनेजर के काम का उपयोग करने का अवसर चूक जाते हैं।

आपको "निःशुल्क" अपडेट नहीं मिलेगा। अधिकांश समय कोई भी कभी भी उन पैकेजों को अपडेट नहीं करता है जो वे स्रोत से स्थापित करते हैं। क्योंकि उन्हें नए संस्करणों के लिए सॉफ़्टवेयर को ट्रैक करने की आवश्यकता है, इसे और सभी आश्रित कार्यक्रमों (उन्हें याद करने की कोशिश करें) का पुनर्निर्माण करें।

आपको अपने वितरण के रेपो से अन्य पैकेजों के साथ समस्या होगी। यह वास्तव में सवाल में कहा गया मामला है: ubuntu के पास एक महान पैकेज प्रबंधक है और कुछ बहुत अच्छे लोग पैकेजों को बनाए रखते हैं। और उन्होंने फैसला किया है, कि मेलक्स प्रोग्राम के लिए आपको एमटीए की आवश्यकता है। यदि आप स्रोतों से पोस्टफ़िक्स स्थापित करते हैं तो ubuntu आपको एक्ज़िम स्थापित करने के लिए नहीं कहेगा।

यदि किसी कारण से सर्वर का रख-रखाव किसी अन्य व्यक्ति के पास हो जाता है (जैसे कि आपका प्रोजेक्ट बहुत सफल हो जाता है और आप किसी अन्य व्यक्ति को सर्वरों के प्रबंधक के लिए नियुक्त करने का निर्णय लेते हैं जब आप अन्य सामान के साथ व्यस्त होते हैं) तो वह स्वाभाविक रूप से dpkg --get-selectionsसभी को पाने के लिए दौड़ने की उम्मीद करेगा स्थापित पैकेज।

डिस्ट्रो के पैकेज प्रबंधन सॉफ़्टवेयर का यथासंभव उपयोग करने का प्रयास करें। यदि आप एक प्रीबिल्ट नहीं ढूंढ सकते हैं तो अपने खुद के पैकेज बनाना सीखें और आप एक बेहतर पेशेवर बन जाएंगे।

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