لا يستطيع Homebrew إلغاء تثبيت OpenVPN Connect: أي مسار يناسبك؟
فشل إلغاء تثبيت حزمة 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 يحذف بند 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 عندما تقبل كلفة بيانات الاعتماد، والحذف اليدوي أبدًا.