Homebrew
Prerequisites
If no Xcode is installed (and no GUI is available), we may have to install the Xcode command line utitilies manually:
xcode-select --install
Installation
Homebrew likes to install to /usr/local
[1], but one can specify any other directory:[2]
curl -OL https://raw.githubusercontent.com/Homebrew/install/master/install.sh
Adjust the install
file:
HOMEBREW_PREFIX = '/opt/homebrew'
[...]
abort <<-EOABORT unless `groups`.split.include? "staff"
Execute the install script:
$ ruby ./install ==> This script will install: /opt/homebrew/bin/brew /opt/homebrew/Library/... /opt/homebrew/share/doc/homebrew /opt/homebrew/share/man/man1/brew.1 /opt/homebrew/share/zsh/site-functions/_brew /opt/homebrew/etc/bash_completion.d/brew Press RETURN to continue or any other key to abort ==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew Password: ==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew ==> /usr/bin/sudo /usr/sbin/chown sue /Library/Caches/Homebrew ==> /usr/bin/sudo /usr/bin/chgrp admin /Library/Caches/Homebrew ==> Downloading and installing Homebrew... remote: Counting objects: 461, done. remote: Compressing objects: 100% (419/419), done. remote: Total 461 (delta 28), reused 292 (delta 17), pack-reused 0 Receiving objects: 100% (461/461), 761.55 KiB | 573.00 KiB/s, done. Resolving deltas: 100% (28/28), done. From https://github.com/Homebrew/brew * [new branch] master -> origin/master HEAD is now at 36b2af2 superenv: fix formula prefix path to consider revisions ==> Tapping homebrew/core Cloning into '/opt/homebrew/Library/Taps/homebrew/homebrew-core'... remote: Counting objects: 3660, done. remote: Compressing objects: 100% (3545/3545), done. remote: Total 3660 (delta 17), reused 446 (delta 3), pack-reused 0 Receiving objects: 100% (3660/3660), 2.75 MiB | 1.62 MiB/s, done. Resolving deltas: 100% (17/17), done. Checking connectivity... done. Tapped 3535 formulae (3,686 files, 8.6M) Warning: /opt/homebrew/bin is not in your PATH. ==> Installation successful! ==> Next steps Run `brew help` to get started
Optionally lock down the installation directory:
sudo chown -R homebrew:homebrew /opt/homebrew/ # Create a user first!
Adjust your PATH
variable accordingly:
export PATH=$PATH:/opt/homebrew/bin
sudo
We may need special sudo rules for our homebrew
user:
%staff ALL=(homebrew:homebrew) NOPASSWD: /opt/homebrew/bin/brew homebrew ALL=(ALL) NOPASSWD:SETENV: /usr/sbin/installer
- This will allow all members of the
staff
group to executebrew
as the userhomebrew
w/o providing a password. - The user
homebrew
may call theinstaller
w/o providing a password, since we didn't set one. Also, thehomebrew
user will be allowed to preserve the environment.[3] The latter may be required for some bundles (e.g. VirtualBox).
ACL
Also, some brew bundles may want to create symlinks in /usr/bin/local
and will fail when the homebrew
user is not allowed to do so. Let's use ACLs to allow that:
sudo chmod +a "homebrew allow read,execute,add_file,delete_child" /usr/local/bin
Now we should have something like this:
$ ls -lde /usr/local/bin
drwxr-xr-x+ 30 root wheel 1020 May 15 12:41 /usr/local/bin
0: user:homebrew allow list,add_file,search,delete_child
Usage
List available packages:
$ brew search | wc -l 3535
Update brew itself and all formulae:
$ sudo -H -u homebrew brew update Updated Homebrew from 3dc4841 to cfef282. Updated 2 taps (caskroom/cask, homebrew/versions).
Upgrade all packages:
sudo -H -u homebrew brew upgrade --cleanup
If the sudo calling is too cumbersome, try an alias:
$ alias brew="sudo -H -u homebrew /opt/homebrew/bin/brew" $ set -x $ brew update + sudo -H -u homebrew /opt/homebrew/bin/brew update Already up-to-date.
Brew Bundle
- brew tap adds more GitHub repos to the list of available formulae.
- Homebrew Cask can be used to install (native) Mac applications.
Let's combine[4] them:
brew tap Homebrew/bundle
Now "brew bundle
should work. We can use a Brewfile to list all the applications to install:
$ cat .Brewfile.local cask_args appdir: '/Applications/BrewBundle' # cask 'adium' # cask 'audacity' # cask 'burn' # cask 'citrix-receiver' # cask 'handbrake' cask 'firefox' # cask 'flux' # cask 'google-chrome' # cask 'libreoffice' # cask 'microsoft-lync' # cask 'osxfuse' # cask 'picasa' # cask 'skype' # cask 'sshfs' # cask 'steam' # cask 'sqlitebrowser' # cask 'soundflower' # cask 'teamviewer' cask 'thunderbird' # cask 'tunnelblick' cask 'virtualbox' # cask 'vlc' $ sudo mkdir -m 0755 -p /Applications/BrewBundle /opt/homebrew-cask $ sudo chown homebrew:homebrew /Applications/BrewBundle /opt/homebrew-cask
Try to use the 'Brewfile now:
$ brew bundle --file=$HOME/.Brewfile.local Succeeded in installing firefox Succeeded in installing thunderbird Succeeded in installing virtualbox Success: 3 Fail: 0
We need to use Homebrew Cask to list the installed packages:
$ brew cask list firefox thunderbird virtualbox
Upgrade
Upgrade all casks[5], as this isn't possible yet:[6][7]
brew cask list | xargs brew cask install --force
This doesn't work of course when Homebrew is installed as a different user. As xargs(1)
doesn't recognize aliases
[8], we may have to use a wrapper script after all:
$ cat /usr/local/bin/brew.sh #!/bin/sh sudo -H -u homebrew /usr/local/bin/brew $@ $ (brew.sh cask list | xargs brew.sh cask install --force) 2>&1 | tee ~/.log/brew-cask-upgrade.log
Bugs
Before reporting bugs, one could try to reset the Homebrew installation:
brew doctor
Annoying bugs, that were closed w/o a fix:
- #14129: Apps installed through Cask cannot be added to Dock in El Capitan
- #9586: Could "brew cask cleanup" remove older versions?
- #51538: brew cask upgrade / install fails with quarantine error
Uninstall
Uninstall Homebrew[9]:
curl -O https://raw.githubusercontent.com/Homebrew/install/master/uninstall ruby ./uninstall
Links
- homebrew-versions: Alternate versions of Casks
References
- ↑ Homebrew: Installation
- ↑ Untar anywhere
- ↑ sudoers(5)
- ↑ Brew Bundle: Bundler for non-Ruby dependencies from Homebrew
- ↑ Upgrade all the casks installed via Homebrew Cask
- ↑ A command to upgrade all casks?
- ↑ Draft Roadmap: `brew cask upgrade`
- ↑ Have xargs use alias instead of binary
- ↑ How do I uninstall Homebrew?