सटीक संस्करण के साथ विशिष्ट उबंटू पैकेज कैसे स्थापित करें?


224

मैं कुछ निर्दिष्ट पैकेज (नाम और संस्करण) के साथ एक नई वर्चुअल मशीन सेटअप करना चाहता हूं, जो प्रदान की जाती हैं।

2.2.20-1ubuntu1सभी निर्भरताओं के साथ संस्करण में उदाहरण के लिए अपाचे 2 । यहां तक ​​कि अगर सर्वर पर इस पैकेज का एक नया संस्करण है, तो इसे स्थापित किया जाना चाहिए।

समाधान को कई (एन) "सेटअप" के साथ काम / स्केल करना होगा। एक अन्य वर्चुअल मशीन को Apache2 के पुराने संस्करण की आवश्यकता हो सकती है।

मुझे वर्तमान में कुछ संभावनाओं के बारे में पता है जो सटीक पैकेज स्थापित करते हैं, लेकिन यह अच्छा नहीं है:

  1. *.debमैन्युअल रूप से प्रत्येक वर्चुअल मशीन के लिए आवश्यक सभी कॉपी करें और दर्ज करें: dpkg -i... -> काम कर सकता है, लेकिन यह बहुत त्रुटि वाला है। (मैनुअल स्क्रिप्ट आदि)
  2. प्रत्येक सेटअप के लिए एक नया Ubuntu रिपॉजिटरी बनाएं और उपयोग करें। -> काम नहीं करता है क्योंकि मुझे n रिपॉजिटरी की आवश्यकता होगी।
  3. मशीन को एक बार सेटअप करें और VM को कॉपी करें / एक स्नैपशॉट बनाएँ। -> काम नहीं करता है क्योंकि मुझे n VMs स्टोर करने की आवश्यकता होगी।

मेरी समस्या को पैच प्रबंधन के रूप में लेबल किया जा सकता है, लेकिन मैं अपने पैकेज को वर्तमान संस्करण में अपडेट नहीं करना चाहता। मेरा लक्ष्य पुराने पैकेजों को स्थापित करना है।

जवाबों:


227

आप apt-getपैकेज के एक विशिष्ट संस्करण को स्थापित करने के लिए उपयोग कर सकते हैं जब तक कि यह एक संग्रह में होता है जो उपयुक्त के बारे में जानता है। से apt-getमैनपेज:

एक पैकेज के एक विशिष्ट संस्करण को इंस्टॉलेशन के लिए पैकेज के नाम के साथ बराबर और पैकेज के संस्करण का चयन करके इंस्टॉलेशन के लिए चुना जा सकता है। यह उस संस्करण को स्थापित करने के लिए स्थित और चयनित होने का कारण बनेगा। वैकल्पिक रूप से एक स्लैश के साथ पैकेज के नाम और वितरण के संस्करण या आर्काइव नाम (स्थिर, स्थिर, अस्थिर) का पालन करके एक विशिष्ट वितरण का चयन किया जा सकता है।

उदाहरण के लिए, आप कर सकते हैं:

sudo apt-get install apache2=2.2.20-1ubuntu1

ध्यान दें कि आपको इस मामले में अपने आप पर कुछ निर्भरता समाधान करने की आवश्यकता हो सकती है, लेकिन अगर कोई समस्या है, तो apt-get आपको बताएगी कि उनके कारण क्या है। मेरे ११.१० प्रणाली पर मुझे यह काम करने के लिए निम्नलिखित करने की आवश्यकता होगी:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

46
कैसे पता करें कि कौन से संस्करण उपलब्ध हैं?
रॉड्रिगो गुरगेल

12
@ रोड्रिगो गुर्गेल, "एप्टीट्यूड वर्जन
अपाचे

3
@ user169015 "संस्करण मौजूद है!" = "संस्करण उबंटू के लिए पैक किया गया है और apt"
काइल स्ट्रैंड

हाय काइल, मुझे आपकी टिप्पणी नहीं मिली, हालाँकि हां, उपयुक्त रूप से भी पैकेज का उपयोग किया जा सकता है। मैं सिर्फ इसलिए एप्टीट्यूड पर
टिक जाता

6
@ user169015 मुझे लगता है कि आपको काइल की टिप्पणी की बात याद आ रही है। नीचे दिए गए Psusi के उत्तर पर एक नज़र डालें। जाहिरा तौर पर उबंटू APT रिपॉजिटरी पैकेज के पुराने संस्करणों की मेजबानी करना जारी नहीं रखता है! तो रनटाइम पैकेज प्रबंधकों (पाइप, मणि, मावेन, आदि) के साथ विपरीत, आप उबंटू एपीटी रिपॉजिटरी पर भरोसा नहीं कर सकते हैं यदि आप एक पुराने, ज्ञात-अच्छे कॉन्फ़िगरेशन को फिर से बनाना चाहते हैं। मैं खुद इस बात को महसूस करने के लिए हैरान और निराश था। शायद आर्क इसे बेहतर तरीके से संभालता है? ( askubuntu.com/questions/728439/… )
algal

66

यह जाँचने के लिए कि कौन से संस्करण उपलब्ध हैं, आप निम्न के माध्यम से देख सकते हैं:

sudo apt-cache madison ^apache2

यदि काम नहीं करेगा, sudo apt-get updateतो पैकेज सूची को अपडेट करने से पहले विचार करें।

फिर संस्करण की प्रतिलिपि बनाएँ या निम्न सिंटैक्स का उपयोग करें:

sudo apt-get install apache2=2.2\*

यह जाँचने के लिए कि आपने कौन सा संस्करण स्थापित किया है, चलाएँ:

dpkg -l 'apache2*' | grep ^i

5
=2.2\*किसी भी उपलब्ध तोड़फोड़ का चयन करने के लिए वाइल्डकार्ड का उपयोग करने के तरीके के रूप में विकल्प को इंगित करने के लिए बहुत धन्यवाद । Thats जो मैं जानना चाहता था, लेकिन पता नहीं था कि कैसे पूछें :)
aexl

3
उपयोग करने वाले संस्करणों को सूचीबद्ध करते समय dpkg -l <packageName>, संस्करण संख्या कभी-कभी काट दी जाती है। इससे बचने के लिए, उपयोग करेंCOLUMNS=100 dpkg -l <packageName>
CJBS

यक्किती पर, पहला आदेश मुझे देता है:N: Unable to locate package ^apache2
जेसी ग्लेक

@ जेसेग्लिक रन sudo apt-get updateपहले। सुनिश्चित करें कि आपने सही Apt स्रोतों को कॉन्फ़िगर किया है।
केनोरब

1
N: के बाद पैकेज ^ apache2 पता लगाने में असमर्थ $ sudo apt-get अद्यतन लेकिन sudo apt-get apache2 = 2.2 * मेरे लिए काम करता स्थापित
Braian मेलर

17

मैं aptपरिवार में अन्य आसान संस्करण कमांड के साथ पहले के उत्तर पर विस्तार करूंगा । यह देखने के लिए कि कौन से संस्करण उपलब्ध हैं, चलाएँ apt-cache policy:

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

फिर, जैसा कि कहीं और उल्लेख किया गया है, एक विशिष्ट संस्करण स्थापित करें apt-get:

# apt-get install apache2=2.4.7-1ubuntu4.5
...

अब आप apt-cache policyफिर से चलाकर देख सकते हैं कि आपने कौन सा संस्करण स्थापित किया है :

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

यदि आप अपडेट पर नए संस्करण स्थापित नहीं करना चाहते हैं, तो पैकेज को इसके साथ पिन करें apt-mark:

# apt-mark hold apache2
apache2 set on hold.

मान लीजिए कि Apache2 का एक नया संस्करण पैकेज इंडेक्स में जोड़ा गया है और आपकी मशीन सिंक की गई है apt-get update। जब आप अगली बार देखेंगे तो आप इसे देखेंगे apt-get upgrade:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

6

व्यावहारिक रूप से, यह संभव नहीं है क्योंकि पुराने संस्करणों को संग्रह में नहीं रखा जाता है, इसलिए जब तक आपके पास पुराने संस्करण की एक प्रति नहीं होती है, तब तक आप इसे स्थापित नहीं कर सकते। आपको खुद से पूछना चाहिए कि आप पहले संस्करण में एक पुराना संस्करण क्यों स्थापित करना चाहते हैं। एक स्थिर रिलीज़ पर, एक नए संस्करण के रिलीज़ होने का मुख्य कारण सुरक्षा भेद्यता को सही करना है, और आप एक कमजोर सर्वर नहीं चलाना चाहते हैं?


25
मुझे विकास के उद्देश्यों के लिए पुराने वातावरण की सटीक प्रतियों को पुन: प्रस्तुत करने की आवश्यकता है। क्या एक दर्पण को सेटअप करना संभव है जो आवश्यक पैकेज तक पहुंचने के लिए पुराने पैकेज संस्करणों को नहीं हटाता है या क्या मुझे कई रिपॉजिटरी सेटअप करने की आवश्यकता है जो केवल अलग-अलग हैं?
अय्यकोस्टर १४

19
@ अपुस्सी: बिल्कुल सही प्रतिक्रिया नहीं, इसके कई कारण हो सकते हैं। मेरे मामले में नए संस्करण में वास्तव में एक बग हो सकता है, और यह जांचने के लिए कि पुराने संस्करण की आवश्यकता है या नहीं। बस एक उदाहरण है।
कुकी

2
@ नोमान, नहीं, यह एक एकल डिस्ट्रो है जो रोलिंग रिलीज मॉडल का उपयोग नहीं करता है । यह सुनिश्चित करने के लिए बहुत सावधानी बरती जाती है कि जब स्थिर रिलीज में महत्वपूर्ण कीड़े और सुरक्षा कमजोरियां तय हो जाएं, ताकि वे regressions का कारण न बनें, लेकिन अगर ऐसा होता है, तो प्रतिगमन-रिलीज़ के साथ टैग की गई एक बग रिपोर्ट दर्ज करें और इसे ठीक किया जाएगा या रोल किया जाएगा वापस।
Psusi

5
@ महिलाओं, यदि आप शब्दों के लिए अपना मतलब बनाना चाहते हैं तो आपके पास दूसरों के साथ संवाद करने में कठिन समय होगा। दुनिया में हर किसी के लिए, यह नहीं है कि एक रोलिंग रिलीज क्या है, और रोलिंग रिलीज सटीक विपरीत है, और इस प्रकार, स्थिर रिलीज के साथ पारस्परिक रूप से अनन्य है। और अब जब मैं इसके बारे में सोचता हूं, तो रिलीज के साथ भेज दिया गया मूल संस्करण वास्तव में -release पॉकेट में रखा गया है, और अपडेट -updates या -security पॉकेट में जाते हैं, इसलिए जब आप पिछले अपडेट पर वापस नहीं जा सकते हैं, तो आप मूल रूप से जारी किए गए संस्करण पर वापस जा सकते हैं।
psusi

5
@psusi: यहाँ आपके लिए एक और एक है। सभी मशीनों पर हमेशा समान संस्करण होना आवश्यक है। फिर भी 13.10 पर यह 12.04 एलटीएस की तुलना में एक अलग संस्करण है। तो अब क्या? जब इस तरह का प्रश्न आता है, तो इस तरह का उत्तर प्राप्त करना कि आप ऐसा क्यों करना चाहते हैं, वास्तव में अविश्वसनीय रूप से अप्रभावी है और सभी के लिए समय की बर्बादी है।
कुकी

2

जैसा कि psusi बताते हैं, पुराने संस्करणों को ubuntu रिपॉजिटरी में नहीं रखा गया है, लेकिन जाहिर है आप अभी भी लॉन्चपैड पर उन्हें पा सकते हैं। तो, आप (अपने ubuntu संस्करण और वास्तुकला के साथ भरोसेमंद और amd64 बदलें):

https://launchpad.net/ubuntu/trusty/amd64/apache2

और इच्छित संस्करण का चयन करें। तब आप डिबेट को एक फ़ाइल के रूप में डाउनलोड करते हैं और इसके साथ इंस्टॉल करते हैं:

dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb

फिर, फ़ाइल नाम को अपनी फ़ाइल में बदलें। यदि आप बहुत सारे पैकेज को डाउनग्रेड करना चाहते हैं तो यह थकाऊ हो जाता है, लेकिन अगर आप हताश हैं तो यह कुछ भी नहीं से बेहतर है।

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