ثلاثة أعطال مختلفة ترتدي الرسالة نفسها التي يظهرها 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 ويمسح بيانات دعم التطبيقات للمستخدم، ما يعني أن بيانات الاعتماد وملفات تعريف الاتصال المحفوظة تذهب معه. إذا كان ملف التعريف قادمًا من مؤسسة، فتأكد من أنك تستطيع إعادة التسجيل قبل اختيار هذا المسار.

ConditionPath that fitsPath to avoid
Uninstaller path missing after an OS upgradeUpgrade the cask to the version matching the appHand-writing a replacement script
Helper still running during removalQuit the app and its menu agent, then retryDeleting the bundle while the helper runs
Receipt exists but files are goneForget the receipt with the cask's own toolingRecursive deletion of the Caskroom entry
You need the machine clean and can re-enrollZap, after reading the stanzaZap 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 عندما تقبل كلفة بيانات الاعتماد، والحذف اليدوي أبدًا.

مقالات ذات صلة