homebrew-cask
homebrew-cask copied to clipboard
Little Snitch uninstall fails: should point out how to manuallly uninstall instead of trying a failing automatic uninstall
Verification
- [X] I understand that if I ignore these instructions, my issue may be closed without review.
- [X] I have retried my command with
--force
. - [X] I ran
brew update-reset && brew update
and retried my command. - [X] I ran
brew doctor
, fixed as many issues as possible and retried my command. - [X] I have checked the instructions for reporting bugs.
- [X] I made doubly sure this is not a checksum does not match / SHA256 mismatch error (do not open an issue before trying to open a PR to fix first).
Description of issue
When attempting to uninstall Little Snitch using brew uninstall little-snitch
, the operation fails due to permission errors. The uninstallation process appears to partially complete but leaves the application and daemon running, with no clear way to fully remove the software through Homebrew.
To reproduce:
- Install Little Snitch using Homebrew:
brew install little-snitch
- Attempt to uninstall using
brew uninstall little-snitch
- Enter sudo password when asked
- Observe result: little snitch is still running when inspected via htop, it's still installed
- Rerun the uninstall:
brew uninstall little-snitch
- Observe the resulting message
Proposed solution:
Either fix the uninstall, or in case this is not possible, point out how to correctly uninstall (instead of attempting an uninstall that won't work). The correct way to uninstall is to move from finder to trash. This removes the system extensions, see https://help.obdev.at/littlesnitch6/intro-uninstall
Homebrew should not attempt an uninstall that it knows will fail and leaves the user confused.
Old issue (closed and locked despite not being done): https://github.com/Homebrew/homebrew-cask/issues/1801
Command that failed
brew uninstall little-snitch
Output of command with --verbose --debug
First uninstall:
$ brew uninstall little-snitch
==> Uninstalling Cask little-snitch
==> Backing App 'Little Snitch.app' up to '/opt/homebrew/Caskroom/little-snitch/
==> Removing App '/Applications/Little Snitch.app'
==> Using sudo to gain ownership of path '/Applications/Little Snitch.app'
Password:
chown: /Applications/Little Snitch.app/Contents/CodeResources: Operation not permitted
[additional errors truncated for brevity]
Error: Permission denied @ apply2files - /Applications/Little Snitch.app/Contents/CodeResources
This is the second uninstall:
...SNIP hundreds of lines of loading formulas that make the comment length exceed Github limits...
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading tesseract
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading deno
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading deno
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading readline
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading sqlite
==> Uninstalling Cask little-snitch
/opt/homebrew/Library/Homebrew/brew.rb (Cask::CaskLoader::FromPathLoader): loading /opt/homebrew/Caskroom/little-snitch/.metadata/6.1.1/20240930124526.407/Casks/little-snitch.json
==> Uninstalling artifacts
==> 2 artifacts defined
#<Cask::ArtifactSet: {#<Cask::Artifact::App:0x0000000166e1f570 @cask=#<Cask little-snitch /opt/homebrew/Caskroom/little-snitch/.metadata/6.1.1/20240930124526.407/Casks/little-snitch.json>, @dsl_args=["Little Snitch.app"], @source_string="Little Snitch.app", @target_string="">, #<Cask::Artifact::Zap:0x000000016ebf6d68 @cask=#<Cask little-snitch /opt/homebrew/Caskroom/little-snitch/.metadata/6.1.1/20240930124526.407/Casks/little-snitch.json>, @dsl_args=[{:trash=>["/Library/Application Support/Objective Development/Little Snitch", "/Library/Caches/at.obdev.LittleSnitchConfiguration", "/Library/Extensions/LittleSnitch.kext", "/Library/Little Snitch", "/Library/Logs/LittleSnitchDaemon.log", "/Library/StagedExtensions/Library/Extensions/LittleSnitch.kext", "~/Library/Application Support/Little Snitch", "~/Library/Caches/at.obdev.LittleSnitchAgent", "~/Library/Caches/at.obdev.LittleSnitchConfiguration", "~/Library/Caches/at.obdev.LittleSnitchHelper", "~/Library/Caches/at.obdev.LittleSnitchSoftwareUpdate", "~/Library/Caches/com.apple.helpd/Generated/at.obdev.LittleSnitchConfiguration.help*", "~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/at.obdev.LittleSnitchConfiguration.help*", "~/Library/Logs/Little Snitch Agent.log", "~/Library/Logs/Little Snitch Helper.log", "~/Library/Logs/Little Snitch Installer.log", "~/Library/Logs/Little Snitch Network Monitor.log", "~/Library/Preferences/at.obdev.LittleSnitchAgent.plist", "~/Library/Preferences/at.obdev.LittleSnitchConfiguration.plist", "~/Library/Preferences/at.obdev.LittleSnitchInstaller.plist", "~/Library/Preferences/at.obdev.LittleSnitchNetworkMonitor.plist", "~/Library/Preferences/at.obdev.LittleSnitchSoftwareUpdate.plist", "~/Library/Saved Application State/at.obdev.LittleSnitchInstaller.savedState", "~/Library/WebKit/at.obdev.LittleSnitchConfiguration"], :rmdir=>"/Library/Application Support/Objective Development"}], @directives={:trash=>["/Library/Application Support/Objective Development/Little Snitch", "/Library/Caches/at.obdev.LittleSnitchConfiguration", "/Library/Extensions/LittleSnitch.kext", "/Library/Little Snitch", "/Library/Logs/LittleSnitchDaemon.log", "/Library/StagedExtensions/Library/Extensions/LittleSnitch.kext", "~/Library/Application Support/Little Snitch", "~/Library/Caches/at.obdev.LittleSnitchAgent", "~/Library/Caches/at.obdev.LittleSnitchConfiguration", "~/Library/Caches/at.obdev.LittleSnitchHelper", "~/Library/Caches/at.obdev.LittleSnitchSoftwareUpdate", "~/Library/Caches/com.apple.helpd/Generated/at.obdev.LittleSnitchConfiguration.help*", "~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/at.obdev.LittleSnitchConfiguration.help*", "~/Library/Logs/Little Snitch Agent.log", "~/Library/Logs/Little Snitch Helper.log", "~/Library/Logs/Little Snitch Installer.log", "~/Library/Logs/Little Snitch Network Monitor.log", "~/Library/Preferences/at.obdev.LittleSnitchAgent.plist", "~/Library/Preferences/at.obdev.LittleSnitchConfiguration.plist", "~/Library/Preferences/at.obdev.LittleSnitchInstaller.plist", "~/Library/Preferences/at.obdev.LittleSnitchNetworkMonitor.plist", "~/Library/Preferences/at.obdev.LittleSnitchSoftwareUpdate.plist", "~/Library/Saved Application State/at.obdev.LittleSnitchInstaller.savedState", "~/Library/WebKit/at.obdev.LittleSnitchConfiguration"], :rmdir=>"/Library/Application Support/Objective Development", :signal=>[]}>}>
==> Uninstalling artifact of class Cask::Artifact::App
Error: It seems there is already an App at '/opt/homebrew/Caskroom/little-snitch/6.1.1/Little Snitch.app'.
/opt/homebrew/Library/Homebrew/cask/artifact/moved.rb:151:in `move_back'
/opt/homebrew/Library/Homebrew/cask/artifact/moved.rb:21:in `uninstall_phase'
/opt/homebrew/Library/Homebrew/cask/installer.rb:490:in `block in uninstall_artifacts'
/opt/homebrew/Library/Homebrew/cask/artifact_set.rb:10:in `each'
/opt/homebrew/Library/Homebrew/cask/artifact_set.rb:10:in `each'
/opt/homebrew/Library/Homebrew/cask/installer.rb:487:in `uninstall_artifacts'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `bind_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `validate_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
/opt/homebrew/Library/Homebrew/cask/installer.rb:418:in `uninstall'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `bind_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `validate_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
/opt/homebrew/Library/Homebrew/cask/uninstall.rb:14:in `block in uninstall_casks'
/opt/homebrew/Library/Homebrew/cask/uninstall.rb:9:in `each'
/opt/homebrew/Library/Homebrew/cask/uninstall.rb:9:in `uninstall_casks'
/opt/homebrew/Library/Homebrew/cmd/uninstall.rb:73:in `run'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `bind_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/call_validation.rb:270:in `validate_call'
/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11589/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
/opt/homebrew/Library/Homebrew/brew.rb:94:in `<main>'
==> Uninstalling Cask little-snitch
Output of brew doctor
and brew config
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: Some installed formulae are deprecated or disabled.
You should find replacements for the following formulae:
[email protected]
Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae and may need to be deleted.
Unexpected dylibs:
/usr/local/lib/liblz4.1.9.3.dylib
/usr/local/lib/libnw.0.dylib
Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae and may need to be deleted.
Unexpected header files:
/usr/local/include/endian.h
/usr/local/include/lz4.h
/usr/local/include/lz4frame.h
/usr/local/include/lz4frame_static.h
/usr/local/include/lz4hc.h
Warning: Unbrewed '.la' files were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae and may need to be deleted.
Unexpected '.la' files:
/usr/local/lib/libnw.la
Warning: Unbrewed '.pc' files were found in /usr/local/lib/pkgconfig.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae and may need to be deleted.
Unexpected '.pc' files:
/usr/local/lib/pkgconfig/liblz4.pc
Warning: Unbrewed static libraries were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae and may need to be deleted.
Unexpected static libraries:
/usr/local/lib/liblz4.a
/usr/local/lib/libnw.a
HOMEBREW_VERSION: 4.4.0-30-g3994768
ORIGIN: https://github.com/Homebrew/brew
HEAD: 39947683497c27bf6c7d6825ca0e8387613eb9d6
Last commit: 5 hours ago
Core tap HEAD: 462ae2e4289e8834890de296c3cec2177b945733
Core tap last commit: 69 minutes ago
Core tap JSON: 03 Oct 05:23 UTC
Core cask tap HEAD: 8e2c8fa28ca102b55f448aaed060e25fde1f96cb
Core cask tap last commit: 4 hours ago
Core cask tap JSON: 03 Oct 05:23 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_EDITOR: vim
HOMEBREW_MAKE_JOBS: 10
HOMEBREW_SORBET_RUNTIME: set
Homebrew Ruby: 3.3.5 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.3.5/bin/ruby
CPU: 10-core 64-bit arm_firestorm_icestorm
Clang: 16.0.0 build 1600
Git: 2.46.2 => /opt/homebrew/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 15.0-arm64
CLT: 16.0.0.0.1.1724870825
Xcode: 16.0 => /Applications/Xcode-16.0.0.app/Contents/Developer
Rosetta 2: false
Output of brew tap
penjdk/openjdk
brewsci/bio
clojure/tools
corneliusroemer/nextclade
dxtich/core
gautamkrishnar/socli
homebrew/cask
homebrew/core
homebrew/services
mike-engel/jwt-cli
robotsandpencils/made
saulpw/vd
sstadick/hck
starkandwayne/cf
teamookla/speedtest
thecasualcoder/stable
tidwall/jj
tmonfre/tmonfre
tng/please
ynqa/tap