पैकेज रिपॉजिटरी में डेबियन पैकेज के पिछले संस्करण क्यों गायब हो जाते हैं? (संस्करण-नियंत्रित प्रणाली विन्यास के लिए अत्यधिक प्रासंगिक)


38

परिदृश्य: कठपुतली, बावर्ची आदि पर आधारित संस्करण नियंत्रित प्रणाली विन्यास में, एक निश्चित सिस्टम स्थिति को पुन: पेश करना आवश्यक है। यह सिस्टम पैकेज संस्करणों को स्पष्ट रूप से निर्दिष्ट करके किया जाता है।

हाल ही में हम एक समस्या में भाग गए जहां कुछ पैकेज संस्करण डेबियन रिपॉजिटरी में गायब थे। एक उदाहरण: "पैच" पैकेज को 2.7.5-1 + deb9u1 संस्करण में आवश्यक था, लेकिन केवल 2.7.5-1 + deb9u2 उपलब्ध था। एक और, और भी गंभीर उदाहरण: "linux-headers-4.9.0-9-common" की आवश्यकता है (संबंधित कर्नेल स्थापित होने के कारण) और केवल "linux-headers-4.9.0-11-common" उपलब्ध है।

इससे सिस्टम की एक निश्चित स्थिति को पुन: पेश करना असंभव हो जाता है।

उपरोक्त पैकेज सिर्फ उदाहरण हैं (जो मैंने वास्तव में सामना किया है)। मुझे सामान्य समस्या को समझने और हल करने में दिलचस्पी है।

इन अपडेट के पीछे क्या विचार है, 'लुप्त' पैकेज और पैकेज संस्करण?

मुझे डेबियन पैकेज के पिछले संस्करण (वास्तव में पुराने संस्करण नहीं हैं, लेकिन कुछ सप्ताह पुराने हैं) कहां मिल सकते हैं? सामान्य तरीके से स्थापना प्रक्रिया को स्वचालित करना संभव होना चाहिए।


1
कुछ हद तक रिपॉजिटरी को कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले सॉफ़्टवेयर पर निर्भर करता है। रिप्रप्रो, आईरेक, प्रत्येक पैकेज के एक ही संस्करण की अनुमति देता है
मुरु

2
stableसुसंगत रहता है, कम से कम अगले बिंदु जारी होने तक। स्थिर-अद्यतन, परीक्षण और अस्थिर में केवल किसी भी दिए गए पैकेज का नवीनतम संस्करण है। कुछ और, आप पर देखने के लिए होगा के लिए archive.debian.org (या snapshot.debian.org के रूप में एस के जवाब में बताया गया)
कैस

5
क्या कोई कारण है कि आप अपना स्वयं का रेपो नहीं चला रहे हैं, जिस पर आप प्रतिस्थापन नीति और पिन संस्करणों को नियंत्रित कर सकते हैं (जिसमें भविष्य में स्वचालित इंस्टॉल करने का लाभ स्थानीय होगा)?
एरिक टॉवर्स

2
नया linuxpkg नाम एक अपवाद है: सामान्य तौर पर, डेबियन स्थिर के पैकेज एक ही पैकेज के नाम से जाते हैं और केवल संस्करण संख्या बदलते हैं। linux-image-amd64कभी भी नाम नहीं बदलता है और हमेशा नवीनतम पर निर्भर करता है linux-image-4.9.0-*। नया linux-image-4.9.0-*pkg नाम कुछ बगफिक्स को वापस लाने के लिए आवश्यक असंगत कर्नेल ABI परिवर्तनों को चिह्नित करता है और कस्टम निर्मित मॉड्यूल (dkms, आदि) के आवश्यक पुनर्संयोजन से निपटने के लिए अनुमति देता है। इसी तरह के लिए linux-headers-*
इग्निस

1
इन अद्यतनों के पीछे क्या विचार है apt-get changelog packagename
इग्निस

जवाबों:


64

सटीक संस्करण के नीचे, एक विशिष्ट सेटअप को पुन: पेश करने में सक्षम होने के नाते, आपकी आवश्यकता है, डेबियन की नहीं।

डेबियन केवल किसी भी रिलीज़ में प्रत्येक बाइनरी पैकेज के एकल संस्करण का समर्थन करता है; उस का प्रतिपक्ष यह है कि किसी भी रिलीज में उस पैकेज के अपडेट को सुनिश्चित करने के लिए बहुत सावधानी बरती जाती है, और जब इस तथ्य को दस्तावेज करने के लिए ऐसी देखभाल संभव नहीं होती है, तो इस तरह की देखभाल संभव नहीं है। दिए गए पैकेज के कई संस्करणों को रखने से केवल समर्थन बोझ और परीक्षण आवश्यकताओं में वृद्धि होगी: उदाहरण के लिए, पैकेज अनुरक्षकों को केवल वर्तमान में समर्थित संस्करणों के बजाय, उनके द्वारा उपयोग किए जाने वाले पुस्तकालयों के सभी उपलब्ध संस्करणों के खिलाफ अद्यतन पैकेजों का परीक्षण करना होगा ... संकुल केवल एक स्थिर रिलीज में अद्यतन किया जाता है जब वास्तव में आवश्यक हो, अर्थातएक गंभीर बग (सुरक्षा मुद्दों सहित) को ठीक करने के लिए। कर्नेल के मामले में, इसका मतलब कभी-कभी यह होता है कि कर्नेल एबीआई बदल जाता है, और इसके परिणामस्वरूप पैकेज नाम बदल जाता है (निर्भर पैकेजों के पुनर्निर्माण के लिए मजबूर करने के लिए); वहाँ मेटा-संकुल जो आप हार्ड-कोड ABI (के बजाय में खींच सकते हैं कर रहे हैं linux-image-amd64, linux-headers-amd64, आदि)।

लेकिन वहाँ अपनी स्थिति के लिए एक समाधान नहीं है: हर प्रकाशित स्रोत और बाइनरी पैकेज पर संग्रहीत है snapshot.debian.org । जब आप एक संस्करण सेटअप बनाते हैं, तो आप संबंधित स्नैपशॉट चुन सकते हैं (उदाहरण के लिए, सितंबर 2019 स्नैपशॉट में से एक ) और अपने रिपॉजिटरी URL के रूप में उपयोग करें:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

यदि आप इस पर भरोसा करते हैं, तो कृपया किसी प्रकार के कैशिंग दर्पण का उपयोग करें, उदाहरण के लिए Apt-Cacher NG । यह न केवल स्नैपशॉट सर्वर पर लोड को कम करेगा, यह सुनिश्चित करेगा कि आपके पास आवश्यक सभी पैकेजों की एक स्थानीय प्रतिलिपि है।

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


ध्यान दें कि कभी-कभी कुछ पूर्व संस्करण उपलब्ध होते हैं - apt-cache madison packagenameवे सभी संस्करण दिखाएंगे जो aptकॉन्फ़िगर किए गए रिपॉजिटरी के माध्यम से देख सकते हैं।
ivanivan

5
(कृपया पास के दर्पण के बजाय अनावश्यक रूप से स्नैपशॉट / संग्रह सर्वरों का उपयोग न करें, इसलिए अपने स्रोतों में अपने सामान्य दर्पण को छोड़ दें। स्नैपशॉट की तुलना में उच्च प्राथमिकता के साथ सूचीबद्ध करें, इसलिए अभी भी उपलब्ध पैकेजों से इसे प्राप्त किया जा सकता है। ।)
पीटर कॉर्ड्स

3
बस यह सत्यापित करने के लिए कि मैं सही तरीके से समझ गया हूं: व्यवहार में, यह उन संस्करणों के बारे में नहीं है जिन्हें मैं पैकेज स्थापित करते समय निर्दिष्ट करता हूं (क्योंकि पुराने संस्करण उपलब्ध नहीं हो सकते हैं), बल्कि पैकेज रिपॉजिटरी (ies) के राज्य का उपयोग कर रहा हूं। इसलिए, अगर मुझे 'ताजा' डेबियन 9.8 चाहिए, तो मुझे उसी राज्य में पैकेज रिपॉजिटरी की जरूरत है (उदाहरण के लिए एक स्नैपशॉट या एक रिपॉजिटरी जिसे मैंने खुद बनाया है), और फिर, निश्चित रूप से, सही लिनक्स-हेडर- * पैकेज उपलब्ध रहता है । अगर मैं डेबियन 9.9 में माइग्रेट करना चाहता हूं, तो मुझे संबंधित राज्य के लिए पैकेज रिपॉजिटरी मिलती है और एप्ट-गेट डिस्ट-अपग्रेड मिलता है। क्या ये सही है?
फ्लोट

2
हाँ, यह सही है।
स्टीफन किट

3
@ पूर्ण नोट, वह बिंदु रिलीज़ (जैसे कि डेबियन X.9, या X.8) केवल डाउनलोड करने योग्य आइसो के लिए हैं, इसलिए नए इंस्टॉलेशन टन के पैकेज डाउनलोड नहीं करते हैं। रिपॉजिटरी में, किसी भी बिंदु के रिलीज के बीच कोई अंतर नहीं है, आपको हमेशा नवीनतम पैकेज मिलता है।
ब्रिअम

15

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

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

भंडार प्रबंधन उपकरण उपयुक्त रूप से रिपॉजिटरी के दर्पण बनाने में सक्षम है। आप संकुल को दर्पण में चुन सकते हैं, एक विशिष्ट बिंदु पर रिपॉजिटरी सामग्री के स्नैपशॉट बना सकते हैं और कई दर्पण या स्नैपशॉट को एक रिपॉजिटरी में जोड़ सकते हैं। इस तरह से आप सक्षम सिस्टम राज्यों को पूरी तरह से पुन: पेश कर सकते हैं।


8

जबकि स्टीफन किट का जवाब निश्चित रूप से एक संभव समाधान है, मुझे लगता है कि आपके लिए आवश्यक पैकेजों की अपनी प्रतियां रखना सुरक्षित होगा।

सिस्टम सेटअप रिकॉर्ड करते समय, .deb-files की प्रतियों को सहेजना सुनिश्चित करें /var/cache/apt/archives/। आप भी इस्तेमाल कर सकते हैं apt-get download

सिस्टम सेटअप को पुनर्स्थापित करते समय, आपको aptसंभावित खतरनाक स्वचालित क्रियाओं को चालू करने से बचने के लिए बहुत सख्त होना चाहिए ।

संभवत: यह dpkgस्थापित करने के लिए सीधे उपयोग करना आसान होगा कि आप क्या चाहते हैं।


6
एक बेहतर दृष्टिकोण IMO एक स्थानीय APT कैश का उपयोग करना होगा। यह आपके तीसरे पैराग्राफ में आने वाली समस्याओं से बचा जाता है, और फसल काटने से भी बचता है /var/cache/apt
स्टीफन किट

3
इसके दो वैरिएंट्स हैं - एक है पूरे रिपो को क्लोन करने के लिए एप्ट-मिरर जैसी किसी चीज का इस्तेमाल करना, दूसरा है सिर्फ स्पेसिफिक पैकेज और डिपेंडेंसी डाउनलोड करना । फिर dir को स्नैपशॉट करें - जैसे btrfs के साथ pkgs-20190501, फिर स्नैपशॉट dir को रेपो के रूप में प्रकाशित करें। बिल्ड समय में, वर्त्तमान रेपो url (जैसे http://debmirror/pkgs-20190501/...) को source.list में डालें, फिर apt-get update, apt-get install $ pkgs, आदि चलाएँ
bain
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.