Homebrew OpenVPN Connect को अनइंस्टॉल नहीं कर पा रहा: कौन-सा रास्ता सही है?
विफल cask अनइंस्टॉल तीन में से एक गड़बड़ी है। cask के आर्टिफ़ैक्ट पढ़ें, संस्करणों की तुलना करें, फिर दोबारा कोशिश, अपग्रेड या zap में से चुनें।
तीन अलग-अलग गड़बड़ियाँ एक ही cask त्रुटि संदेश लिए चलती हैं और हर एक का अपना रिकवरी रास्ता है। विक्रेता का अनइंस्टॉलर इंस्टॉल किए गए संस्करण से गायब हो सकता है, कोई सहायक प्रक्रिया अब भी चल रही हो और अपनी फ़ाइलें थामे हो, या पैकेज रसीद डिस्क पर मौजूद चीज़ों से मेल न खाए। जिस पुराने फ़ोरम उपाय ने उनमें से एक मामला बचाया था वह आपके पास कौन-सा है इस बारे में कुछ नहीं बताता। cask का अपना रिकॉर्ड पढ़ना ही यह पता लगाने का तरीका है।
एक जैसी दिखने वाली तीन गड़बड़ियाँ
गायब अनइंस्टॉलर तब ऐसे रास्ते के रूप में दिखता है जो मौजूद नहीं है जब cask उसे चलाने की कोशिश करता है। चलती सहायक प्रक्रिया ऐसे हटाने के रूप में दिखती है जो शुरू होकर अटक जाता है, या ऐसे ऐप के रूप में जो बंद करने के बाद फिर प्रकट होता है। पुरानी रसीद तब दिखती है जब cask का अपना रिकॉर्ड और इंस्टॉलर का डेटाबेस इस बात पर सहमत न हों कि उत्पाद इंस्टॉल है भी या नहीं।
कुछ भी दोबारा आज़माने से पहले पहला त्रुटि पाठ सहेज लें। दूसरी कोशिश उस स्थिति को ओवरराइट कर देती है जिसने संदेश बनाया था, और मूल पंक्ति ही वह चीज़ है जो मेंटेनर या विक्रेता को इन मामलों में अंतर करने के लिए चाहिए। इसे ऐसी जगह कॉपी करें जो दोबारा कोशिश से बच जाए।
अगर यह VPN वह कनेक्शन ले जा रहा है जिससे आप काम करते हैं, तो पहले शासन का दूसरा रास्ता तैयार करें। आपकी पहुँच देने वाले क्लाइंट को हटाना रखरखाव विंडो का फ़ैसला है, Homebrew का नहीं। यही क्रम विफल अनइंस्टॉल को अंतिम के बजाय वसूल करने योग्य बनाता है।
पढ़ें कि cask ने असल में क्या इंस्टॉल किया
Homebrew का अपना दृश्य उपलब्ध सबसे सस्ता सबूत है, और वह कुछ नहीं बदलता:
brew info --cask openvpn-connect
brew list --cask openvpn-connectपहला कमांड cask का मेटाडेटा और वे आर्टिफ़ैक्ट छापता है जिन्हें वह प्रबंधित करता है; दूसरा वह सूची दिखाता है जो इंस्टॉल के रूप में दर्ज है। कोई भी यह साबित नहीं करता कि मशीन पर हर सहायक प्रक्रिया मौजूदा रेसिपी से मेल खाती है, और इसीलिए पुरानी इंस्टॉल ऐसे विफल हो सकती है जैसा मौजूदा cask स्रोत नहीं बताता। दोनों आउटपुट को जाँचे जाने वाले दावे की तरह लें, इस बात के अंतिम शब्द की तरह नहीं कि क्या मौजूद है।
रास्ता चुनने से पहले दर्ज संस्करण की तुलना ऐप के अपने संस्करण से करें। बेमेल किसी गहरी गड़बड़ी के बिना गायब अनइंस्टॉलर की व्याख्या करता है, और जवाब है cask जिस संस्करण की अपेक्षा करता है उस पर अपग्रेड, न कि हाथ से सफ़ाई।
zap क्या जोड़ता है और क्या कीमत लेता है
cask का अनइंस्टॉल खंड उन आर्टिफ़ैक्ट को संभालता है जिन्हें रेसिपी घोषित करती है: ऐप बंद करना, लॉन्च जॉब अनलोड करना, लॉगिन आइटम हटाना, पैकेज रसीदें भुलाना और ऐप बंडल हटाना। यही सामान्य रास्ता है, और यही वह है जिसे काम करना चाहिए।
--zap एक अलग अनुरोध है। यह Homebrew से उपयोगकर्ता प्राथमिकताएँ और साझा संसाधन भी हटाने को कहता है, और दस्तावेज़ चेतावनी देते हैं कि इससे दूसरे सॉफ़्टवेयर पर असर पड़ सकता है। OpenVPN Connect के cask में zap खंड openvpn.keychain-db हटाता है और उपयोगकर्ता के ऐप-सहायता डेटा को साफ़ करता है, यानी सहेजे गए क्रेडेंशियल और कनेक्शन प्रोफ़ाइल भी साथ चले जाते हैं। अगर प्रोफ़ाइल किसी संगठन से आया है, तो यह रास्ता चुनने से पहले पुष्टि करें कि आप फिर से नामांकन कर सकते हैं।
| Condition | Path that fits | Path to avoid |
|---|---|---|
| Uninstaller path missing after an OS upgrade | Upgrade the cask to the version matching the app | Hand-writing a replacement script |
| Helper still running during removal | Quit the app and its menu agent, then retry | Deleting the bundle while the helper runs |
| Receipt exists but files are gone | Forget the receipt with the cask's own tooling | Recursive deletion of the Caskroom entry |
| You need the machine clean and can re-enroll | Zap, after reading the stanza | Zap on a machine whose profiles you cannot rebuild |
निर्णायक दिखने वाले रास्ते जो नहीं हैं
शून्य एग्ज़िट कोड पर ख़त्म होने वाला नक़ली remove.sh लिखना सूची का सबसे बुरा विकल्प है। यह अनइंस्टॉल को सफलता की रिपोर्ट करने देता है जबकि लॉन्च जॉब, रसीदें और ऐप डेटा जगह पर बने रहते हैं, इसलिए अगली इंस्टॉल आधा हटा हुआ उत्पाद और उलटा कहने वाला रिकॉर्ड विरासत में पाती है।
Caskroom निर्देशिका या ऐप बंडल को हाथ से हटाना दूसरी तरफ़ से वैसी ही स्थिति बनाता है। फ़ाइलें गायब हो जाती हैं और रसीद रह जाती है। तब हर बाद के कमांड को ऐसी मशीन के सामने सोचना पड़ता है जो अब अपने ही डेटाबेस से मेल नहीं खाती।
पूरे रिपॉज़िटरी पर brew update-reset उससे बड़ा दख़ल है जितना एक विफल cask जायज़ ठहराता है। यह आपकी tap स्थिति बदलता है ऐसी समस्या ठीक करने के लिए जो कभी tap स्थिति के बारे में नहीं थी, और यह आपको उस Homebrew के बजाय किसी और को डीबग करते हुए छोड़ सकता है जिससे आपने शुरू किया था।
क्रम से फ़ैसला
क्रम से काम करें: cask के दर्ज आर्टिफ़ैक्ट पढ़ें, संस्करणों की तुलना करें, हर चलते घटक को बंद करें, सामान्य अनइंस्टॉल दोबारा आज़माएँ, और उसके बाद ही zap पर विचार करें। अगर सामान्य रास्ता फिर भी विफल हो, तो त्रुटि सहेजें और संस्करण संख्याओं के साथ cask मेंटेनरों या विक्रेता के पास ले जाएँ।
Cask Cookbook स्पष्ट कहता है कि पैकेज इंस्टॉलरों को उत्पाद-विशिष्ट अनइंस्टॉल तकनीकें चाहिए और zap वैकल्पिक है तथा साझा संसाधन हटा सकता है। यही ढाँचा निर्णय का नियम है: पहले सामान्य अनइंस्टॉल, क्रेडेंशियल की कीमत स्वीकार करें तो zap, हाथ से हटाना कभी नहीं।