Apt-get के साथ एक विशिष्ट पैकेज के लिए सभी निर्भरता को अनदेखा करें


16

यह एक बहुत ही विशिष्ट प्रश्न है जिसका उत्तर देने में Google ने मदद नहीं की।

मैं Ubuntu 13.04 चला रहा हूं apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56

मैं एक .deb पैकेज से एरलांग को स्थापित करना चाहता हूं, लेकिन मैं इसकी सभी निर्भरता को नहीं खींचना चाहता। पैकेज स्वयं निर्दिष्ट करता है कि यह जावा और wx पुस्तकालयों पर निर्भर करता है, लेकिन वास्तव में जब तक आप जावा या wxWidgets के साथ इंटरफ़ेस नहीं करना चाहते हैं, तब तक इनकी आवश्यकता नहीं है।

मैं इस तरह Erlang स्थापित कर सकते हैं

sudo dpkg -i --force-depends erlang.deb

हालाँकि, apt-getबाद में और कुछ भी स्थापित करना बिना किसी निर्भरता के विफल हो जाता है। इसलिए यदि मैं एरलांग के बाद गिट स्थापित करना चाहता हूं, तो मुझे निम्नलिखित मिलता है

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

क्या esl-erlangबिना चलने के पैकेज को बंद करने का एक तरीका है apt-get install -f?

मुझे कुछ इस तरह चाहिए:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

या इस तरह:

sudo apt-cache shut-package-up esl-erlang

या यह:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

मुझे एक समान प्रश्न मिला है: /server/250224/how-do-i-get-apt-get-to-ignore-some-d dependencies । कुछ उत्तरों के लिए कुछ पैकेजों की निर्भरता को संशोधित करने के लिए उपयोगी मैनुअल कदम प्रदान करते हैं।

मैं अभी भी एक मजबूत स्वचालित विधि की तलाश में हूं।


क्या आपने कोशिश की है --nodeps( apt-get) या --ignore-dependsसाथ dpkg?
माइक कोच

जवाबों:


27

मैं bjanssen की बात समझता हूं, लेकिन एक पैकेज मैनेजर के लिए --force-dependsएकल पैकेज स्थापित करने की अनुमति देना हास्यास्पद लगता है , लेकिन बल-निर्भर-हमेशा-और-स्टॉप-चेतावनी-मेरे-इस-निर्भरता के लिए अनुमति नहीं देता है।

मुझे एक पैकेज के साथ एक समान समस्या थी जो कि डेबियन में वर्तमान में उपलब्ध एक लिबासाइरो संस्करण पर निर्भर करती थी। मेरे उद्देश्यों के लिए यह अभी भी ठीक काम करता है। जब तक libcairo अद्यतन उपयुक्त में प्रकट नहीं होता है, तब तक मैं इसका उपयोग करते हुए खुश हूँ। मैं स्रोत से संकलन या अपना पैकेज नहीं बनाना चाहता।

मैंने जो समाधान पाया:

  • संपादित करें /var/lib/dpkg/status,
  • टूटी हुई निर्भरता के साथ पैकेज खोजें
  • Depends:शिकायत करने वाले पैकेज को रोकने के लिए लाइन को संपादित करें ।

मुझे लगता है कि अगली बार जब पैकेज को अपडेट किया जाएगा, तब इसे ओवरराइट कर दिया जाएगा, लेकिन यह वही है जो मैं चाहता हूं।


2
यह सही है, बस मुझे एक अस्थायी पीपीए निर्भरता को अस्थायी रूप से हल करने की आवश्यकता थी!
कैस

2

आप जो करने की कोशिश करते हैं, वह एक पैकेज मैनेजर के उद्देश्य के खिलाफ होता है, जो एक समझदार वातावरण रखने की कोशिश करता है, iow आप नौकरी के लिए गलत टूल का उपयोग कर रहे हैं। Apt-get को तोड़ने की कोशिश मत करो।

अपनी समस्या को हल करने का सही तरीका यह है कि आप अपनी निर्भरता के साथ अपने पैकेज का निर्माण करें। आधिकारिक तरीका है (काफी शामिल: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) और त्वरित और गंदे तरीके का उपयोग करना apt-build, या वितरण स्रोत में पैकेज के लिए, checkinstall। सभी उपज apt-get खुशी से स्थापित करेंगे।

अंतिम नोट पर, आप कुछ निर्भरताओं को शामिल करने के लिए esl-erlang के अनुचर की बुद्धिमत्ता पर सवाल उठा सकते हैं, लेकिन आप इच्छित व्यवहार के लिए पैकेज प्रबंधक को दोष नहीं दे सकते। यदि आपको लगता है कि ये निर्भरताएं गलत हैं, तो आपको पैकेज के साथ बग दर्ज करना चाहिए।


आपने "पैकेज मैनेजर के उद्देश्य" के बारे में जो कहा है वह मूल रूप से सही है, लेकिन आपको या तो सामान्य नहीं करना चाहिए। मैं एक उदाहरण देना चाहता हूं: एक आवेदन की जरूरत है libmng1। लेकिन मैंने libmng2स्थापित किया था और एक सिमलिंक सेट किया था libmng1.so। एक धमकी काम किया, कभी कोई समस्या नहीं थी। लेकिन apt-getहमेशा "असमत निर्भरता" के बारे में शिकायत की। इसलिए निश्चित रूप से एक अच्छा कारण है कि इस संबंध में उपयुक्तता को मौन करने का रास्ता खोजा जाए। के बाद से बातें कर काम करते हैं, यह सिर्फ चीजें हैं जो बस के लिए शिकायत रहती हैं कोई बात नहीं। यह सिर्फ उन समस्याओं को देखता है जहां वे नहीं हैं। और यह कष्टप्रद है।
वाक्यविन्यास

यह एक जिज्ञासु स्थिति है। मुझे लगता है कि आपने एक गैर-वितरण भंडार से एक पैकेज स्थापित किया है? इस तरह के एक मामले में equivs"साइलेंसिंग" के लिए एक नज़र डालें, इसे बिना तोड़े।
bjanssen

खैर, ऐसा हो सकता था। लेकिन वास्तव में यह नहीं था ... मैंने बस पुराने पैकेज को बहुत ही डिस्ट्रो से स्थापित किया था , इसलिए उबंटू के संदर्भ में मैं 15.x पर था, लेकिन मैंने 12.04 LTS से libmng1 स्थापित किया।
वाक्यविन्यास

0

जांचें, यदि "प्रॉक्सी का उपयोग किया गया" apt.confउचित है (यानी आपके नेटवर्क के अनुसार)। यह इस तरह के मुद्दों का कारण बनता है, चूंकि url अगम्य होगा।

आमतौर पर, यदि आप छद्म का उपयोग कर रहे हैं, तो आपका /etc/apt/apt.confऐसा दिखेगा:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.