OpenConnect в macOS: пакет, архив выпуска или git-клон
Homebrew устанавливает двоичный файл и сетевой скрипт; дерево исходников не даёт ни того, ни другого, пока вы их не сгенерируете и не запустите. Знайте, что использует ваше подключение.
Три пути дают вам клиент OpenConnect на Mac, и они оставляют на диске разные вещи. Формула Homebrew устанавливает скомпилированный двоичный файл и сетевой скрипт, который настраивает маршруты и DNS. Архив выпуска даёт исходный код со сгенерированной системой сборки. Клон git даёт исходный код без неё. Выбор неправильного пути — вот почему люди встречают отсутствующий configure через несколько минут после начала руководства.
Две разные машины под одним именем
Путь через пакет — одна команда, и это правильный выбор по умолчанию для всех, чья работа — подключаться, а не разрабатывать.
brew install openconnect
То, что он устанавливает, важнее команды. Вы получаете двоичный файл клиента, а также vpnc-script, который клиент вызывает для программирования интерфейса, маршрутов и резолвера. Оба работают в паре: двоичный файл завершает сеанс TLS и передаёт получившийся интерфейс скрипту, а скрипт — это часть, которая знает, как эта операционная система хочет изменить свою сеть.
Это разделение объясняет целый класс запутанных отчётов. Клиент, который подключается, сообщает об успехе, а затем отправляет трафик не туда, обычно имеет проблему со скриптом, а не с туннелем, и переустановка формулы исправляет это только потому, что скрипт тоже переустанавливается. Проверьте текущую поддержку формулы для macOS и архитектуры процессора, прежде чем рассчитывать на неё; Mac, который прекрасно выполняет оболочку, может всё ещё не иметь актуального пакета, собранного для него.
Что на самом деле делает путь через исходники
Архив выпуска поставляется со сгенерированной системой сборки, поэтому знакомый ./configure существует с самого начала. В клоне git его нет, потому что сгенерированные файлы — это продукты сборки, а не то, что проект хранит. Именно поэтому ./autogen.sh появляется в инструкциях для клонов, а не для архивов выпуска.
./autogen.sh
./configure
make
make install
Каждая строка делает что-то конкретное, и знание того, какая из них не удалась, экономит много догадок. Шаг autogen запускает autotools, чтобы создать configure. Шаг configure проверяет компилятор, библиотеки и заголовки, нужные клиенту, затем записывает makefile, отражающие найденное. Шаг make компилирует. Шаг install копирует результаты куда-то в ваш путь.
Именно на этой последней строке советы часто идут не туда. Установка не доказывает, что сборка сработала, а запуск её в произвольной папке загрузок с повышенными правами — хороший способ рассыпать файлы, которые вы потом не вспомните. Если configure падает из-за отсутствующей библиотеки, полезный вывод — первая напечатанная ошибка, а не последние двадцать строк журнала.
Сеанс и сетевая конфигурация разделены
Это различие решает, действительно ли соединение несёт трафик. Установление сеанса TLS даёт интерфейс на стороне клиента. Применение маршрутов, адресов и DNS-резолверов — второй шаг, выполняемый через сетевой скрипт, и сборка, создавшая двоичный файл без скрипта, имеет половину клиента.
То же разделение объясняет, почему две машины с одинаковыми клиентами ведут себя по-разному: скрипт обращается к сетевой конфигурации системы, а эта конфигурация включает всё остальное, что заявило маршрут. Когда разделённый туннель отправляет трафик куда-то неожиданно, туннель делает свою работу, и изучать нужно решение о маршрутизации.
Поэтому при отладке спрашивайте, какой уровень отказал. Сеанс, который так и не устанавливается, — это протокол, сертификат или учётные данные. Сеанс, который устанавливается и ничего не передаёт, — это интерфейс и скрипт. Установленный клиент, который работает из одной сети и не работает из другой, — это доступность, и никакая пересборка этого не изменит.
Знайте, какой двоичный файл вы запускаете
Собранная вручную сборка и упакованный двоичный файл могут мирно сосуществовать, и то, который запускается, зависит от вашего пути, а не от ваших намерений. Выясните это, прежде чем сообщать кому-либо номер версии.
which -a openconnect
openconnect --version
brew list --versions openconnect
Первая команда перечисляет каждую копию, которую видит ваша оболочка, в том порядке, в котором она бы их пробовала. Вторая сообщает, какая ответила. Когда это не совпадает с вашими ожиданиями, вы запускаете сборку из старого эксперимента, и никакое изменение конфигурации её не сдвинет.
Установка клиента — не одобрение шлюза
Работающий двоичный файл не делает развёртывание совместимым. Подтвердите протокол шлюза, его поток аутентификации и любые требования к управляемому устройству у людей, которым он принадлежит, потому что это факты политики и прикладного уровня, которые сборка предоставить не может.
Инструкции по сборке проекта подробнее описывают последовательность autotools и требование к сетевому скрипту, и именно им нужно следовать, а не записи в блоге, которая старше вашего выпуска macOS. Если цель — просто подключиться, возьмите пакет, сохраните скрипт и оставьте компилятор в стороне.