Три разные неисправности несут одно и то же сообщение об ошибке cask, и у каждой свой путь восстановления. Деинсталлятор поставщика может отсутствовать в установленной версии, вспомогательный процесс может всё ещё работать и удерживать свои файлы, или квитанция пакета может не совпадать с тем, что лежит на диске. Старый форумный обход, который спас один из этих случаев, ничего не говорит о том, какой из них у вас. Чтение собственной записи cask — это способ это выяснить.

Три неисправности, которые выглядят одинаково

Отсутствующий деинсталлятор выглядит как путь, которого нет, когда cask пытается его запустить. Живой вспомогательный процесс выглядит как удаление, которое начинается и затем застревает, или как приложение, которое снова появляется после выхода из него. Устаревшая квитанция выглядит так, когда собственная запись cask и база данных установщика расходятся в том, установлен ли продукт вообще.

Сохраните первый текст ошибки, прежде чем что-либо повторять. Вторая попытка перезаписывает состояние, которое создало сообщение, и именно исходная строка нужна сопровождающему или поставщику, чтобы различить эти случаи. Скопируйте её туда, где она переживёт повтор.

Если этот VPN несёт соединение, которое вы используете для работы, сначала подготовьте другой путь администрирования. Удаление клиента, который даёт вам доступ, — это решение об окне обслуживания, а не о Homebrew. Именно такой порядок делает неудачное удаление восстановимым, а не окончательным.

Прочитайте, что cask на самом деле установил

Собственный взгляд Homebrew — самое дешёвое доступное доказательство, и он ничего не меняет:

brew info --cask openvpn-connect
brew list --cask openvpn-connect

Первая команда печатает метаданные cask и артефакты, которыми он управляет; вторая перечисляет то, что записано как установленное. Ни одна не доказывает, что каждый вспомогательный процесс на машине соответствует текущему рецепту, и именно поэтому более старая установка может отказать так, как текущий источник cask не описывает. Относитесь к двум выводам как к утверждению, которое нужно проверить, а не как к последнему слову о том, что существует.

Сравните записанную версию с собственной версией приложения, прежде чем выбирать путь. Расхождение объясняет отсутствующий деинсталлятор без более глубокой неисправности, и ответ — обновление до версии, которую ожидает cask, а не ручная чистка.

Что добавляет zap и сколько это стоит

Блок удаления в cask обрабатывает артефакты, которые объявляет рецепт: закрытие приложения, выгрузку задач запуска, удаление элемента входа, забывание квитанций пакета и удаление пакета приложения. Это обычный путь, и именно он должен работать.

--zap — это другой запрос. Он просит Homebrew удалить также пользовательские настройки и общие ресурсы, и документация предупреждает, что это может повлиять на другое программное обеспечение. В cask OpenVPN Connect блок zap удаляет openvpn.keychain-db и очищает данные поддержки приложений пользователя, а значит, сохранённые учётные данные и профили подключения уходят вместе с ним. Если профиль получен от организации, убедитесь, что можете зарегистрироваться заново, прежде чем выбирать этот путь.

ConditionPath that fitsPath to avoid
Uninstaller path missing after an OS upgradeUpgrade the cask to the version matching the appHand-writing a replacement script
Helper still running during removalQuit the app and its menu agent, then retryDeleting the bundle while the helper runs
Receipt exists but files are goneForget the receipt with the cask's own toolingRecursive deletion of the Caskroom entry
You need the machine clean and can re-enrollZap, after reading the stanzaZap on a machine whose profiles you cannot rebuild

Пути, которые выглядят решительно и таковыми не являются

Написать поддельный remove.sh, который завершается с нулевым кодом выхода, — худший вариант в списке. Он заставляет удаление сообщить об успехе, тогда как задачи запуска, квитанции и данные приложений остаются на месте, поэтому следующая установка наследует наполовину удалённый продукт и запись, утверждающую обратное.

Ручное удаление каталога Caskroom или пакета приложения создаёт похожее состояние с другой стороны. Файлы исчезают, а квитанция остаётся. Тогда каждую следующую команду приходится обдумывать относительно машины, которая больше не соответствует собственной базе.

brew update-reset для всего репозитория — это большее вмешательство, чем оправдывает один неудачный cask. Он меняет состояние ваших tap, чтобы исправить проблему, которая никогда не касалась состояния tap, и может оставить вас отлаживать другой Homebrew, не тот, с которого вы начали.

Решение по порядку

Идите по порядку: прочитайте записанные артефакты cask, сравните версии, закройте каждый работающий компонент, повторите обычное удаление и только затем рассмотрите zap. Если обычный путь всё ещё не работает, сохраните ошибку и отнесите её сопровождающим cask или поставщику вместе с номерами версий.

Cask Cookbook прямо говорит, что установщикам пакетов нужны специфичные для продукта приёмы удаления и что zap необязателен и может удалять общие ресурсы. Эта рамка и есть правило решения: сначала обычное удаление, zap — когда вы принимаете цену учётных данных, ручное удаление — никогда.

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