2009-05-21 00:04:11 +01:00
|
|
|
Homebrew
|
|
|
|
========
|
2009-09-04 18:37:06 +01:00
|
|
|
Homebrew is a package management system for OS X. In other words it is a tool
|
|
|
|
that helps you manage the installation of other open source software on your
|
|
|
|
Mac.
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-07-22 02:38:08 +01:00
|
|
|
Here's why you may prefer Homebrew to the alternatives:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-24 18:54:27 +01:00
|
|
|
1. Zero configuration installation
|
2009-09-02 14:41:36 +01:00
|
|
|
Copy the contents of this directory to /usr/local. Homebrew is now ready
|
|
|
|
for use.
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
2. Or… install anywhere!
|
2009-09-02 14:41:36 +01:00
|
|
|
You can actually stick this directory anywhere. Like ~/.local or /opt or
|
|
|
|
/lol if you like. You can even move this directory somewhere else later.
|
|
|
|
Homebrew never changes any files outside of its prefix.
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
3. The GoboLinux approach
|
|
|
|
Packages are installed into their own prefix (eg. /usr/local/Cellar/wget)
|
2009-09-11 14:48:51 +01:00
|
|
|
and then symlinked into the Homebrew prefix (eg. /usr/local).
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
This way packages can be managed with existing command line tools. You can
|
|
|
|
uninstall with rm -rf, list with find, query with du. It also means you
|
|
|
|
can easily install multiple versions of software or libraries and switch
|
|
|
|
on demand.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
Of course you don't have to do anything by hand, we also provide a
|
|
|
|
convenient and fully-featured four-letter tool called brew.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
4. You don't have to sudo
|
2009-09-02 14:41:36 +01:00
|
|
|
It's up to you. We recommend not--see the relevant later section.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
5. Easy package creation
|
2009-09-02 14:41:36 +01:00
|
|
|
Packages are just Ruby scripts. Generate a template with:
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
brew create http://foo.com/tarball-0.8.9.tgz
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Homebrew will automatically open it for you to tweak with TextMate or
|
|
|
|
$EDITOR.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
Or edit an existing formula:
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
brew edit foo
|
2009-07-24 15:10:01 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
6. DIY package installation
|
2009-09-02 14:41:36 +01:00
|
|
|
MacPorts doesn't support the beta version? Need an older version? Need
|
2009-10-09 03:25:49 +01:00
|
|
|
custom compile flags? The Homebrew tool-chain is carefully segregated so
|
2009-09-02 14:41:36 +01:00
|
|
|
you can build stuff by hand but still end up with package management.
|
2009-07-24 15:10:01 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
Just install to the Cellar and then call brew link to symlink that
|
2009-09-04 18:37:06 +01:00
|
|
|
installation into your PATH, eg.
|
2009-08-12 13:43:51 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
./configure --prefix=/usr/local/Cellar/wget/1.10
|
|
|
|
make install
|
|
|
|
brew ln wget
|
2009-08-12 13:43:51 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Or Homebrew can figure out the prefix:
|
2009-07-24 15:10:01 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
./configure `brew diy`
|
|
|
|
cmake . `brew diy`
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
This means you can also install multiple versions of the same package and
|
|
|
|
switch on demand.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
7. Optimization
|
2009-10-09 03:25:49 +01:00
|
|
|
We optimize for (Snow) Leopard Intel, binaries are stripped, compile flags
|
|
|
|
are tuned to your exact Mac model. Slow software sucks.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
8. Making the most of OS X
|
2009-10-09 03:25:49 +01:00
|
|
|
A touch of RubyCocoa, a cheeky sysctl query or two and a smattering of
|
|
|
|
FSEvent monitoring. In these manic days of cross-platform development,
|
2009-11-03 19:03:05 +00:00
|
|
|
it's sometimes a welcome relief to use something that is better because
|
2009-10-09 03:25:49 +01:00
|
|
|
it isn't too generalized.
|
2009-07-28 00:31:21 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
9. No duplication
|
|
|
|
MacPorts is an autarky -- you get a duplicate copy of zlib, OpenSSL,
|
|
|
|
Python, etc. Homebrew isn't, and as a result everything you install has
|
|
|
|
less dependencies and builds significantly faster.
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
Homebrew can integrate with Ruby gems, CPAN and Python EasyInstall. These
|
2009-09-04 18:37:06 +01:00
|
|
|
tools exist already and do the job great. We don't duplicate packaging
|
|
|
|
effort, we just improve on it by making these tools install with more
|
|
|
|
management options.
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
10. Fork with Git
|
|
|
|
The formula are all on git, so just fork to add new packages, or add extra
|
|
|
|
remotes to get packages from more exotic maintainers.
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
11. Surfing the cutting edge
|
2009-10-09 03:25:49 +01:00
|
|
|
If the package provides a git://, svn://, cvs:// or hg:// url you can
|
|
|
|
choose to install that instead and then update as often as you like.
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-09-04 18:37:06 +01:00
|
|
|
12. Homebrew has a beer theme
|
2009-09-02 14:41:36 +01:00
|
|
|
Beer goggles will help you to evangelise Homebrew more effectively.
|
|
|
|
|
2009-12-02 15:26:11 +00:00
|
|
|
13. Homebrew can help hook you up
|
2009-09-02 14:41:36 +01:00
|
|
|
There's no conclusive scientific evidence as yet, but I firmly believe
|
|
|
|
it's just a matter of time and statistics.
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-12 19:04:15 +01:00
|
|
|
Why you might not want to use Homebrew:
|
|
|
|
|
|
|
|
1. It's a little more hands-on than the competition. For example, we don't
|
|
|
|
set up postgresql for you after installing it, but we do provide
|
|
|
|
instructions. This isn't apathy, it's by design -- Homebrew doesn't make
|
|
|
|
assumptions about how you want your software to run. You have to have some
|
|
|
|
knowledge or be willing to learn to use Homebrew for some tasks.
|
|
|
|
|
|
|
|
2. Dependency resolution and updates are basic or not working yet.
|
|
|
|
|
2009-07-22 20:27:58 +01:00
|
|
|
I know I've made it sound so awesome you can hardly wait to rip MacPorts out
|
2009-09-02 14:41:36 +01:00
|
|
|
and embrace the fresh, hoppy taste of Homebrew, but I should point out that it
|
2009-09-12 19:04:15 +01:00
|
|
|
is really new and still under heavy development. Thanks!
|
2009-07-22 20:27:58 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Max Howell -- <http://twitter.com/mxcl>
|
2009-05-21 00:04:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
Installation
|
|
|
|
============
|
2009-10-23 14:46:59 +01:00
|
|
|
Homebrew is pretty flexible in how it can be installed and used. What follows
|
|
|
|
are probably the simplest methods.
|
2009-06-05 12:56:28 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
Download
|
|
|
|
--------
|
|
|
|
mkdir homebrew
|
|
|
|
curl -L http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C homebrew
|
2009-09-04 18:37:06 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
Homebrew can already be used, try it:
|
2009-06-05 12:56:28 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
homebrew/bin/brew install git
|
|
|
|
homebrew/bin/brew list git
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
Notice how Homebrew installed Git to homebrew/bin/git. Homebrew never touches
|
|
|
|
files outside its prefix.
|
2009-09-04 18:37:06 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
Installing to /usr/local
|
|
|
|
------------------------
|
|
|
|
We think /usr/local is the best location for Homebrew because:
|
2009-07-28 00:31:21 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
1. It's already in your PATH
|
|
|
|
2. Other software checks /usr/local for stuff (eg. RubyGems)
|
|
|
|
3. Building your own software is easier when dependencies are in /usr/local
|
2009-09-04 18:37:06 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
But… don't sudo!
|
|
|
|
----------------
|
2009-06-28 16:41:28 +01:00
|
|
|
Well clearly you can sudo if you like. Homebrew is all about you doing it your
|
2009-07-22 02:38:08 +01:00
|
|
|
way. But the Homebrew recommendation is: don't sudo!
|
|
|
|
|
|
|
|
On OS X, this requires your user to be in the admin group, but it doesn't
|
|
|
|
require sudo:
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
cpan -i MP3::Info
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-11-03 19:03:05 +00:00
|
|
|
OS X is designed to minimise sudo use, you only need it for real root-level
|
2009-09-02 14:41:36 +01:00
|
|
|
stuff. You know your /System and /usr are as clean and pure as the day you
|
|
|
|
bought your Mac because you didn't sudo. Sleep better at night!
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
If you are already the kind of guy who installed TextMate by dragging and
|
2009-07-22 02:38:08 +01:00
|
|
|
dropping it to /Applications, then you won't mind if libflac and pngcrush are
|
2009-09-02 14:41:36 +01:00
|
|
|
installed under your user privileges too. Lets face it; Homebrew is not
|
2009-07-22 02:38:08 +01:00
|
|
|
installing anything system-critical. Apple already did that.
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-07-22 02:38:08 +01:00
|
|
|
Let this be the last sudo you do for quite some time:
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
sudo chown -R `whoami` /usr/local
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-10-22 10:03:43 -05:00
|
|
|
_NOTE_: Performing the above command *may* break some programs that are already
|
|
|
|
installed in /usr/local. One specific example is mysql. Fixing mysql may be
|
|
|
|
as simple as:
|
|
|
|
|
|
|
|
sudo chown -R mysql:mysql `brew --prefix`/mysql
|
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
But! I already have a bunch of junk in /usr/local
|
|
|
|
-------------------------------------------------
|
|
|
|
Homebrew can co-exist with any software already installed in its prefix.
|
|
|
|
|
|
|
|
Installing to /usr/local
|
|
|
|
------------------------
|
|
|
|
curl -L http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C /usr/local
|
|
|
|
|
|
|
|
You may prefer this third party [installer script][sh] or [.pkg installer][pkg].
|
|
|
|
|
|
|
|
Using git to install
|
|
|
|
--------------------
|
|
|
|
If you already have git installed then this is the easiest way to install:
|
2009-09-29 20:35:25 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
cd /usr/local
|
|
|
|
git init
|
|
|
|
git remote add origin git://github.com/mxcl/homebrew.git
|
|
|
|
git pull origin master
|
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
Building Stuff
|
|
|
|
--------------
|
|
|
|
Almost everything Homebrew installs is written in C, so you need Xcode:
|
2009-07-22 02:38:08 +01:00
|
|
|
|
2009-10-23 14:46:59 +01:00
|
|
|
<http://developer.apple.com/technology/xcode.html>
|
|
|
|
|
|
|
|
Many build scripts assume MacPorts or Fink on OS X. Which isn't too much of a
|
|
|
|
problem until you uninstall them and stuff you built with Homebrew breaks. So
|
|
|
|
uninstall them (if you prefer, renaming their root folders is sufficient).
|
|
|
|
|
|
|
|
<http://trac.macports.org/wiki/FAQ#uninstall>
|
|
|
|
<http://www.finkproject.org/faq/usage-fink.php#removing>
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Uninstallation
|
|
|
|
==============
|
|
|
|
cd `brew --prefix`
|
2009-09-07 05:33:36 +08:00
|
|
|
rm -rf Cellar
|
|
|
|
brew prune
|
2009-10-23 14:46:59 +01:00
|
|
|
rm -rf Library .git* bin/brew README.md
|
2009-09-22 00:04:55 +01:00
|
|
|
|
|
|
|
It is worth noting that if you installed somewhere like /usr/local then these
|
|
|
|
uninstallation steps will leave that directory exactly like it was before
|
|
|
|
Homebrew was installed. Unless you manually added new stuff there, in which
|
|
|
|
case those things will still be there too.
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
|
|
|
|
Sample Usage
|
|
|
|
============
|
2009-05-21 00:04:11 +01:00
|
|
|
Install wget:
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-06-04 20:03:53 +01:00
|
|
|
brew install wget
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-07-22 02:38:08 +01:00
|
|
|
Update package list:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
cd /usr/local && git pull
|
|
|
|
|
|
|
|
Two ways to delete a package:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
brew uninstall wget
|
2009-09-02 14:41:36 +01:00
|
|
|
rm -rf /usr/local/Cellar/wget && brew prune
|
|
|
|
|
|
|
|
Two ways to list all files in a package:
|
|
|
|
|
|
|
|
brew list wget
|
|
|
|
find /usr/local/Cellar/wget
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
Two ways to search for a package to install:
|
2009-09-02 14:41:36 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
brew search
|
2009-07-22 02:38:08 +01:00
|
|
|
ls /usr/local/Library/Formula/
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
Two ways to see what is already installed:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
brew list
|
2009-09-02 14:41:36 +01:00
|
|
|
ls /usr/local/Cellar/
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Two ways to compute installed package sizes:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
brew info wget
|
|
|
|
du /usr/local/Cellar/wget
|
2009-05-21 12:38:34 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Show expensive packages:
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
du -md1 /usr/local/Cellar
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
A more thorough exploration of the brew command is available at the [Homebrew
|
|
|
|
wiki][wiki].
|
2009-05-21 00:04:11 +01:00
|
|
|
|
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
RubyGems, Python EasyInstall and CPAN
|
|
|
|
=====================================
|
|
|
|
These tools are already designed to make it easy to install Ruby, Python and
|
|
|
|
Perl stuff. So we resist the temptation to duplicate this packaging effort and
|
|
|
|
thus avoid accepting such formula into the main tree (although sometimes it is
|
|
|
|
necessary or prudent).
|
2009-06-28 16:41:28 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
However it's a nice option to get these other packaging systems to install
|
|
|
|
into Homebrew and there are work-in-progress instructions for how to do this
|
|
|
|
on the [wiki][].
|
2009-06-28 16:41:28 +01:00
|
|
|
|
|
|
|
|
2009-07-22 02:38:08 +01:00
|
|
|
Contributing New Formulae
|
|
|
|
=========================
|
2009-09-04 18:37:06 +01:00
|
|
|
Formulae are simple Ruby scripts. Generate a formula with most bits filled-in:
|
2009-06-18 10:32:53 +01:00
|
|
|
|
2009-10-15 09:09:01 +01:00
|
|
|
brew create http://example.com/foo-1.2.1.tar.bz2
|
2009-06-26 12:59:19 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
Check it over and try to install it:
|
2009-06-26 12:59:19 +01:00
|
|
|
|
2009-10-15 09:09:01 +01:00
|
|
|
brew install foo
|
2009-06-18 10:32:53 +01:00
|
|
|
|
2009-10-09 03:25:49 +01:00
|
|
|
Check the [wiki][] for more detailed information and tips for contribution.
|
2009-06-02 13:39:39 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
If you want your formula to become part of this distribution, fork
|
2009-10-09 03:25:49 +01:00
|
|
|
<http://github.com/mxcl/homebrew> and send mxcl a pull-request. Alternatively
|
|
|
|
maintain your own distribution. Maybe you want to support Tiger? Or use
|
|
|
|
special compile flags? Go ahead that's what git is all about! :)
|
2009-06-26 12:59:19 +01:00
|
|
|
|
2009-10-15 09:09:01 +01:00
|
|
|
The easiest way to fork is with the [github-gem][], so potentially this is
|
|
|
|
your workflow:
|
|
|
|
|
|
|
|
brew create http://example.com/foo-1.2.1.tar.bz2
|
|
|
|
git commit Library/Formula/foo.rb
|
|
|
|
github fork
|
|
|
|
git push myname master
|
|
|
|
github pull-request
|
|
|
|
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-08-31 16:01:36 +01:00
|
|
|
Licensing
|
|
|
|
=========
|
2009-09-04 18:37:06 +01:00
|
|
|
Homebrew is mostly BSD licensed although you should refer to each file to
|
2009-10-09 03:25:49 +01:00
|
|
|
confirm. Individual formulae are licensed according to their authors' wishes.
|
2009-08-31 16:01:36 +01:00
|
|
|
|
|
|
|
|
2009-05-21 00:04:11 +01:00
|
|
|
FAQ
|
|
|
|
===
|
2009-10-15 09:09:01 +01:00
|
|
|
1. Can Homebrew replace MacPorts?
|
2009-09-07 01:34:40 +01:00
|
|
|
Maybe. But remember, Homebrew is still incomplete. Be forgiving in your
|
|
|
|
approach and be willing to fork and contribute fixes. Thanks!
|
2009-05-21 00:04:11 +01:00
|
|
|
|
2009-10-15 09:09:01 +01:00
|
|
|
2. Is there an IRC channel?
|
2009-09-11 14:48:51 +01:00
|
|
|
Yes, <irc://irc.freenode.net#machomebrew>.
|
2009-10-09 03:25:49 +01:00
|
|
|
|
2009-10-15 09:09:01 +01:00
|
|
|
3. And it's on Twitter?
|
2009-10-09 03:25:49 +01:00
|
|
|
Yes, <http://twitter.com/machomebrew>.
|
2009-09-11 14:48:51 +01:00
|
|
|
|
2009-12-02 15:26:37 +00:00
|
|
|
4. And a mailing list?
|
|
|
|
Yes, <homebrew@librelist.com>, <http://librelist.com>.
|
2009-10-15 09:09:01 +01:00
|
|
|
|
2009-09-02 14:41:36 +01:00
|
|
|
[wiki]: http://wiki.github.com/mxcl/homebrew
|
2009-10-15 09:09:01 +01:00
|
|
|
[github-gem]: http://github.com/defunkt/github-gem
|
2009-10-23 14:46:59 +01:00
|
|
|
[sh]: http://gist.github.com/203926
|
|
|
|
[pkg]: http://demaree.me/x/7
|