Homebrew не може видалити OpenVPN Connect: який шлях підходить?
Невдале видалення cask — одна з трьох несправностей. Прочитайте артефакти cask, порівняйте версії, потім виберіть між повторенням, оновленням або zap.
Три різні несправності носять однакове повідомлення про помилку 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 і очищає дані підтримки програм користувача, а це означає, що збережені облікові дані та профілі з'єднання зникають разом із ним. Якщо профіль походить від організації, переконайтеся, що можете зареєструватися знову, перш ніж вибирати цей шлях.
| Condition | Path that fits | Path to avoid |
|---|---|---|
| Uninstaller path missing after an OS upgrade | Upgrade the cask to the version matching the app | Hand-writing a replacement script |
| Helper still running during removal | Quit the app and its menu agent, then retry | Deleting the bundle while the helper runs |
| Receipt exists but files are gone | Forget the receipt with the cask's own tooling | Recursive deletion of the Caskroom entry |
| You need the machine clean and can re-enroll | Zap, after reading the stanza | Zap 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 — коли ви приймаєте ціну облікових даних, ручне видалення — ніколи.