क्या वास्तव में "सच में प्रतिलिपि प्रस्तुत करने योग्य बनाता है"?


9

वे वास्तव में क्या हैं? सतत वितरण के क्षेत्र में वे महत्वपूर्ण क्यों हैं?

संदर्भ: मैंने देखा है (मुझे लगता है कि reddit) की एक टिप्पणी है कि सच में Reproducible बनाता है अभी भी एक अनुसंधान प्रौद्योगिकी है, और बनाने के लिए बहुत मुश्किल है।

इसलिए, मैं जानना चाहता था कि उन्हें बनाना इतना मुश्किल क्यों है?


शायद कुछ पॉइंटर (ओं) को उस संदर्भ में देखा जाए जिसमें वे संदर्भित हैं?
डैन कॉर्निलेस्कु

@DanCornilescu ज़रूर। विवरण :) जोड़ा
Dawny33

@ Pierre.Vriens पुल-ऑफ करके, मेरा मतलब है, make possible:) qn का संपादन भी!
Dawny33

1
संपादन के लिए धन्यवाद, लेकिन इसे देख, मुझे लगता है कि तुम सिर्फ मतलब है "बनाने" ...
Pierre.Vriens

1
मैं अपने जवाब में सुधार करने में संकोच करता हूं (या एक और उत्तर) दूसरे उदाहरण के साथ, अपने स्वयं के अनुभव से, 90 के दशक की शुरुआत में ... जो कि (शाब्दिक रूप से) दुनिया के दूसरी तरफ उड़ान भरने के साथ करना था, एक 3 के साथ , 5 इंच फ्लॉपी (2 प्रतियां, पढ़ने की त्रुटियों के मामले में ...), एक (विशाल) कंपनी में हमारे सॉफ्टवेयर को देने के लिए ... और जहां मुझे उनके वातावरण में (एक मेनफ्रेम पर) निष्पादन योग्य पुनर्निर्माण करना था .. । DevOps-कला-la-Lettre ...
Pierre.Vriens

जवाबों:


8

वे वास्तव में क्या हैं?

यहाँ reproducible-builds.org से एक उद्धरण दिया गया है :

Reproducible बिल्ड सॉफ्टवेयर विकास प्रथाओं का एक सेट है जो मानव पठनीय स्रोत कोड से कंप्यूटर द्वारा उपयोग किए जाने वाले बाइनरी कोड के लिए एक सत्यापन योग्य मार्ग बनाते हैं।

वे महत्वपूर्ण क्यों हैं?

IMO उनके महत्व को समझाने का सबसे आसान तरीका है कि उन्हें एक बैकअप प्रक्रिया के रूपांतर माना जाए।

उदहारण के लिए:

  • एक व्यवसाय मान लें जो कुछ सॉफ़्टवेयर विक्रेता से लाइसेंस प्राप्त सॉफ़्टवेयर पैकेज पर उपयोग (निर्भर करता है) करता है। जबकि व्यवसाय को केवल निष्पादन योग्य वस्तुएं मिलती हैं, न कि वे स्रोत इत्यादि जिनका उपयोग उन निष्पादनयोग्य बनाने के लिए किया जाता था।

  • सब कुछ ठीक चलता है, लेकिन कुछ बिंदु पर सॉफ्टवेयर विक्रेता के साथ कुछ गलत हो जाता है, उदाहरण के लिए वे व्यवसाय से बाहर हो जाते हैं (जैसे दिवालिया)।

  • यह व्यवसाय के लिए जोखिम (लंबे समय में) को उजागर कर सकता है। अर्थात, यदि निष्पादनकर्ता द्वारा उपयोग किए गए सॉफ़्टवेयर विक्रेता द्वारा उपयोग किए गए सॉफ़्टवेयर विक्रेता से किसी भी चीज़ से संबंधित सभी आवश्यक स्रोतों, दस्तावेज़ों, निर्माण प्रक्रियाओं आदि को प्राप्त करने (कानूनी) का उपयोग करने के लिए व्यवसाय के लिए कोई प्रक्रिया / समझौता नहीं है। व्यवसाय) बनाए गए (और व्यवसाय के लिए भेज दिया गया)।

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

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

और उन्हें बनाना इतना मुश्किल क्यों है?

यदि उपरोक्त नमूना अभी भी पर्याप्त स्पष्ट नहीं है, तो कल्पना करें कि आप मेरे सॉफ़्टवेयर एस्क्रो एजेंट हैं, मुझे बताएं कि मेरे ग्राहक द्वारा लाइसेंस प्राप्त सॉफ़्टवेयर की एक प्रतिलिपि को फिर से बनाने के लिए आपको इनपुट के रूप में क्या चाहिए। उसे ले लो? आप मेरे संकलक के कौन से संस्करण, शायद मेरे OS, संकलन / लिंक विकल्प, पुन: प्रयोज्य घटकों के संस्करण (शामिल हैं, पुस्तकालयों, आदि) के बारे में जांच करना नहीं भूले?


4

वास्तव में एक दोहराने योग्य निर्माण बनाने के प्रयास का एक व्यावहारिक उदाहरण प्रदान करने के लिए निम्नलिखित पर विचार करें -

एक निर्माण पाइपलाइन जो एक गिट रिपॉजिटरी से शुरू होती है जिसके लिए कोई भी उपयोगकर्ता कभी भी इतिहास को फिर से नहीं लिख सकता है या अनमैरिड शाखाओं को हटा नहीं सकता है।

स्रोत कोड की जांच करने के बाद पहला "बिल्ड" चरण एक कंटेनर को स्पिन करने के लिए है जिसमें सभी बिल्ड समय निर्भरताएं होती हैं।

निर्माण समय कंटेनर चलाने का आउटपुट एक कंटेनर होता है जिसमें संकलित बाइनरी होता है।

निर्माण के दोहराव के लिए अधिक महत्वपूर्ण निम्नलिखित टैग अंतिम कंटेनर में जोड़े जाते हैं:

  • मूल रिपॉजिटरी में सोर्स कोड का सटीक हैश और गिट रेपो और कोड का एक टार बॉल स्नैपशॉट है जो एक आर्टिफिशियल रिपॉजिटरी में अपलोड किया जाता है।
  • बिल्ड कंटेनर का सटीक संस्करण जिसका उपयोग बिल्ड को चलाने के लिए किया गया था।
  • मूल आधार छवि का सटीक संस्करण जो बाइनरी में लोड किया गया था।
  • बाइनरी बनाने के लिए उपयोग किए जाने वाले सभी बिल्ड-टाइम चर का मान।
  • Docker का संस्करण जो तीनों कंटेनरों के साथ-साथ उस वर्जन के साथ बनाया गया है जहाँ वे उस समय चल रहे हैं, जब वे निर्माण कर रहे थे।

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

सैद्धांतिक रूप से यह हमें एक बिल्ड संस्करण को पुन: पेश करने की क्षमता प्रदान करना चाहिए।

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

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