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


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

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

समाधान को एकाधिक (एन) "सेटअप" के साथ काम / स्केल करना पड़ता है। एक और आभासी मशीन को apache2 के पुराने संस्करण की आवश्यकता हो सकती है।

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

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

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


188
2018-01-01 20:39


मूल




जवाब:


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

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

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

sudo apt-get install apache2=2.2.20-1ubuntu1

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

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

190
2018-01-01 20:57



कैसे पता चलेगा कि कौन से संस्करण उपलब्ध हैं? - Rodrigo Gurgel
@ रोड्रिगो गुर्जेल, "योग्यता संस्करण apache2" - user169015
@ user169015 "संस्करण मौजूद है"! = "संस्करण उबंटू के लिए पैक किया गया है और इसके साथ उपलब्ध है apt" - Kyle Strand
हाय केली, मुझे आपकी टिप्पणी नहीं मिली, हालांकि हां, पैकेज एपीटी का उपयोग करके भी स्थापित किया जा सकता है। मैं सिर्फ योग्यता के साथ चिपक जाता हूं क्योंकि मैं इसे लंबे समय से उपयोग कर रहा हूं ... :) - user169015
@ user169015 मुझे लगता है कि आप काइल की टिप्पणी के बिंदु को याद कर रहे हैं। नीचे psusi के जवाब पर एक नज़र डालें। स्पष्ट रूप से उबंटू एपीटी भंडार पैकेज के पुराने संस्करणों को होस्ट करना जारी नहीं रखता है! तो रनटाइम पैकेज मैनेजर (पीआईपी, मणि, मेवेन इत्यादि) के विपरीत, यदि आप पुराने, ज्ञात-अच्छी कॉन्फ़िगरेशन का पुनर्निर्माण करना चाहते हैं तो आप उबंटू एपीटी रिपॉजिटरीज़ पर भरोसा नहीं कर सकते हैं। मैं खुद को महसूस करने के लिए आश्चर्यचकित और निराश था। शायद आर्क इसे बेहतर संभालता है? ( askubuntu.com/questions/728439/... ) - algal


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

sudo apt-cache madison ^apache2

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

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

sudo apt-get install apache2=2.2\*

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

dpkg -l 'apache2*' | grep ^i

51
2018-04-01 12:44



इंगित करने के लिए बहुत बहुत धन्यवाद =2.2\* किसी भी उपलब्ध उपवर्तन का चयन करने के लिए वाइल्डकार्ड का उपयोग करने के तरीके के रूप में विकल्प। जो कुछ मैं जानना चाहता था, लेकिन मुझे नहीं पता था कि कैसे पूछना है :) - aexl
उपयोग कर रहे संस्करणों की सूची जब dpkg -l <packageName>, संस्करण संख्या कभी-कभी छंटनी होती है। इससे बचने के लिए, उपयोग करें COLUMNS=100 dpkg -l <packageName> - CJBS
यककिटी पर, पहला आदेश मुझे देता है: N: Unable to locate package ^apache2 - Jesse Glick
@ जेसेग्लिक रन sudo apt-get update प्रथम। सुनिश्चित करें कि आपके पास सही Apt स्रोत कॉन्फ़िगर किया गया है। - kenorb
N: $ sudo apt-get अद्यतन के बाद पैकेज ^ apache2 का पता लगाने में असमर्थ लेकिन sudo apt-get install apache2 = 2.2 * मेरे लिए काम करता है - Braian Mellor


मैं पहले के उत्तरों पर अन्य आसान संस्करण कमांड के साथ विस्तार करूँगा 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.

10
2017-07-15 17:25





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


8
2018-01-02 00:33



मुझे विकास उद्देश्यों के लिए पुराने वातावरण की सटीक प्रतियों को पुन: उत्पन्न करने की आवश्यकता है। क्या एक दर्पण स्थापित करना संभव है जो आवश्यक पैकेज तक पहुंचने के लिए पुराने पैकेज संस्करणों को हटा नहीं देता है या क्या मुझे एकाधिक रिपॉजिटरीज सेट करने की आवश्यकता है जो केवल diffs को पकड़ें? - ayckoster
@psusi: बिल्कुल उचित प्रतिक्रिया नहीं है, कई कारण हो सकते हैं। मेरे मामले में नए संस्करण में वास्तव में एक बग हो सकती है, और दोबारा जांच करने के लिए यह है कि पुराने संस्करण की आवश्यकता है। बस एक उदाहरण। - Cookie
@nomen, नहीं, यह एक एकल distro है जो करता है नहीं एक रोलिंग रिलीज मॉडल का उपयोग करें। यह सुनिश्चित करने के लिए बहुत सावधानी बरतनी है कि जब स्थिर रिलीज में महत्वपूर्ण बग और सुरक्षा भेद्यता तय की जाती है, तो वे रिग्रेशन का कारण नहीं बनते हैं, लेकिन यदि ऐसा होता है, तो रीग्रेशन-रिलीज के साथ टैग की गई एक बग रिपोर्ट दर्ज करें और इसे ठीक या लुढ़काया जाएगा वापस। - psusi
@nomen, अगर आप शब्दों के लिए अपना अर्थ बनाना चाहते हैं तो आपको दूसरों के साथ संवाद करने में कठिनाई होगी। दुनिया में हर किसी के लिए, यह एक रोलिंग रिलीज नहीं है, और रोलिंग रिलीज सटीक विपरीत है, और इस प्रकार, स्थिर रिलीज के साथ पारस्परिक रूप से अनन्य है। और अब जब मैं इसके बारे में सोचता हूं, रिलीज के साथ भेजा गया मूल संस्करण वास्तव में -रेली जेब में रखा जाता है, और अपडेट-अपडेट्स या -सुरिटी पॉकेट पर जाते हैं, इसलिए जब आप पिछले अपडेट पर वापस नहीं जा सकते हैं, तो आप मूल रूप से जारी संस्करण पर वापस जा सकते हैं। - psusi
@psusi: यहां आपके लिए एक और है। सभी मशीनों पर हमेशा एक ही संस्करण होने के लिए यूनिसन की आवश्यकता होती है। फिर भी 13.10 पर यह 12.04 एलटीएस की तुलना में एक अलग संस्करण है। तो अब क्या? इस तरह के एक प्रश्न पर आने पर, एक उत्तर प्राप्त करना जैसे आप ऐसा क्यों करना चाहते हैं वास्तव में अविश्वसनीय रूप से अनुपयोगी है और हर किसी के लिए समय बर्बाद है। - Cookie