Τρία διαφορετικά σφάλματα φορούν το ίδιο μήνυμα λάθους του cask και το καθένα έχει τη δική του διαδρομή αποκατάστασης. Το πρόγραμμα απεγκατάστασης του κατασκευαστή μπορεί να λείπει από την εγκατεστημένη έκδοση, μια βοηθητική διεργασία μπορεί να τρέχει ακόμη και να κρατά τα αρχεία της, ή η απόδειξη του πακέτου μπορεί να διαφωνεί με ό,τι βρίσκεται στον δίσκο. Η παλιά λύση από το φόρουμ που έσωσε μία από αυτές τις περιπτώσεις δεν σας λέει τίποτα για το ποια έχετε. Το να διαβάσετε το δικό του αρχείο του cask είναι ο τρόπος να το μάθετε.

Τρία σφάλματα που μοιάζουν

Ένα πρόγραμμα απεγκατάστασης που λείπει εμφανίζεται ως διαδρομή που δεν υπάρχει όταν το cask προσπαθεί να το εκτελέσει. Μια ενεργή βοηθητική διεργασία εμφανίζεται ως αφαίρεση που ξεκινά και μετά κολλάει, ή ως εφαρμογή που εμφανίζεται ξανά αφού την κλείσετε. Μια παρωχημένη απόδειξη εμφανίζεται όταν το αρχείο του cask και η βάση δεδομένων του εγκαταστάτη διαφωνούν για το αν το προϊόν είναι εγκατεστημένο καθόλου.

Κρατήστε το πρώτο κείμενο του σφάλματος πριν επαναλάβετε οτιδήποτε. Μια δεύτερη προσπάθεια αντικαθιστά την κατάσταση που παρήγαγε το μήνυμα, και η αρχική γραμμή είναι αυτό που χρειάζεται ένας συντηρητής ή ο κατασκευαστής για να ξεχωρίσει αυτές τις περιπτώσεις. Αντιγράψτε το κάπου που θα επιβιώσει από την επανάληψη.

Αν αυτό το VPN μεταφέρει τη σύνδεση που χρησιμοποιείτε για τη δουλειά σας, κανονίστε πρώτα μια άλλη διαδρομή διαχείρισης. Η αφαίρεση του πελάτη που σας δίνει πρόσβαση είναι απόφαση για το παράθυρο συντήρησης, όχι για το Homebrew. Αυτή η σειρά είναι και αυτό που κάνει μια αποτυχημένη απεγκατάσταση ανακτήσιμη αντί για οριστική.

Διαβάστε τι εγκατέστησε πραγματικά το cask

Η δική του οπτική του Homebrew είναι η φθηνότερη διαθέσιμη απόδειξη και δεν αλλάζει τίποτα:

brew info --cask openvpn-connect
brew list --cask openvpn-connect

Η πρώτη εντολή εκτυπώνει τα μεταδεδομένα του cask και τα artifacts που διαχειρίζεται· η δεύτερη απαριθμεί ό,τι είναι καταγεγραμμένο ως εγκατεστημένο. Καμία από τις δύο δεν αποδεικνύει ότι κάθε βοηθητική διεργασία στο μηχάνημα αντιστοιχεί στη σημερινή συνταγή, και γι' αυτό ακριβώς μια παλιότερη εγκατάσταση μπορεί να αποτύχει με τρόπο που η σημερινή πηγή του cask δεν περιγράφει. Αντιμετωπίστε τις δύο εξόδους ως ισχυρισμό προς έλεγχο, όχι ως την τελευταία λέξη για το τι υπάρχει.

Συγκρίνετε την καταγεγραμμένη έκδοση με τη δική της έκδοση της εφαρμογής πριν επιλέξετε διαδρομή. Μια απόκλιση εξηγεί ένα πρόγραμμα απεγκατάστασης που λείπει χωρίς κανένα βαθύτερο σφάλμα, και η απάντηση είναι αναβάθμιση στην έκδοση που περιμένει το cask και όχι χειροκίνητος καθαρισμός.

Τι προσθέτει το zap και τι κοστίζει

Η ενότητα απεγκατάστασης ενός cask χειρίζεται τα artifacts που δηλώνει η συνταγή: κλείσιμο της εφαρμογής, εκφόρτωση εργασιών εκκίνησης, αφαίρεση στοιχείου σύνδεσης, λησμονιά των αποδείξεων πακέτων και διαγραφή του πακέτου της εφαρμογής. Αυτή είναι η κανονική διαδρομή, και είναι αυτή που θα έπρεπε να δουλεύει.

--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 από αυτό με το οποίο ξεκινήσατε.

Απόφαση με σειρά

Δουλέψτε τη σειρά: διαβάστε τα καταγεγραμμένα artifacts του cask, συγκρίνετε εκδόσεις, κλείστε κάθε στοιχείο που τρέχει, επαναλάβετε τη συνηθισμένη απεγκατάσταση και μόνο τότε σκεφτείτε το zap. Αν η συνηθισμένη διαδρομή αποτύχει ακόμα, κρατήστε το σφάλμα και πηγαίνετε το στους συντηρητές του cask ή στον κατασκευαστή μαζί με τους αριθμούς έκδοσης.

Το Cask Cookbook λέει ρητά ότι τα προγράμματα εγκατάστασης πακέτων χρειάζονται τεχνικές απεγκατάστασης ειδικές για το προϊόν και ότι το zap είναι προαιρετικό και μπορεί να αφαιρέσει κοινόχρηστους πόρους. Αυτό το πλαίσιο είναι ο κανόνας απόφασης: πρώτα η συνηθισμένη απεγκατάσταση, zap όταν δέχεστε το κόστος των διαπιστευτηρίων, χειροκίνητη διαγραφή ποτέ.

Σχετικά άρθρα