Три різні несправності носять однакове повідомлення про помилку 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 — коли ви приймаєте ціну облікових даних, ручне видалення — ніколи.

Схожі статті