Ubuntu नवीनीकरण प्रक्रिया कैसे काम करती है?


11

ऑपरेटिंग सिस्टम अभी भी चल रहा है, जबकि उबंटू एक नए वितरण के लिए मूल रूप से कैसे अपग्रेड करता है? मैं १०.१० से ११.०४ में अपग्रेड कर रहा हूं, और मैंने पहले भी कई बार अपग्रेड किया है, और यह अपडेट-मैनेजर -d चलाने और उन्हें डाउनलोड और इंस्टॉल करने, फिर रिबूट करने जितना आसान है।

हालांकि यह वास्तव में कैसे काम करता है? उन्नयन प्रबंधक ऑपरेटिंग सिस्टम को अपडेट करने में सक्षम है, जबकि यह अभी भी उपयोग में है?


ठीक है, बाउंटी टिप्पणी में मेरे प्रश्न को जोड़ना एक अच्छा विचार नहीं था। ऐसा नहीं लगता कि मैं इसे संपादित कर सकता हूं।
ऑक्सीविवि

जवाबों:


3

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

मुझे लगता है कि एक वितरण उन्नयन के साथ भी ऐसा ही होगा। उबंटू के मूल संस्करण से संबंधित सभी पैकेज अभी भी चल रहे हैं, भले ही उन्हें हटा दिया गया हो और नए लोगों के साथ बदल दिया गया हो, इसलिए जब उन्हें सिस्टम रीस्टार्ट पर रोक दिया जाता है, तो नए पैकेज खत्म हो जाते हैं।


यह भी समझाता है कि क्यों मैं उन्नयन के रूप में कुछ मेनू में नई सुविधाओं को जोड़ा जा रहा है नोटिस।
bbosak

15

यहां प्रक्रिया का अधिक विस्तृत विवरण दिया गया है। क्षमा करें कि पाठ इतना लंबा हो गया।

मेरा अनुभव डेबियन से उपजा है, जिसके लिए मूल रूप से उबंटू में उपयोग की जाने वाली पूरी पैकेजिंग और उन्नयन प्रणाली का आविष्कार किया गया था। दैनिक उबंटू सुरक्षा उन्नयन चल रहा है apt-get upgradeजो सामान्य रूप से किसी भी सॉफ्टवेयर को नहीं हटाता है। बड़े रिलीज अपग्रेड एक ऐसे apt-get dist-upgradeसॉफ्टवेयर से मेल खाते हैं जिसके दौरान सॉफ्टवेयर पैकेज का पूरी तरह से आदान-प्रदान किया जा सकता है।

वास्तव में रिलीज के उन्नयन के दौरान बहुत कम स्तर के घटकों का आम तौर पर आदान-प्रदान नहीं किया जाता है। अपग्रेड के तुरंत बाद आपको अपनी बूट निर्देशिका में दो कर्नेल और initrd छवियां मिलनी चाहिए। ऐसा इसलिए है क्योंकि प्रोग्राम के विपरीत कर्नेल घटक विनिमेय नहीं हैं। यदि नवीनीकरण के दौरान नए डिवाइस ड्राइवरों को लोड करने की आवश्यकता होती है, तो उन्हें चलने वाले कर्नेल के साथ संगत होना चाहिए। नए कर्नेल के साथ सिस्टम बूट होने के बाद, पुराने को हटाया जा सकता है। पिछली बार जब मैंने यह जाँच की थी कि एक चीज़ को मैन्युअल रूप से किया जाना था, मुझे नहीं पता कि वर्तमान अपडेटर इसे कैसे संभालता है। यह बीटीडब्लू है। मुख्य कारण, कर्नेल छवि फ़ाइल नाम में अपना संस्करण संख्या क्यों रखती है - इसलिए आपके पास एक ही समय में विभिन्न कर्नेल संस्करण स्थापित हो सकते हैं। मॉड्यूल पथ (/ lib / मॉड्यूल / ...) के लिए समान

सॉफ्टवेयर पैकेज एक-एक करके अपग्रेड होते हैं, जो डिपेंडेंसी हिरार्की में सबसे कम पैकेज के साथ शुरू होते हैं। वे आम तौर पर प्रोग्राम लाइब्रेरी हैं जैसे कि libc और अन्य। जिस क्रम में पैकेज अपडेट किए जाते हैं, वह हालांकि हार्डकोडेड नहीं है, लेकिन पैकेज की निर्भरता के रूप में गतिशील रूप से गणना की जाती है। ज्यादातर मामलों में पुराने कार्यक्रम नई लाइब्रेरी के साथ काम कर सकते हैं, इसलिए यह समस्याग्रस्त नहीं है अगर उन लाइब्रेरी को पहले स्थान दिया जाए।

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

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

लाइब्रेरी के अपग्रेड होने के बाद, नए लाइब्रेरी वर्जन के साथ काम करने वाले प्रोग्राम को समय के दौरान शुरू नहीं किया जा सकता है, और प्रोग्राम से पहले ही अपग्रेड किया जाता है। यदि वे प्रोग्राम पहले से ही लाइब्रेरी अपग्रेड से पहले चल रहे हैं, लेकिन फिर भी वे चलते रहेंगे, क्योंकि पुराना लाइब्रेरी वर्जन तब तक मेमोरी में रहता है, जब तक वह उपयोग में रहता है। समान उन कार्यक्रमों के लिए जाता है जो अपग्रेड होने से पहले शुरू किए गए थे। वे तब तक नई सुविधाएँ प्रदान नहीं करेंगे जब तक कि उन्हें समाप्त और पुनः आरंभ नहीं किया जाता है।

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

कुछ पैकेज स्थापित किए जाएंगे, जो पहले स्थापित नहीं थे, वे बस नई निर्भरताएं हैं, जो स्वचालित रूप से स्थापित के रूप में चिह्नित हैं, और उन्हें हटाया जा सकता है, भविष्य में उनके लिए आवश्यकता गायब हो जानी चाहिए।

यह तंत्र पूरे उपयोगकर्ता कार्यक्रमों के आदान-प्रदान की अनुमति भी देता है। उदाहरण के लिए Gnome2 से एकता पर स्विच करना। चूँकि दोनों ही ubuntu-desktop की स्वचालित निर्भरताएँ हैं, जो कि कुछ पैकेजों में से एक है, जिसके लिए नए संस्करणों को वास्तव में पहली जगह के लिए अनुरोध किया जाता है।

प्रोग्राम आमतौर पर ओएस कर्नेल के एक विशिष्ट संस्करण पर निर्भर नहीं करते हैं, इसलिए वे सामान्य रूप से चलने वाले कर्नेल के साथ ठीक काम करेंगे।

इन सबके अलावा, मुझे संदेह है कि उबंटू अपडैटर उन कुछ विशिष्ट सुधारों और मिक्सचर में वर्कअराउंड को फेंक देता है, जहां यह सिद्धांत टूट जाता है।

जैसा कि आप अद्यतन के दौरान देख सकते हैं कि बहुत अच्छी तरह से स्थितियाँ हैं जिसमें सिस्टम केवल एक सीमित भाग के लिए उपयोग करने योग्य है। चाहिए कुछ अद्यतन के दौरान गलत होगा सबसे अधिक संभावना एक टूट प्रणाली के साथ नहीं छोड़ा जा सकता। अक्सर यहां तक ​​कि आसानी से मरम्मत नहीं की जा सकती है, क्योंकि उन्नयन कार्यक्रम भी प्रभावित हो सकता है। याद रखें, टूटी हुई निर्भरता के साथ कार्यक्रम कार्य करना जारी रख सकते हैं, लेकिन फिर से शुरू नहीं किया जा सकता है, जब तक निर्भरताएं टूट जाती हैं, यह अद्यतनकर्ता के लिए भी जाता है।

आप कमांड लाइन प्रोग्राम apt-markका उपयोग यह पता लगाने के लिए कर सकते हैं कि कौन से पैकेज मैन्युअल रूप से इंस्टॉल किए गए हैं और जो स्वचालित रूप से इंस्टॉल किए गए हैं। आप उसी प्रोग्राम का उपयोग करके उन निशानों को भी स्विच कर सकते हैं। यह सीधे अपडेट प्रक्रिया को प्रभावित करेगा।

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

अब विशिष्ट प्रश्नों के लिए:

  1. जब निम्न-स्तरीय अवसंरचना को बदल दिया जाता है (कर्नेल, ड्राइवरों, पुस्तकालयों, आदि में निम्न-स्तर कुछ भी जो उपयोगकर्ता के साथ सीधे संपर्क नहीं करता है), तो पदावनत बायनेरिज़ का क्या होता है?
    • ठीक है ... मैं पहले से ही इस एक को कवर किया
  2. उस ऐप का क्या होता है जिसे पूरी तरह से अपदस्थ किया गया है? उदाहरण के लिए, यूनिटी 2 डी (या किसी भी अन्य सॉफ़्टवेयर को छोड़ दिया गया / कोई अनुरक्षक नहीं है जिसका पैकेज नए रेपो में नहीं है)।
    • यदि ऐप को एक बार मैन्युअल रूप से इंस्टॉल किया गया था, तो यह सिस्टम में बना रहेगा, अक्सर मेरे द्वारा वर्णित निर्भरता नरक का कारण बनता है।
  3. ubuntu- डेस्कटॉप एक रूपक है जो निर्भरता के रूप में डिफ़ॉल्ट उबंटू अनुप्रयोगों को खींचता है। अगर मैंने फ़ायरफ़ॉक्स को हटा दिया और क्रोम स्थापित किया, तो क्या फ़ायरफ़ॉक्स अभी भी उन्नयन के हिस्से के रूप में खींच लिया जाएगा?
    • जब तक यह नई रिलीज़ का मानक ब्राउज़र है, हाँ। क्रोमियम को भी अपग्रेड किया जाएगा। मुझे यकीन नहीं है कि आप ubuntu-desktop को हटाए बिना फ़ायरफ़ॉक्स को हटा सकते हैं। ध्यान दें कि सख्त निर्भरता के अलावा, पैकेज सिस्टम भी सिफारिशों की अवधारणा को जानता है, जहां एक सॉफ्टवेयर सामान्य रूप से एक निर्भरता की तरह स्थापित किया जाएगा, लेकिन बाद में बिना किसी अन्य चीज को प्रभावित किए बिना ही इसकी स्थापना की जा सकती है।
  4. इसके अलावा, क्या होता है अगर एक भी ऐप पैकेज-एक्स पर निर्भर करता था और अब नई रिलीज में ऐसा नहीं करता है; क्या पैकेज-एक्स को अनाथ होने के बावजूद बाकी पैकेजों के साथ अपग्रेड किया जाएगा?
    • नहीं।

बस मुझसे पूछें कि क्या आपके पास अभी भी कोई सवाल है।


क्या आप निर्भरता नरक से संबंधित अधिक डॉक्स से जुड़ सकते हैं (मुझे DLL नरक शब्द की याद दिलाता है)? मैं न्यूनतम उबंटू इंस्टॉल का उपयोग करता हूं, और मैं यह पता लगाना चाहता हूं कि मेरे लिए उन्नयन कैसे काम करेगा।
21

मुझे लगता है कि आप सभी इंटरनेट पर निर्भरता नरक के बारे में शिकायत करेंगे। अपने उपयुक्त आदमी पृष्ठों को पढ़ें, जैसे man apt-get। मुझे लगता है कि यह apt-get -t intrepid install foo/jaunty bar/oneiricआदि जैसे वाक्य कमांड सिंटैक्स को जारी करने का उपयोग करने के लिए अक्सर उपयोगी होता है ..., केवल उदाहरण। वास्तव में यह डेबियन के साथ अधिक समझ में आता है जहां आप कभी-कभी रिलीज को मिलाते हैं, उबंटू के तहत यह कम प्रथागत है। दिलचस्प विषय भी उपयुक्त हो सकते हैं-होल्ड पर पिनिंग और सेटिंग सेट करना।
पॉल हेन्सच

3
स्टैक एक्सचेंज नेटवर्क में मैंने अब तक की सबसे लंबी गैर-कोड प्रतिक्रिया के लिए पुरस्कार जीता।
पैट्रिक

3

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

इसलिए अपग्रेड प्रक्रिया केवल पुरानी फाइलों को हटाती है, उन्हें नए लोगों के साथ बदल देती है, और कुछ सिस्टम सेवाओं के लिए, उन्हें पुनरारंभ करता है ताकि नया संस्करण चल रहा हो।

एक या दो घटक हैं जिन्हें पूरे कंप्यूटर को रिबूट किए बिना फिर से शुरू नहीं किया जा सकता है, इसलिए उन्हें अपग्रेड करने के बाद, आपको रिबूट करने के लिए प्रेरित किया जाता है, इसलिए आप नए संस्करण का उपयोग करेंगे।


2

जब यह अभी भी उपयोग में है तो लिनक्स खुद को कैसे अपडेट कर सकता है?

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

लिनक्स के साथ, ऐसा कुछ भी नहीं है जो पैकेज प्रबंधक प्रक्रिया को डिस्क पर एक फ़ाइल में लिखने से रोक देगा, भले ही वह फ़ाइल वर्तमान में किसी एप्लिकेशन द्वारा खुली हो या फ़ाइल कोड की एक निष्पादन योग्य या साझा लाइब्रेरी है जो वर्तमान में चल रही है । बहुत कम-स्तर पर, ऐसे ताले होते हैं जो एक एकल लिखने / पढ़ने के संचालन के दौरान एक फ़ाइल तक पहुंच की रक्षा करते हैं, लेकिन ये कभी भी मिलीसेकंड के मामले से अधिक के लिए डिज़ाइन नहीं किए जाते हैं और किसी भी अन्य एप्लिकेशन को एक ही फ़ाइल में लिखने की कोशिश कर रहे हैं बस उन मिलीसेकंड का इंतजार करेंगे।

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

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

जब यह कुछ प्रोग्राम तोड़ रहा है तो प्रोग्राम की फ़ाइलों को बदलना नहीं होगा?

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

सामान्य तौर पर, नियमित उपयोगकर्ता अनुप्रयोगों को चलाने के लिए कोई कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता नहीं होती है, केवल फाइलों के अलावा यह स्वयं उत्पन्न होती है और उपयोगकर्ताओं के होम निर्देशिका जैसे स्थानों में होती है। इसलिए अद्यतन करते समय पैकेज प्रबंधक द्वारा इन्हें छुआ नहीं जाएगा।


मैं पहले से ही इस सभी विवरणों से अवगत हूं, कृपया मेरी टिप्पणी को मेरे इनाम के साथ रखें। मैं जानना चाहता हूं कि aptनवीनीकरण प्रक्रिया के दौरान उबंटू, यानी , कुछ निश्चित पैकेज और निर्भरता को कैसे संभालता है।
ऑक्सीविवि

-2

यह एक अन्य विशेषता के समान है। आशा है कि यह मूल प्रक्रिया को समझने में मदद करता है।

मैं ऑपरेटिंग सिस्टम के बूट होने पर "रूट को स्विच" करने की क्षमता का उल्लेख कर रहा हूं।

जब ऑपरेटिंग सिस्टम बूट हो रहा है, तो रूट फाइल सिस्टम (पढ़ें: "/") शुरू में केवल रैम में उपलब्ध है। जबकि यह बूट प्रक्रिया चल रही है, यह रैम से / हार्ड डिस्क पर / फाइल सिस्टम पर स्विच करता है।


1
नहीं, सिस्टम अपग्रेड के दौरान चेरोट तंत्र का उपयोग नहीं किया जाता है। उन्नयन लाइव फ़ाइल सिस्टम पर किया जाता है। तुम भी अपने कार्यक्रम मेनू देख सकते हैं पुनर्निर्माण और कार्यक्रम आइकन बदल मधुमक्खी के रूप में वे बदल रहे हैं। लेकिन चेरोट तंत्र का उपयोग एक मूल सिस्टम इंस्टॉलेशन में किया जाता है, जब एक नया सिस्टम एक नए निर्मित डिस्क पार्टिटोन पर एक परिवर्तन रूट वातावरण में "डीबूटस्ट्रैप्ड" होता है।
पॉल हेन्सश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.