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 میخواهد ترجیحات کاربر و منابع مشترک را هم حذف کند، و مستندات هشدار میدهد که این میتواند روی نرمافزار دیگر اثر بگذارد. در cask مربوط به 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 وقتی هزینهٔ اعتبارنامهها را میپذیرید، حذف دستی هرگز.