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 כשאתם מקבלים את מחיר פרטי הגישה, מחיקה ידנית לעולם לא.