Встановлення завершується, 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 також приносить власний рушій, тож версія, яку ви щойно надрукували, може не мати нічого спільного з версією, яку використовує застосунок.

Запишіть, який виконуваний файл видав вивід версії. Цей один рядок економить годину наступного разу, коли дві версії розійдуться.

Схожі статті