अवलोकन
उत्पादन वातावरण में लिनक्स सर्वर संभालते समय कई बार अनपेक्षित सॉफ्टवेयर अपडेट के कारण सेवाएँ बाधित हो जाती हैं। ऐसे जोखिमों से बचने के लिए महत्वपूर्ण पैकेजों के संस्करण को स्थिर रखना और अतिरिक्त निर्भरताओं (dependencies) को व्यवस्थित करना अत्यंत आवश्यक है। इस व्यावहारिक गाइड में हम apt-mark टूल के जरिए सॉफ्टवेयर वर्जन को होल्ड (hold) करने और ऑटोमैटिक बनाम मैनुअल इंस्टॉलेशन की स्थिति नियंत्रित करने के सुरक्षित तरीके समझेंगे।
सॉफ्टवेयर को अपडेट होने से कैसे रोकें: hold और showhold का उपयोग
प्रयोग शुरू करने के लिए रिपॉजिटरी सूची को रिफ्रेश करते हुए curl टूल इंस्टॉल कर लेते हैं:
sudo apt-get update -qq && sudo apt-get install -y curl

जब आप चाहते हैं कि भविष्य में apt upgrade चलाने पर भी कोई विशेष सॉफ्टवेयर अपग्रेड न हो, तो sudo apt-mark hold curl कमांड का इस्तेमाल किया जाता है। यह सिस्टम स्तर पर पैकेज को फ्रीज कर देता है।
⚙️ [महत्वपूर्ण विकल्प संक्षेप में]
hold : पैकेज को मौजूदा स्थिति में लॉक करता है ताकि स्वचालित अपग्रेड रुक सके।unhold : लगे हुए लॉक को हटाकर सामान्य अपडेट प्रक्रिया को दोबारा सक्रिय करता है।showhold : वर्तमान में होल्ड पर रखे गए सभी पैकेजों की सूची दिखाता है।auto : पैकेज को अन्य प्रोग्रामों की स्वचालित निर्भरता के रूप में चिन्हित करता है।manual : पैकेज को एडमिनिस्ट्रेटर द्वारा सीधे इंस्टॉल किया हुआ दर्ज करता है।showauto : सिस्टम द्वारा अपने-आप जोड़ी गई निर्भरताओं को सूचीबद्ध करता है।showmanual : मैन्युअल रूप से जोड़े गए सभी मुख्य पैकेजों को प्रदर्शित करता है।

सुरक्षा सुनिश्चित करने के लिए हम जांच सकते हैं कि कौन-से पैकेज अपडेट सूची से बाहर किए गए हैं:
apt-mark showhold
टर्मिनल आउटपुट में curl का नाम दिखाई देना यह पुष्टि करता है कि पैकेज सफलतापूर्वक लॉक हो चुका है।

पैकेज अनलॉक करना: unhold के माध्यम से सामान्य अपडेट बहाल करना
यदि परीक्षण समाप्त हो चुका हो या सुरक्षा पैच लागू करने की आवश्यकता हो, तो sudo apt-mark unhold curl चलाकर लॉक हटाया जा सकता है।
कमांड निष्पादित होते ही टर्मिनल पर Canceled hold on curl. संदेश प्राप्त होता है, जिसका अर्थ है कि सामान्य अपग्रेड चक्र फिर से शुरू हो गया है।

सत्यापन के लिए पुन: स्थिति की जांच करें:
apt-mark showhold
इस बार स्क्रीन पर कोई पैकेज प्रदर्शित नहीं होता, जिससे स्पष्ट होता है कि सिस्टम में अब कोई भी अवरुद्ध पैकेज शेष नहीं है।

इंस्टॉलेशन व्यवहार बदलना: markauto और unmarkauto द्वारा निर्भरता नियंत्रण
पैकेज के आंतरिक फ्लैग्स को समझने के लिए पहले एक छोटा यूटिलिटी टूल jq इंस्टॉल करते हैं:
sudo apt-get install -y jq

सामान्यतः सीधे इंस्टॉल किए गए पैकेज मैन्युअल माने जाते हैं। sudo apt-mark markauto jq कमांड उस स्थिति को बदलकर पैकेज को ऑटोमैटिक डिपेंडेंसी के रूप में चिन्हित कर देता है। इसका बड़ा लाभ यह है कि जब इससे जुड़ा मूल प्रोग्राम हटेगा, तब apt autoremove चलाने पर यह भी सिस्टम से अपने-आप स्वच्छ हो जाएगा।

यह पुष्टि करने के लिए कि फ्लैग बदल चुका है, निम्नलिखित जांच चलाएँ:
apt-mark showauto jq
परिणाम में jq दिखना बताता है कि यह अब स्वचालित निर्भरता समूह का हिस्सा बन चुका है।

यदि आप चाहते हैं कि किसी अन्य पैकेज के हटने पर भी यह टूल सिस्टम में बना रहे, तो इसे वापस मैन्युअल श्रेणी में लाने के लिए sudo apt-mark unmarkauto jq चलाएँ। इससे यह सुरक्षित हो जाता है और कभी भी autoremove द्वारा हटाया नहीं जाएगा।

पुनः मैन्युअल सूची की पुष्टि करें:
apt-mark showmanual jq
आउटपुट में jq का नाम आना यह प्रमाणित करता है कि अब यह स्थायी मैनुअल पैकेज के रूप में पंजीकृत है।

सिस्टम स्थिति का संपूर्ण विश्लेषण: मैन्युअल और ऑटोमैटिक पैकेजों का ऑडिट
सिस्टम में सीधे उपयोगकर्ता द्वारा सेटअप किए गए प्रमुख पैकेजों की शीर्ष सूची देखने के लिए पाइपलाइन का उपयोग करें:
apt-mark showmanual | head -n 10
यहाँ मूल ओएस घटकों के साथ-साथ आपके द्वारा जोड़े गए उपकरण जैसे curl स्पष्ट रूप से दिखाई देंगे।

इसी प्रकार, पृष्ठभूमि में काम कर रही सहायक लाइब्रेरी और स्वचालित डिपेंडेंसी को देखने के लिए:
apt-mark showauto | head -n 10
यह परिणाम दर्शाता है कि कौन-सी साझा लाइब्रेरी केवल अन्य सॉफ़्टवेयर की आवश्यकता पूरी करने हेतु सक्रिय हैं।

इस प्रकार apt-mark की सहायता से आप सर्वर पर अनचाहे पैकेज अपग्रेड को समय रहते रोक सकते हैं और सिस्टम की आंतरिक निर्भरताओं को साफ-सुथरा बनाए रख सकते हैं।