किसी विशिष्ट पैकेज के अद्यतन को कैसे रोकें?


374

की वजह से बग # 693,758 मैं रोकना चाहते हैं apt-get upgrade"libgtk2.0-0" पैकेज को अपडेट करने से और अद्यतन प्रबंधक।

यह कैसे हासिल किया जा सकता है?


@hhlp: लेकिन यह सवाल एक ऐसे पैकेज के बारे में पूछ रहा है जो कभी स्थापित नहीं हुआ था।
नाथन उस्मान

1
@ जॉर्ज एडिसन - पैकेज होल्डिंग भी है, जो आपको पैकेज को अपडेट नहीं करने की अनुमति देता है। इसलिए पैकेज पकड़े जाने का मतलब है कि आप मौजूदा संस्करण को रखने के लिए पैकेज प्रबंधक को बता रहे हैं, इससे कोई फर्क नहीं पड़ता। यह उपयोगी है यदि अपडेट के बाद वर्तमान में काम कर रहे प्रोग्राम का अधिक हाल का संस्करण टूट जाता है। (आप ऐसा पैकेज नहीं रख सकते जिसे कभी स्थापित नहीं किया गया हो, यह भी देखें कि मेरा प्रश्न समान है) .... मैंने अभी परीक्षण किया है - देखें उसने कहाdisable packages from the auto-update
hhlp

जवाबों:


553

होल्डिंग

बैक पैकेज रखने के चार तरीके हैं: dpkg, apt, aptitude या dselect के साथ।

dpkg

पैकेज को होल्ड पर रखें:

echo "<package-name> hold" | sudo dpkg --set-selections

पकड़ निकालें:

echo "<package-name> install" | sudo dpkg --set-selections

अपने पैकेजों की स्थिति प्रदर्शित करें:

dpkg --get-selections

एकल पैकेज की स्थिति प्रदर्शित करें:

dpkg --get-selections | grep "<package-name>"

उपयुक्त

एक पैकेज पकड़ो:

sudo apt-mark hold <package-name>

पकड़ निकालें:

sudo apt-mark unhold <package-name>

होल्ड पर सभी पैकेज दिखाएं:

sudo apt-mark showhold

dselect

Dselect के साथ, [S] इलेक्ट स्क्रीन में प्रवेश करें, उस पैकेज को ढूंढें जिसे आप अपनी वर्तमान स्थिति में पकड़ना चाहते हैं =या दबाएं H। [S] चुनाव स्क्रीन से बाहर निकलने के तुरंत बाद बदलाव प्रभावी होंगे।


निम्नलिखित दृष्टिकोण उस लॉकिंग में सीमित हैं / एप्टीट्यूड या सिंटैप्टिक के भीतर एक पैकेज को होल्ड करना / apt-get / apt को प्रभावित नहीं करता है।

योग्यता

एक पैकेज पकड़ो:

sudo aptitude hold <package-name>

पकड़ निकालें:

sudo aptitude unhold <package-name>

सिनैप्टिक पैकेज मैनेजर के साथ लॉकिंग

पर जाएं Synaptic पैकेज प्रबंधक (सिस्टम> प्रशासन> Synaptic पैकेज प्रबंधक)।

सर्च बटन पर क्लिक करें और पैकेज का नाम टाइप करें।

जब आपको पैकेज मिल जाए, तो उसे चुनें और पैकेज मेनू पर जाएं और लॉक संस्करण का चयन करें ।

सिनैप्टिक मेनू

वह पैकेज अब अपडेट मैनेजर में नहीं दिखाया जाएगा और उसे अपडेट नहीं किया जाएगा।


4
यह एक पैकेज को स्थापित होने से रोकने के लिए भी काम करता है। स्थापित करते समय devscripts, बहुत सारे पैक को अनुशंसित पैकेज के रूप में खींचा जाता है। चूँकि मुझे मेलस्वर (पोस्टफ़िक्स) की आवश्यकता नहीं है, मैं दौड़ने echo postfix hold | sudo dpkg --set-selectionsसे पहले इसे चलाकर इसकी स्थापना को अक्षम कर सकता था sudo apt-get install devscripts। यह होल्ड एक्शन केवल इंस्टॉलेशन के लिए ही रहता है, इंस्टॉलेशन के बाद सेलेक्शन रिसेट हो जाते हैं।
लेकेन्स्टाइन

3
यह भी इंगित करने के लायक है, पैकेज होल्ड ब्रेक अपग्रेड और पैच कभी-कभी ऐसी स्थिति बना देता है जहां कोई कानूनी समाधान नहीं होता है जो कि निर्भरता की गणना कर सकता है। यदि पैकेज foo में == <या <= libbar पर निर्भरता है, तो apt, liboo के साथ-साथ foo को अपग्रेड करने से मना कर देगा। समय के साथ, ये कैस्केडिंग निर्भरताएँ बड़ी संख्या में अद्यतनों को अवरुद्ध करने के लिए बढ़ सकती हैं, जिसमें महत्वपूर्ण सुरक्षा अद्यतन भी शामिल हैं। आपको या तो होल्ड को हटाने और अपग्रेड होने देने की आवश्यकता होगी, या आपके द्वारा इसके निर्भर होने के नए संस्करणों के खिलाफ पकड़े गए पैकेज को फिर से बनाने की आवश्यकता होगी।
स्टेफनी

2
बस एक नोट: संस्करण 5.२.२५ (उबंटू apt-markhold
ल्युसिड

1
ग्राफिक्स ड्राइवरों को वापस रखने की कोशिश करते समय यह विशेष रूप से उपयोगी है। अति उपयोगकर्ताओं के लिए apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev,।
EarthmeLon

8
वर्तमान में सिनैप्टिक और एप्टीट्यूड केवल उन कार्यक्रमों के भीतर पैकेज को लॉक करते हैं। "पैकेज अपग्रेडेशन (और पढ़ें: अपडेट मैनेजर, एप्टीट्यूड, एप्टीट्यूड, आदि) जो भी हो, वह इसे नजरअंदाज करता है।" से इस सवाल का
होलोक्रोनविवर

44

पैकेज "फू" रखने के लिए:

echo "foo hold" | dpkg --set-selections

आपके मामले में हम शराब पर रोक लगाने जा रहे हैं:

sudo -i
echo "wine hold" | dpkg --set-selections

पकड़ को हटाने के लिए:

sudo -i
echo "wine install" | dpkg --set-selections

यह भी ध्यान दें कि जब कोई पैकेज होल्ड पर होता है, तो आप इसके माध्यम से एक विशिष्ट संस्करण स्थापित कर सकते हैंapt-get install wine=1.2.3 । होल्ड पर होने apt-get (dist-)upgradeसे इसे बदलने से रोकता है।
rcoup

@ आर्केड यदि आपके पास होल्ड पर पुराना संस्करण है, और फिर आप मैन्युअल रूप से वर्णन को हटाए बिना एक नए संस्करण में अपग्रेड करते हैं, तो क्या पुराने संस्करण को कैश में रखा जाएगा ताकि आप इसे वापस जा सकें?
cxrodgers

1
@ कैश को स्थानीय कैश (आमतौर पर /var/cache/apt/archives) होल्ड और अपग्रेड और सामान से स्वतंत्र रखता है, इसलिए आपके द्वारा डाउनलोड किए जाने वाले सभी संस्करण जब तक आपके पास नहीं होंगेapt-get [auto]clean
rcoup

35

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

पैकेज: compiz- प्लगइन्स-मुख्य
पिन: संस्करण 1: 0.9.7.0 ~ bzr19-0ubuntu10.1
पिन-प्राथमिकता: -1

यह / etc / apt / प्राथमिकताएँ फ़ाइल में जाता है।


9
अनिश्चित काल के अपडेट को रोकने की तुलना में यह एक बेहतर तरीका है
Eero Aaltonen

इस विधि के साथ, मुझे लगता है, ubuntu एक या एक जैसे अमेज़न आइकन को रोकने के लिए संभावनाएं बड़ी हैं, अगली रिलीज अपग्रेड के साथ पुनः इंस्टॉल होने से अमेज़ॅन आइकन ...
डैनियल एल्डर

19

synapticका उपयोग कर स्थापित करें sudo apt-get install synaptic

gksudo synapticखोज बॉक्स का उपयोग करके चलाएं और उस पैकेज का पता लगाएं, जिसे आप लॉक करना चाहते हैं, अर्थात:gedit

यहां छवि विवरण दर्ज करें

पैकेज मेनू से लॉक संस्करण का चयन करें :

यहां छवि विवरण दर्ज करें

और वह सब है, वर्तमान में लॉक के समय स्थापित संस्करण उन्नयन के दौरान भी स्थापित रहेगा।


7
कृपया देखें "लॉक संस्करण उतना चालाक नहीं है जितना लगता है। यह ऐसा करने वाला है जो इसे टिन पर कहता है, संस्करण को लॉक करें ... लेकिन यह केवल सिंटैप्टिक के भीतर इसे लॉक करता है। पैकेज अपग्रेड करने वाले अन्य कुछ भी (पढ़ें: अपडेट मैनेजर) , apt-get, aptitude, आदि) इसे नजरअंदाज करते हैं। यह शायद बुरा व्यवहार है इसलिए मैं उम्मीद करूंगा कि यह समय में तय हो जाएगा। " से askubuntu.com/questions/9607/what-does-lock-version-do । वर्तमान स्थिति क्या है? यदि कोई चीज़ सिनैप्टिक में बंद है, तो क्या अन्य पैकेज मैनेजर लॉक को "सम्मान" देंगे?

2
vasa1: संस्करण 0.75.13 के रूप में, अभी भी नहीं :( समान समस्या के साथ।
syockit

16

किसी पैकेज को स्थापित होने से रोकना "पैकेज होल्डिंग" कहलाता है और यह करना बहुत सरल है:

इको पैकेज_नाम होल्ड | dpkg --सेट-चयन

... जहाँ * package_name * उस संकुल का नाम है जिसे आप संस्थापन से रोकना चाहते हैं।

नोट: उपरोक्त कमांड रूट विशेषाधिकारों को मानता है। दूसरे शब्दों में, आपको sudo suइसे चलाने से पहले टाइप करना होगा।


बिल्कुल सही यही जवाब था। धन्यवाद।
asoundmove

s/sudo su/sudo -s/g(या sudo -i)। ( -iएक लॉगिन शेल -sदेगा , नहीं देगा)।
derobert

6

चूँकि कुछ समय apt-getकी जगह होती है apt, इसलिए उदाहरण के लिए मैं फ़ायरफ़ॉक्स को 56 से ऊपर के संस्करण में अपडेट होने से रोकना चाहता हूँ, क्योंकि बहुत सारे ऐड-ऑन, जैसे "टैब समूह" नए फ़ायरफ़ॉक्स 57 के साथ और अधिक काम नहीं करते (देखें "WebExtensions) अपडेट करें")।

एक कमांड के साथ एक से अधिक पैकेज पकड़ना और वाइल्डकार्ड का उपयोग करना संभव है।

फ़ायरफ़ॉक्स को अपडेट करने से रोकें

sudo apt-mark hold firefox firefox-locale-*

यदि आपको बाद में उन्हें रद्द करने के लिए तैयार रहना चाहिए, तो यह आदेश होगा:

sudo apt-mark unhold firefox firefox-locale-*

4

मुझे लगता है कि आप एक विशिष्ट पैकेज के संस्करण को फ्रीज कर सकते हैं मैं 100% सुनिश्चित नहीं हूं कि क्या यह उपयुक्त-संशोधन में संशोधन करेगा या नहीं, लेकिन यह निश्चित रूप से अपडेट मैनेजर को रोक देगा।

एक पैकेज को फ्रीज करने के लिए इसे सिनैप्टिक में चुनें फिर पैकेज मेनू खोलें और फ्रीज संस्करण का चयन करें।

उम्मीद है की यह मदद करेगा

संपादित करें: यह प्रश्न 16668 एक समान स्थिति से संबंधित है



3

बग देखें # 75332 , # 158981 और # 72806

सारांश यह है कि apt-get / aptitude स्तर पर पकड़ dpkg में होल्ड स्थिति को ट्रिगर नहीं कर रही है (विशेष रूप से बग 72806 देखें) और अद्यतन-प्रबंधक dpkg से स्थिति पढ़ता है।

वर्कअराउंड रूट के रूप में चलाया जाता है: echo "package hold" | dpkg --set-selections


2

आप इस तरह "विशिष्ट ओवरराइड" एप्टीट्यूड पर उपयोग कर सकते हैं:

aptitude reinstall ~i oracle-java8-jre:

यह केवल एक समय का उपयोग है (भविष्य के reinstalls के लिए संग्रहीत नहीं है), विशिष्ट ओवरराइड रखें, अपने सिस्टम के सभी पैकेजों को पुन: स्थापित करने के लिए, लेकिन oracle-java8-jre नहीं।

यदि आप एक विशेष ओवरराइड का उपयोग करते हैं, तो पैकेज पल-पल की स्थिति में रहेगा, इसे स्थापित करने का प्रयास नहीं किया जाएगा।

एक बहुत अच्छी बात अगर आपको लगता है कि आपके सिस्टम को कुछ कैसे समझौता किया गया था।


1

यदि आपके पास Synaptic स्थापित है, तो आप पैकेज का चयन कर सकते हैं और मेनू पैकेज का उपयोग कर सकते हैं -> अपडेट होने से रोकने के लिए संस्करण को लॉक करें।

आप Synaptic को sudo apt-get install synaptic के साथ स्थापित कर सकते हैं। मैं व्यक्तिगत रूप से इसे सॉफ्टवेयर सेंटर की तुलना में अधिक उपयोगी मानता हूं ... फिर, मैं काफी पुराना स्कूल हूं। :)


0

कभी-कभी कोई भी वर्तमान में स्थापित सभी पैकेजों को वापस पकड़ना चाहता है । ऐसे।

पहले वर्तमान स्थिति को सहेजें, ताकि आप पूर्ववत कर सकें:

dpkg --get-selections > current_selections.txt

फिर, सभी पैकेजों को वापस रखने के लिए:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

अंत में, जब आप पिछली स्थिति में वापस लौटना चाहते हैं:

dpkg --set-selections < current_selections.txt

इसके लिए एक उपयोग मामला तब हो सकता है जब QA से उत्पादन परिवेश में माइग्रेट करने के लिए VM या Amazon AMI स्नैपशॉट बनाते हैं।


0

Ubuntu 16.04 के सापेक्ष @ soger की टिप्पणियों में विवरण जोड़ना ।

Ubuntu 16.04 में डिफ़ॉल्ट रूप से एक मौजूदा / etc / apt / प्राथमिकताएं फ़ाइल नहीं हैं। यदि आपके पास वर्तमान में एक नहीं है, तो बस एक नई फ़ाइल बनाएं और इसे एक श्लोक के साथ पॉपुलेट करें जैसा कि @soger ऊपर दिए गए पैकेज और अपडेट से निर्भरता को बाहर करने के लिए ऊपर वर्णित करता है।

बाद में, चलाएँ apt updateऔर आप GTG हैं। : 0)

उदाहरण के लिए, मेरे पास एक Ubuntu 16.04.5 LTS सर्वर है जिसमें एम्बेडेड इंटेल वीडियो कार्ड और एक NVidia कार्ड है। NVidia कार्ड केवल एक ही उपयोग किया जाता है। सर्वर CUDA ड्राइवरों का भी उपयोग करता है। मुझे एक समस्या थी जहां aptजोर देते रहे

va-चालक-सब

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

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