मेरे पुराने गुठली को हटाने से ऑटोरेमोव क्यों नहीं मिलता है?


53

मेरा बूट विभाजन SSD पर है, इसलिए इसमें लगभग 8 स्थापित कर्नेल संस्करणों के लिए जगह नहीं है, और अंततः कुछ कर्नेल अद्यतन स्थापित करने में विफल होंगे क्योंकि मेरा बूट विभाजन पुराने संस्करणों से भरा है। पुराने संस्करणों को निकालने के तरीके (यहां तक ​​कि प्रक्रिया को स्वचालित करने के लिए भी) के बारे में कई प्रश्न हैं, लेकिन मेरा सवाल बस यह है: क्यों नहीं apt-get autoremoveपता लगाता है और उन्हें स्वचालित रूप से हटाता है, और क्या कोई ऐसा तरीका है जिससे मैं ऐसा कर सकता हूं ? मेरा मतलब है, apt-getक्या उन्हें वैसे भी स्थापित किया गया है, इसलिए यह उनके बारे में जानता है, इसलिए यह सभी पुराने संस्करणों को छोड़ने का विकल्प क्यों चुनता है?



1
Autoremove है तो अधिकांश परिस्थितियों में वर्ष के दाने को हटा दें। गुठली जमा हो जाती है क्योंकि सिस्टम स्वतः डिफ़ॉल्ट रूप से ऑटोरेमोव नहीं चलाता है। यह अप्राप्य-उन्नयन में एक सेटिंग है, और इसे बदला जा सकता है। ऑटोरेमोव पुरानी गुठली को नहीं निकाल सकता है जब पहले से कतारबद्ध क्रियाएं (जैसे एक नया कर्नेल स्थापित करना) विफल (अपर्याप्त स्थान के कारण)। एक पैच के लिए Bugs.launchpad.net/bugs/1357093 देखिए जो बिना मरम्मत के अपग्रेड के लिए पुराना हो जाएगा
user535733

जवाबों:


36

उत्तर के रूप में क्यों, फ़ाइल को देखें /etc/apt/apt.conf.d/01autoremove-kernels

यहाँ छवि विवरण दर्ज करें

आप देख सकते हैं, उपयुक्त,, कर्नेल autoremove कभी नहीं करने के लिए कहा के रूप में एक और (स्क्रिप्ट) फ़ाइल के द्वारा कहा जाता है /etc/kernel/postinst.d/apt-auto-removal। और यहाँ यह है:

यहाँ छवि विवरण दर्ज करें

यदि आप मैन्युअल रूप से 2 चुने हुए गुठली, यानी पहले और वर्तमान एक को स्थापित करते हैं, तो apt-autoremove केवल उन पुराने संस्करणों को हटा देगा जिन्हें आपने मैन्युअल रूप से इंस्टॉल नहीं किया था, इसलिए आपके पास हमेशा उन 2 विकल्प होंगे जो कि नवीनतम एक है।

अपडेट करें:

में /etc/kernel/postinst.d/apt-auto-removalइस भाग है:

if [ "$latest_version" != "$installed_version" ] \
   || [ "$latest_version" != "$running_version" ] \
   || [ "$installed_version" != "$running_version" ]
then
        # We have at least two kernels that we have reason to think the
        # user wants, so don't save the second-newest version.
        previous_version=
fi

इसलिए यदि आप 01autoremove-kernelsफ़ाइल के आउटपुट की तुलना करते हैं और uname -rआपको एहसास होगा कि वर्तमान में चल रहे कर्नेल और सबसे हाल ही में, उस स्क्रिप्ट से कभी भी हटाए नहीं जाते हैं। वहाँ एक और फ़ाइल है /etc/apt/apt.conf.d/01autoremove, जहाँ लाइनें हैं:

    APT
    {
      NeverAutoRemove
      {
            "^firmware-linux.*";
            "^linux-firmware$";
      };
  VersionedKernelPackages
  {
        # linux kernels
        "linux-image";
        "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        # kfreebsd kernels
        "kfreebsd-image";
        "kfreebsd-headers";
        # hurd kernels
        "gnumach-image";
        # (out-of-tree) modules
        ".*-modules";
        ".*-kernel";
        "linux-backports-modules-.*";
        # tools
        "linux-tools";
  };

इसलिए आप इन पर टिप्पणी कर सकते हैं, और यह आपको गुठली के साथ ऑटो निकालने की अनुमति देगा apt-autoremove, हालांकि याद रखें - अपने जोखिम पर ऐसा करें


1
बहुत ही रोचक! मेरी /etc/apt/apt.conf.d/01autoremove-kernelsकई पंक्तियाँ हैं, लेकिन उन सभी के बीच केवल दो संस्करण हैं: 3.13.0। {39,43}। लेकिन dpkg -l linux-*चार संस्करणों को सूचीबद्ध करता है, 3.13.0। {39,40,41,43}, इसलिए इसके अलावा कुछ और /etc/apt/apt.conf.d/01autoremove-kernelsउन मध्य संस्करणों को सही रख रहा है?
ब्लूबॉम्बर

1
TL: DR: 01autoremoveवह फ़ाइल है जिसे आप चाहते हैं, 01autoremove-kernelsशायद यह केवल एक सुरक्षा है, ताकि उपयुक्त वर्तमान में स्थापित कर्नेल को न हटाया जा सके और सबसे हाल का (अभी हाल ही में नवीनतम शिकंजा)
Sergiy Kolodyazhnyy

1
जब तक मैं गलत नहीं कर रहा हूँ 01autoremove, यह सिर्फ निर्भरता संकुल के स्वत: हटाने के खिलाफ की रक्षा कर रहा है, जैसे linux-image-extra। इसे बदलने से यह प्रभावित नहीं होना चाहिए कि linux-image-3.16.0-31-genericऑटोरेमॉन्टेड है या नहीं । इसमें कोई भी पैटर्न उस पैकेज के नाम से मेल नहीं खाता है, जिसे हम स्वतः निकालना चाहते हैं।
पीटर कॉर्डेस

1
@PeterCordes लाइनों को हटाएं या टिप्पणी न करें /etc/apt/apt.conf.d/01autoremove। यह पुराने वर्जन वाले कर्नेल पैकेज को ऑटोरेमोविंग में आपकी मदद नहीं करता है, लेकिन अवांछित प्रभाव हो सकता है। फ़ाइल ऑटोरेमोविंग से सुरक्षित नहीं है linux-image-extraलेकिन NeverAutoRemoveअनुभाग में नियमित अभिव्यक्ति से मेल खाने वाले पैकेज ।
जर्नो

2
@BlueBomber, जो apt-get autoremoveगुठली नहीं हटाता है, उसे सूचीबद्ध न करने का कारण यह /etc/apt/apt.conf.d/01autoremove-kernelsहै कि उन गुठली को मैन्युअल रूप से स्थापित किया गया है; मेरा जवाब देखिए ।
जर्नो

8

मेरे लिए इसने नवीनतम (X) ubuntu (15.10) स्थापित करने में मदद की। पहले रिलीज़ में कर्नेल पैकेज को मैन्युअल रूप से स्थापित के रूप में चिह्नित किया जा सकता है, कम से कम, यदि सॉफ़्टवेयर अपडेटर का उपयोग करके स्थापित किया गया है, ताकि sudo apt-get autoremove --purgeउन्हें हटा न सकें। समस्या से संबंधित बग रिपोर्ट हैं: बग # 1175637 , बग # 1439769

पहले रिलीज में, आप कर्नेल पैकेज को स्वचालित रूप से स्थापित करने sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")और sudo apt-get autoremove --purgeउसके बाद चलाने के लिए देख सकते हैं, अगर यह अंतर करता है। कमांड को अभी भी /etc/apt/apt.conf.d/01autoremove-kernels में दिखाए गए कर्नेल पैकेज को नहीं निकालना चाहिए, लेकिन पहले विकल्प के apt-get autoremoveसाथ चलाना सबसे सुरक्षित है --dry-run


ओह, ऑटोरेमोव कमांड बहुत सारे कर्नेल को हटाने के लिए देखते हैं, बग # 1440608
जारो डिक

1
apt-markमेरे लिए चाल किया था, काश मैं 10 बार वोट दें सकता है: पी
माइक ग्लीसन जे आर डिजाइनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.