Homebrew đặt tệp nhị phân OpenVPN trong sbin, không phải trong PATH của bạn
Công thức cài daemon OpenVPN dưới sbin, thư mục mà PATH mặc định của macOS không bao gồm. Hãy xác nhận tiền tố, rồi sửa cách phân giải trong một tệp.
Quá trình cài đặt kết thúc, brew nói rằng openvpn có ở đó, còn shell lại trả lời command not found. Tệp nhị phân vẫn tồn tại, nó chỉ nằm trong một thư mục mà shell chưa bao giờ được cho biết. Homebrew liên kết các tệp nhị phân kiểu daemon vào thư mục sbin của tiền tố, và PATH mặc định của macOS thường bao gồm thư mục bin chứ không phải sbin. Không có gì hỏng, và không lần cài lại nào thay đổi được điều đó.
Bốn bước kiểm tra xác nhận cơ chế này trước khi bạn sửa bất kỳ tệp shell nào.
Công thức thực sự cài những gì
Công thức openvpn xây dựng một daemon dòng lệnh, nên tệp thực thi của nó rơi vào dưới sbin thay vì bin. Sau đó Homebrew liên kết tệp nhị phân ấy vào thư mục sbin của tiền tố, và đó là lý do "$(brew --prefix)/sbin/openvpn" --version hoạt động trong khi lệnh gọi trần thì không. Thư mục Cellar có số phiên bản cũng giữ một bản sao, và đặt đường dẫn đó vào tệp khởi động là cách một máy vẫn bị ghim vào bản dựng cũ sau khi nâng cấp.
Liên kết tượng trưng của tiền tố là đường dẫn ổn định. Đường dẫn Cellar là chi tiết triển khai với số phiên bản bên trong.
Hãy hỏi Homebrew, không phải hệ thống tệp
Bắt đầu với trình quản lý gói, vì nó biết bản cài nào sở hữu công thức: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn. Nếu lệnh cuối in ra một đường dẫn, công thức có mặt và câu hỏi chỉ là về phân giải. Nếu nó không in gì, shell đang tìm sai chỗ một gói chưa bao giờ được cài, và đó là vấn đề khác với cách sửa khác.
Hai bản cài Homebrew trên một máy là nơi điều này quan trọng nhất: brew trả lời không nhất thiết là brew đã cài.
Vì sao shell không thấy sbin
Shell đăng nhập dựng PATH từ các giá trị mặc định của hệ thống cộng với mọi thứ mà tệp khởi động của bạn thêm vào. Homebrew bin thường được thêm còn Homebrew sbin thì thường không, nên mọi lệnh đều chạy trừ các daemon. command -v openvpn không trả về gì trong khi đường dẫn có tiền tố trả về một phiên bản là toàn bộ chẩn đoán trong hai lệnh. Xác nhận rằng thư mục thực sự chứa liên kết bằng ls -l "$(brew --prefix)/sbin/openvpn".
Một liên kết thiếu là lỗi khác với một mục PATH thiếu, và chỉ một trong hai được sửa bằng cách biên tập tệp shell.
Sửa đường dẫn một lần, ở một nơi
Để thử nhanh trong shell hiện tại, eval "$(brew shellenv)" đặt các biến cài đặt và đưa cả hai thư mục lên trước. Để bố trí lâu dài, hãy đặt dòng shellenv vào tệp khởi động duy nhất mà shell của bạn đọc cho chế độ đăng nhập bạn dùng, thay vì rải các lệnh xuất khắp các tệp bash và zsh.
Sau đó mở một terminal mới và lặp lại truy vấn phiên bản, vì shell đã được lưu vào bộ nhớ đệm vẫn tiếp tục báo PATH cũ.
Giữ việc dò tìm tách khỏi dịch vụ
Tìm ra một tệp nhị phân không giống với chạy một dịch vụ VPN. Khởi động openvpn tự động thêm các yêu cầu về hồ sơ, thông tin xác thực, quyền hạn và vòng đời mà việc dò tìm gói chưa bao giờ chạm tới. Tunnelblick cũng mang theo engine riêng, nên phiên bản bạn vừa in có thể không liên quan gì đến phiên bản mà ứng dụng dùng.
Ghi lại tệp thực thi nào đã tạo ra đầu ra phiên bản. Dòng duy nhất ấy tiết kiệm một giờ vào lần tới khi hai phiên bản không khớp nhau.