टीएल; डीआर या "जस्ट पी माई पीरो"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
( apt-get autoremove --purge
तब तक दोहराएं जब तक कोई अनाथ न रह जाए)
आगे की व्याख्या
यदि एक पैकेज foo दूसरे पैकेज libfoo पर निर्भर करता है और आप libfoo पैकेज को हटाते हैं , तो आश्रित ( foo ) को भी हटा दिया जाता है। क्योंकि फू है एक निर्भर करता है को निर्दिष्ट लाइन libfoo , यह foo छोड़ने के लिए करता है, तो libfoo हटा दिया गया है टूट किया जाएगा। रिवर्स सच नहीं है: फू को हटाने से लिबफू अपने आप नहीं हटता है । एक अन्य पैकेज xfoo भी libfoo पर निर्भर हो सकता है , इसलिए उपयुक्त इसे हटा नहीं सकता है (हालाँकि उपयुक्त ट्रैक होगा यदि इसे केवल स्थापित करने के साइड-इफ़ेक्ट के रूप में स्थापित किया गया है foo और यदि आप इसे पूछते हैं, तो इसे स्वतः हटाने की पेशकश करें, जब तक कि कोई अन्य अभी भी इस पर निर्भर न हो)
मेटा संकुल निर्भर ज्यादा एक ही तरीका है कि में अन्य संकुल के एक सेट पर फू पर निर्भर libfoo , इसलिए जब आप एक मेटा-पैकेज को हटाने, कुछ खास आम तौर पर हटा दिया जाता है। उदाहरण के लिए, दो मेटा-पैकेज हो सकते हैं जो xterm (lxsession और xfsession शायद) पर निर्भर करते हैं , लेकिन एक या दोनों को अनइंस्टॉल करने से xterm की स्थापना रद्द नहीं होगी क्योंकि xterm lxsession या xfsession के बिना टूटा नहीं है। मेटा-पैकेज आम तौर पर निर्भरता के पेड़ के शीर्ष पर होते हैं , न कि सबसे नीचे, और कुछ चीजें सीधे मेटा-पैकेज पर निर्भर करती हैं। मेटा-पैकेज मुख्य रूप से एक बार में एक समझदार सेट को स्थापित करने के लिए एक सुविधाजनक तरीका प्रदान करते हैं, लेकिन वे टूल की स्थापना रद्द नहीं करते हैं।
इसलिए, यदि आप X11 पर निर्भर होने वाली हर चीज को बिखेरना चाहते हैं, तो आपको libx11 पुस्तकालयों के आधार सेट को लक्षित करने की आवश्यकता होगी जो कि सभी x11 ऐप्स को अंततः निर्भर करना चाहिए :
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
यह (अनुकरण) सब कुछ हटा देगा जो अंततः libx11 पर निर्भर करता है - *।, और X11 प्रोग्राम की निर्भरता के रूप में स्थापित किए गए किसी भी पैकेज को भी हटा देगा , भले ही वे सीधे X11 पर निर्भर न हों (CUPS और घोस्टस्क्रिप्ट आमतौर पर स्थापित होते हैं एक डेस्कटॉप वातावरण स्थापित करने के साइड-इफेक्ट के रूप में)। दूसरा आदेश बाद के अनाथों को हटा देगा जब तक कोई नहीं रहता। यदि आप इस चरण को बाद में करना चाहते हैं या नहीं करना चाहते हैं, तो "--auto-remove" निकालें, या GUI को बंद करने के बाद मैन्युअल रूप से संकुल को वापस जोड़ें।
आपके द्वारा जाँच किए जाने के बाद वास्तव में ऑपरेशन करने के लिए --dry-run विकल्प निकालें, यह उन पैकेजों को नहीं हटाएगा जिन्हें आपने हटाने का इरादा नहीं किया था।)
मैं साइड-इफेक्ट्स को साफ और शुद्ध करना पसंद करता हूं, और उन्हें आवश्यकतानुसार वापस जोड़ता हूं। इसके अलावा, मैंने आगे बढ़कर अपने स्वयं के पाई पर इसका परीक्षण किया, और इसने एक बहुत ही संयमी लेकिन कार्यात्मक सर्वर को रिबूट किया। :)
क्यों एक रिमूव कुछ स्थापित करता है?
उपर्युक्त रणनीति बताई गई समस्या को हल करती है, लेकिन अभी भी इस बात की जिज्ञासा है कि संकुल को हटाने के संचालन का परिणाम क्यों स्थापित किया जा रहा है ।
प्रत्येक पैकेज मैनेजर के दिल में किसी प्रकार का एक संतोषजनक समाधान है । जब आप कुछ पैकेजों को स्थापित करने के लिए पैकेज मैनेजर से कहते हैं, तो कुछ पैकेजों को हटा दें , या कुछ पैकेजों को अपग्रेड करें , जो आप वास्तव में यह करने के लिए कह रहे हैं वह है पैकेज के उपलब्ध सेट को देखते हुए सॉफ्टवेयर इंस्टॉलेशन की अगली इच्छित स्थिति को हल करना। यह समाधान हो सकता है ,, / उसके विशिष्ट पैकेज (अनुकूलता स्तर), या एक संयोजन के उन्नयन के अतिरिक्त पैकेज (निर्भरता) को स्थापित करने से मौजूदा पैकेज (संघर्ष, टूट जाता है) को बाहर निकालने पदावनति शामिल हैं। इसलिए, जबकि यह थोड़ा उल्टा है कि सॉल्वर यह निर्धारित करता है कि हटाए जाने वाले अन्य पैकेजों के लिए कुछ पैकेजों को स्थापित करने की आवश्यकता है, यह सही समझ में आता है। यह गंदा निर्भरता प्रबंधन समस्या है जिसे पैकेज प्रबंधक हल करते हैं।
एक ठोस उदाहरण: जावा अनुप्रयोगों के एक सेट को पहले से ही स्थापित करने के बाद, वे सभी एक जावा संगत रनटाइम पर निर्भर करते हैं जो वर्तमान में ओपनजेडक -7-जेआर होता है । इसके बाद आप एक नया जावा उपकरण है जो एक वाणी की स्थापना के लिए हल करने के लिए पैकेज प्रबंधक पूछना संघर्ष के साथ openjdk-7-JRE लेकिन काम करता है के साथ ओरेकल-7-JRE (दोनों संकुल सामान्य रूप से उपलब्ध कराने के एक जावा-7-क्रम )। Solver एक प्रस्ताव देगा हटाने की openjdk-7-JRE और एक स्थापित की ओरेकल-जावा-7-JREमौजूदा पैकेज को न तोड़ते हुए नए पैकेज को स्थापित करने की आपकी इच्छित स्थिति के समाधान के रूप में।
इस विशिष्ट मामले में, xterm एक पैकेज है जो x-टर्मिनल-एमुलेटर ( xterm , lxterminal और aterm सभी एक्स-टर्मिनल-एम्यूलेटर प्रदान करता है ) नामक एक वर्चुअल निर्भरता प्रदान करता है , इसलिए यह संभव है कि lxterminal को हटाने के रूप में (एक भाग के रूप में) Lxde को हटाते हुए, सॉल्वर को एक मौजूदा स्थापित पैकेज ( संभावित उदाहरण के रूप में ट्रांसकोड ) मिला, जिसे किसी प्रकार के एक्स-टर्मिनल-एमुलेटर की आवश्यकता थी , इसलिए सॉल्वर ने xterm स्थापित करने के लिए चुना (जिसके लिए libutempter0 और xbitmaps की आवश्यकता होती हैअन्यथा स्थापित निर्भरता को पूरा करने के लिए) अन्य संकुल को स्थापित करने के लिए समझाते हुए)। पैकेज डेटाबेस को देखे बिना, मैं परिकल्पना करूंगा कि यह सबसे संभावित परिदृश्य है।
संकुल है कि वर्तमान में कर रहे हैं पर निर्भर करता है की खोज करने के लिए टर्म (या कोई वैकल्पिक), का उपयोग apt-कैश rdepends आदेश (का उपयोग कर --installed इंस्टॉल किए गए पैकेज को सीमित करने के लिए स्विच केवल):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
वैकल्पिक चरित्र के साथ शुरू होने वाली निर्भरता '' | इसका मतलब है कि पैकेज xterm पर निर्भर करता है या ऐसा कुछ प्रदान करता है (जो कि इस मामले में कुछ x- टर्मिनल-एमुलेटर है)। Clusterssh पैकेज पर निर्भर करता है टर्म स्पष्ट रूप से , और एक वैकल्पिक के लिए अनुमति नहीं है। यह उन संकुलों की संक्षिप्त सूची है, जिनके कारण xterm की आवश्यकता होती है।
दुर्जन के बारे में क्या?
ट्रैकिंग अनाथों की कार्यक्षमता को 2010 में ' ऑटोरेमोव ' कार्यक्षमता के माध्यम से उपयुक्त रूप में शामिल किया गया था (डेबियन बग 582791 ) जिसमें ज्यादातर निरर्थक और अनिवार्य रूप से अप्रत्यक्ष रूप से देवर्धन का प्रतिपादन किया गया था। डीपोरफ़ान और इसके जैसे अन्य समाधानों के विपरीत, सीधे - सीधे ट्रैक मिलते हैं कि कौन से पैकेज स्पष्ट रूप से स्थापित किए गए थे और कौन से पैकेज स्पष्ट रूप से स्थापित पैकेज के साइड-इफेक्ट या निर्भरता के रूप में स्थापित किए गए थे। उदाहरण के लिए, यदि कोई व्यवस्थापक foo स्थापित करता है, तो libfoo को साइड-इफ़ेक्ट के रूप में स्थापित किया जाता है और apt-get autoremove होगा , वास्तव में, libfoo को हटा दें यदि चिड़ियाघर को हटाते समय autoremove (या --auto-remove) निर्दिष्ट किया जाता है।
डीबोरफान द्वारा लिया गया दृष्टिकोण अनुमानों का एक संग्रह है। उदाहरण के लिए, अनुमान है कि एक स्थापित पुस्तकालय जिसमें एक आश्रित नहीं है, एक अनाथ होना चाहिए: यदि लिबफू स्थापित किया गया है, लेकिन न तो फू और न ही xfoo हैं, तो दुर्व्यवहार यह तय कर सकता है कि यह एक अनाथ होना चाहिए। यहां एक विफलता मोड यह है कि पुस्तकालयों को विशेष रूप से उन उपकरणों के लिए स्थापित किया जा सकता है जो वे प्रदान करते हैं (libxml2 xmllint के लिए इससे पहले कि यह libxml2-utils में बदल दिया गया था) या बस विकास प्रयोजनों के लिए उपलब्ध है। ऐसे पैकेज अनाथ नहीं हैं। इसके अतिरिक्त, deborphan पुस्तकालयों पर केंद्रित है, इसलिए यह कई गैर-पुस्तकालय अनाथों को याद करता है जो उपयुक्त ट्रैक (अप्रचलित पैकेज बनाम अनाथ पैकेज) हैं ।
munin
किसी कारण से भी हटा दिया गया था , लेकिन मैं बाद में आसानी से वापस रख सकता था।