Η εγκατάσταση τελειώνει, το brew λέει ότι το openvpn είναι εκεί, και το κέλυφος απαντά command not found. Το δυαδικό υπάρχει, βρίσκεται σε έναν κατάλογο για τον οποίο το κέλυφος δεν ενημερώθηκε ποτέ. Το Homebrew συνδέει δυαδικά τύπου δαίμονα μέσα στον κατάλογο sbin του προθέματος, και ένα προεπιλεγμένο PATH του macOS συνήθως περιλαμβάνει τον κατάλογο bin και όχι τον sbin. Τίποτα δεν είναι χαλασμένο, και καμία επανεγκατάσταση δεν θα το αλλάξει.

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

Τι εγκαθιστά στην πραγματικότητα η φόρμουλα

Η φόρμουλα openvpn χτίζει έναν δαίμονα γραμμής εντολών, οπότε το εκτελέσιμό της προσγειώνεται κάτω από το sbin και όχι κάτω από το bin. Στη συνέχεια το Homebrew συνδέει αυτό το δυαδικό μέσα στον κατάλογο sbin του προθέματος, και γι αυτό το "$(brew --prefix)/sbin/openvpn" --version λειτουργεί ενώ μια γυμνή κλήση δεν λειτουργεί. Ο κατάλογος Cellar με αριθμό έκδοσης κρατά επίσης ένα αντίγραφο, και η τοποθέτηση αυτής της διαδρομής σε αρχείο εκκίνησης είναι ο τρόπος με τον οποίο ένα μηχάνημα μένει καρφωμένο σε παλιά έκδοση μετά από αναβάθμιση.

Ο συμβολικός σύνδεσμος του προθέματος είναι η σταθερή διαδρομή. Η διαδρομή Cellar είναι λεπτομέρεια υλοποίησης με αριθμό έκδοσης μέσα της.

Ρωτήστε το Homebrew, όχι το σύστημα αρχείων

Ξεκινήστε από τον διαχειριστή πακέτων, γιατί αυτός ξέρει ποια εγκατάσταση κατέχει τη φόρμουλα: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn. Αν η τελευταία εκτυπώσει διαδρομή, η φόρμουλα υπάρχει και το ερώτημα αφορά αποκλειστικά την επίλυση. Αν δεν εκτυπώσει τίποτα, το κέλυφος ψάχνει σε λάθος μέρος για ένα πακέτο που δεν εγκαταστάθηκε ποτέ, και αυτό είναι διαφορετικό πρόβλημα με διαφορετική λύση.

Δύο εγκαταστάσεις Homebrew σε ένα μηχάνημα είναι εκεί όπου αυτό έχει τη μεγαλύτερη σημασία: το brew που απαντά δεν είναι απαραίτητα το brew που εγκατέστησε.

Γιατί το κέλυφος δεν βλέπει το sbin

Ένα κέλυφος σύνδεσης χτίζει το PATH από τις προεπιλογές του συστήματος συν ό,τι προσθέτουν τα αρχεία εκκίνησής σας. Το Homebrew bin συνήθως προστίθεται και το Homebrew sbin συνήθως όχι, οπότε κάθε εντολή λειτουργεί εκτός από τους δαίμονες. Το command -v openvpn που δεν επιστρέφει τίποτα ενώ η διαδρομή με πρόθεμα επιστρέφει έκδοση είναι ολόκληρη η διάγνωση σε δύο εντολές. Επιβεβαιώστε ότι ο κατάλογος κρατά πραγματικά τον σύνδεσμο με το ls -l "$(brew --prefix)/sbin/openvpn".

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

Διορθώστε τη διαδρομή μία φορά, σε ένα σημείο

Για γρήγορη δοκιμή στο τρέχον κέλυφος, το eval "$(brew shellenv)" θέτει τις μεταβλητές εγκατάστασης και βάζει και τους δύο καταλόγους μπροστά. Για μόνιμη ρύθμιση, βάλτε τη γραμμή shellenv στο μοναδικό αρχείο εκκίνησης που διαβάζει το κέλυφός σας για τη λειτουργία σύνδεσης που χρησιμοποιείτε, αντί να σκορπάτε εξαγωγές σε αρχεία bash και zsh.

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

Κρατήστε την ανακάλυψη ξεχωριστή από την υπηρεσία

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

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

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