Установка OpenVPN, которая падает под Chocolatey с ошибкой подписи или ключа, обычно не является проблемой загрузки. Пакет выполняет шаг проверки, который вызывает gpg, и Windows разрешает это голое имя через PATH. Если Git for Windows был установлен первым, его встроенный gpg.exe стоит перед сборкой GnuPG, которую ожидает OpenVPN, и на вызов отвечает не та программа. Ошибка, которую вы видите, — это то, на что решила пожаловаться та другая программа, поэтому она никогда не упоминает настоящую причину.

Порядок в PATH определяет, какой gpg запускается

В Windows нет центрального реестра имён исполняемых файлов. Когда процесс запрашивает gpg без полного пути, загрузчик проходит по записям PATH по порядку и запускает первое совпадение. Git for Windows поставляет минимальную сборку GnuPG в своём каталоге usr/bin, чтобы работали подписанные коммиты, и его установщик обычно размещает этот каталог ближе к началу PATH пользователя.

GnuPG устанавливается в свой собственный каталог, обычно C:\Program Files (x86)\GNU\GnuPG\pub, и эта запись может быть дальше в списке или вовсе отсутствовать в PATH пользователя. Обе программы делят имя и большую часть интерфейса командной строки, но не своё состояние: сборка Git ищет связку ключей в другом месте, может быть другой версией и может не принимать параметры, которые передаёт установщик. Это несоответствие проявляется как ошибка подписи или ключа, что является правдивым отчётом о том, что увидел неправильный бинарный файл. Ничто в сообщении не указывает на загрузчик, потому что загрузчик сделал ровно то, что ему было сказано.

Почему оболочка, из которой вы начинаете, определяет результат

Правило наследования — это та часть, которую стоит усвоить. Дочерний процесс получает среду оболочки, которая его запустила, поэтому важен порядок в момент запуска Chocolatey, а не порядок после вашего исправления.

Поэтому редактирование PATH в окне настроек и повторный запуск установки в том же терминале часто ничего не меняет: терминал сохранил старую среду. После любого изменения запустите новую оболочку и подтвердите с помощью where.exe gpg в этой новой оболочке, прежде чем пробовать снова. Это также причина, по которой запись на уровне машины может победить изменение на уровне пользователя: некоторые установщики добавляют в начало PATH машины, а записи машины оцениваются раньше записей пользователя. Если оба уровня содержат путь к GnuPG, решите, какой из них вы на самом деле поддерживаете.

Исправление первое: переупорядочьте записи

Точное исправление — заставить победить нужный каталог GnuPG. Откройте переменные среды пользователя, отредактируйте Path и переместите каталог pub GnuPG выше записей Git. Затем откройте новое окно PowerShell, потому что работающее всё ещё держит старый список.

Альтернатива — временная чистая среда для установки: удалите записи Git, откройте новую оболочку, выполните choco install openvpn и затем восстановите их.

Оба подхода работают по одной причине, и второй безопасен только если вы действительно восстановите записи. Удаление usr/bin Git из PATH навсегда ломает подписанные коммиты, и следующий инструмент, который ожидает работающий gpg, завершается со своим собственным сообщением, не имеющим ничего общего с OpenVPN. Если вы выбираете временный путь, сохраните исходное значение Path в тикете, чтобы восстановление было вставкой, а не пересборкой. Упорядочивание записей — это долговременное исправление; их удаление — обходной путь со сроком годности.

Проверьте, затем верните на место

Проверьте до и после в том же контексте пользователя, который будет использовать Chocolatey. where.exe gpg перечисляет каждое совпадение в порядке разрешения, поэтому первая строка — та, которая будет запущена; Get-Command gpg -All даёт тот же ответ с большей детализацией в PowerShell. Затем gpg --version подтверждает, какая сборка ответила.

Если where.exe всё ещё первым перечисляет копию Git, переупорядочивание не дошло до этой сессии, и никакая переустановка не поможет. Проверьте как PATH машины, так и пользователя с помощью [Environment]::GetEnvironmentVariable('Path','Machine') и тот же вызов с 'User', потому что действующий список собирается из обоих. После успешной установки проверьте ещё раз с помощью openvpn --version и один раз запустите службу или GUI, поскольку пакет может установиться чисто и всё же оставить службу, которая не запустится.

Если правильно упорядоченный PATH всё ещё не работает, оставшаяся переменная — версия пакета. Закреплённый пакет Chocolatey может ожидать определённую сборку GnuPG или путь установки, которых на вашей машине нет.

Прочитайте собственный журнал пакета, прежде чем менять что-либо ещё. C:\ProgramData\chocolatey\logs\chocolatey.log записывает командную строку, которая не сработала, и каталог, из которого она запускалась, что говорит вам, была ли неудавшаяся команда проверкой подписи, извлечением или скриптом после установки. Это различие решает, отлаживаете ли вы вообще ещё gpg.

Привычка, предотвращающая повторение, — относиться к PATH как к общему состоянию с документированным порядком, а не как к мешку каталогов. Когда вы устанавливаете инструмент, приносящий распространённое имя бинарного файла, проверьте, что он затеняет в следующей оболочке, которую вы откроете. Затем запишите порядок, на котором вы остановились, потому что следующий установщик добавит к нему, и следующий человек будет гадать, почему проверка подписи не проходит на машине, где ничего не изменилось. Один where.exe перед установкой экономит весь цикл.

Похожие статьи