세 가지 결함이 같은 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에 요청하며, 문서는 이것이 다른 소프트웨어에 영향을 줄 수 있다고 경고합니다. OpenVPN Connect의 cask에서 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, 수동 삭제는 절대 아닙니다.

관련 글