Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Little Snitch uninstall fails: should point out how to manuallly uninstall instead of trying a failing automatic uninstall #187348

Open
6 tasks done
corneliusroemer opened this issue Oct 3, 2024 · 0 comments

Comments

@corneliusroemer
Copy link

corneliusroemer commented Oct 3, 2024

Verification

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:

  1. Install Little Snitch using Homebrew: brew install little-snitch
  2. Attempt to uninstall using brew uninstall little-snitch
  3. Enter sudo password when asked
  4. Observe result: little snitch is still running when inspected via htop, it's still installed
  5. Rerun the uninstall: brew uninstall little-snitch
  6. 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): #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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant