Instalacja się kończy, brew mówi, że openvpn jest, a powłoka odpowiada command not found. Binarka istnieje, po prostu leży w katalogu, o którym powłoka nigdy nie została poinformowana. Homebrew dowiązuje binarki w stylu demonów do katalogu sbin prefiksu, a domyślny PATH w macOS zwykle zawiera katalog bin, a nie sbin. Nic nie jest zepsute i żadna reinstalacja tego nie zmieni.

Cztery kontrole potwierdzają mechanizm, zanim zmodyfikujesz jakikolwiek plik powłoki.

Co formuła właściwie instaluje

Formuła openvpn buduje demona wiersza poleceń, więc jej plik wykonywalny trafia pod sbin, a nie pod bin. Homebrew dowiązuje następnie tę binarkę do katalogu sbin prefiksu i dlatego "$(brew --prefix)/sbin/openvpn" --version działa, podczas gdy samo wywołanie nie działa. Katalog Cellar z numerem wersji również trzyma kopię, a wpisanie tej ścieżki w pliku startowym to sposób, w jaki maszyna po aktualizacji pozostaje przypięta do starej kompilacji.

Dowiązanie symboliczne prefiksu jest stabilną ścieżką. Ścieżka Cellar to szczegół implementacji z numerem wersji w środku.

Pytaj Homebrew, nie systemu plików

Zacznij od menedżera pakietów, bo on wie, która instalacja posiada formułę: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn. Jeśli ostatni wypisze ścieżkę, formuła jest obecna, a pytanie dotyczy wyłącznie rozwiązywania. Jeśli nie wypisze niczego, powłoka szuka w złym miejscu pakietu, który nigdy nie został zainstalowany, a to inny problem z innym rozwiązaniem.

Dwie instalacje Homebrew na jednej maszynie to miejsce, w którym ma to największe znaczenie: brew, które odpowiada, nie musi być tym brew, które instalowało.

Dlaczego powłoka nie widzi sbin

Powłoka logowania buduje PATH z ustawień domyślnych systemu plus wszystkiego, co dodają twoje pliki startowe. Homebrew bin jest zwykle dodawane, a Homebrew sbin zwykle nie, więc każde polecenie działa z wyjątkiem demonów. command -v openvpn, które nic nie zwraca, podczas gdy ścieżka z prefiksem zwraca wersję, to cała diagnoza w dwóch poleceniach. Potwierdź, że katalog naprawdę zawiera dowiązanie, za pomocą ls -l "$(brew --prefix)/sbin/openvpn".

Brakujące dowiązanie to inna usterka niż brakujący wpis PATH, i tylko jedną z nich naprawia edycja pliku powłoki.

Napraw ścieżkę raz, w jednym miejscu

Do szybkiego testu w bieżącej powłoce eval "$(brew shellenv)" ustawia zmienne instalacji i stawia oba katalogi na początku. W przypadku stałego rozwiązania umieść wiersz shellenv w jedynym pliku startowym, który twoja powłoka czyta dla używanego trybu logowania, zamiast rozrzucać eksporty po plikach bash i zsh.

Następnie otwórz nowy terminal i powtórz zapytanie o wersję, bo pamiętana w cache powłoka nadal zgłasza stary PATH.

Trzymaj wykrywanie oddzielnie od usługi

Znalezienie binarki to nie to samo co uruchamianie usługi VPN. Automatyczne uruchamianie openvpn dodaje wymagania dotyczące profilu, poświadczeń, uprawnień i cyklu życia, których wykrywanie pakietów nigdy nie dotknęło. Tunnelblick wnosi też własny silnik, więc wersja, którą właśnie wypisano, może nie mieć nic wspólnego z wersją używaną przez aplikację.

Zapisz, który plik wykonywalny wygenerował wynik wersji. Ta jedna linia oszczędza godzinę, gdy następnym razem dwie wersje się nie zgodzą.

Powiązane artykuły