पैकेज प्रबंधकों को लॉक फ़ाइलों की आवश्यकता क्यों है?


10

dpkgलॉक फ़ाइल का उपयोग करता है ( /var/lib/dpkg/lock), जब उपयोग में हो।

  • इन तालाबंदी की आवश्यकता क्यों है?
  • कई उदाहरण क्यों संभव नहीं हैं?

Dpkg इंस्टॉलेशन करता है। संघर्षों से बचने के लिए यह एक सुरक्षा मोड है। एक ही समय में एक स्थापना।
एल्बफैन

जवाबों:


15

यह एक महत्वपूर्ण dpkgमुद्दा नहीं है (जैसा कि मेरे संपादित सुझाव के शीर्षक के अनुसार)। बल्कि, यह कुछ ऐसा है जो हर पैकेज मैनेजर (जिसमें से मैं जानता हूँ) करता है; और अच्छे कारण के लिए। हालांकि, मुझे समझ में नहीं आता कि यह भ्रामक क्यों हो सकता है।

पैकेज प्रबंधक स्थापित पैकेजों की जानकारी को ट्रैक करने के लिए डेटाबेस पर निर्भर करते हैं। यदि कई उपयोगकर्ता एक ही समय में डेटाबेस में लिखने का प्रयास करते हैं, तो इसके पास डेटा को दूषित करने का एक उच्च मौका है (जो सिस्टम के साथ वास्तव में खराब हो जाएगा)।

परिणामस्वरूप, कई (सभी?) पैकेज प्रबंधक यह संकेत करने के लिए लॉकफ़ाइल पर भरोसा करते हैं कि डेटाबेस को लिखा जा रहा है, इसलिए किसी अन्य क्लाइंट को ऐसा करने की अनुमति नहीं दी जानी चाहिए।


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


2
मुझे लगता है कि पोर्टेज और पलुडीस (गेंटू के पैकेज मैनेजर) समानांतर में काम करने में सक्षम हैं, अगर यह सभी में ताले का उपयोग करता है तो यह केवल संक्षिप्त रूप से स्थापित सूची में पैकेज जोड़ते समय होता है।
बजे वैलिट

मैं जेंटू के पैकेज प्रबंधकों पर एक नज़र डालूंगा और शीघ्र ही अपना उत्तर अपडेट करूंगा।
हेलोसॉस्ट जूल

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

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

9

लॉक फ़ाइल का उपयोग कई उदाहरणों के समानांतर निष्पादन को रोकने के लिए किया जाता है ।

पैकेज प्रबंधकों के लिए यह महत्वपूर्ण क्यों है?

एक पैकेज मैनेजर - एक उच्च स्तरीय दृश्य से - एक ऐसा प्रोग्राम है जो हार्ड डिस्क में जटिल परिवर्तन लागू करता है

परिवर्तन एक चरण ("परमाणु") में नहीं किए जा सकते हैं , इसलिए कई चरण हैं; पहले चरण के परिणाम पर कई चरण निर्भर करते हैं।

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

कई अन्य समस्याएं हैं जो सामने आ सकती हैं।

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


2

dkpg(और rpmऔर अधिकांश अन्य पारंपरिक पैकेज प्रबंधकों) एक वैश्विक अंतरिक्ष, जिसका अर्थ है कि संकुल दूसरे का परस्पर विरोध कर सकते हैं (उदाहरण के लिए में संकुल की स्थापना के द्वारा काम Aऔर Bएक ही समय में स्थापित नहीं किया जा सकता है, क्योंकि वे दोनों स्थापित /usr/lib/libfoo.so)। पैकेज प्रबंधकों को इस तरह के संघर्षों का पता लगाना चाहिए और सिस्टम को सुसंगत स्थिति में रखने के लिए ऐसे इंस्टॉलेशन अनुरोधों को अस्वीकार करना चाहिए। एक ही समय पर चलने वाले पैकेज मैनेजर के कई उदाहरण होने के कारण यह बहुत जटिल और त्रुटि वाला होगा।

संघर्ष-मुक्त पैकेज प्रबंधक (जैसे http://0install.net ) समानांतर में कई पैकेज स्थापित करने की अनुमति दे सकते हैं, और लॉक फ़ाइलों की आवश्यकता नहीं है ( A/libfoo.soऔर B/libfoo.soअलग-अलग निर्देशिकाओं में जाएंगे)।


1 एक ही समय में सिस्टम पर मौजूद और उपलब्ध होने के अर्थ में, और समान रूप से सिस्टम में डाउनलोड और जोड़े जाने के अर्थ में समानांतर दोनों।

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