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

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

מאמרים קשורים