In a previous post I provided “mouse-heavy” instructions for getting R running on your Mac. A few of the comments suggested that an “all Homebrew” solution may be preferable for some folks. Now, there are issues with this since getting “support” for what may be R issues will be very difficult on the official mailing lists as you’ll immediately be told to “use the official distribution” by some stalwart R folks (this happens on StackOverflow and other forums as well). However, if you have a thick skin and can be somewhat self-sustaining, Homebrew is a superb alternative to setting up your R environment (and other things) on your OS X system.
What is ‘Homebrew’?
Homebrew is the “missing package manager for OS X”. It’s similar to apt
, yum
and other package managers on linux/BSD that enable you to install open source (and other types of) packages without having to do the download→unarchive→compile→curse→google→compile→curse→google some more→compile→smile→test→install dance manually. MacPorts is another third-party package manager for OS X, but I use Homebrew, so you get Homebrew examples here.
Homebrew’s inventory of packages comes from github repositories that contain “Formulas” for where to get package components and how to (literally) make
them work on OS X. Here’s a small-ish example (some Formula are fairly long/involved/complex) of a Homebrew Formula for the cowsay
utility (what, you don’t like to have ASCII animals give you handy messages?):
class Cowsay < Formula
desc "Configurable talking characters in ASCII art"
homepage "https://web.archive.org/web/20120225123719/http://www.nog.net/~tony/warez/cowsay.shtml"
url "http://ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/c/cowsay/cowsay_3.03.orig.tar.gz"
sha256 "0b8672a7ac2b51183780db72618b42af8ec1ce02f6c05fe612510b650540b2af"
bottle do
cellar :any_skip_relocation
revision 1
sha256 "c041ce7fbf41fd89bf620ae848e3b36fe1e69ab3e2dfca18bc2f2e79cfe8063a" => :el_capitan
sha256 "ffacfb987481394174267fd987dea52607825e3542d1ea3d0b7aa4ccf7ea5cc5" => :yosemite
sha256 "12c41b969af30817a4dc7ec25572fe1b707b9d4dcb46d8cc06d22264594219c1" => :mavericks
end
# Official download is 404:
# url "http://www.nog.net/~tony/warez/cowsay-3.03.tar.gz"
def install
system "/bin/sh", "install.sh", prefix
mv prefix/"man", share
end
test do
output = shell_output("#{bin}/cowsay moo")
assert output.include?("moo") # bubble
assert output.include?("^__^") # cow
end
end
It has:
- a description of what the package is
- the official location of the program/libraries “home”
- where the main URL of the contents of the program/library is
- weird hex strings to help the Homebrew ecosystem now pwn you
- instructions for how to install (with optional patching of problematic code on particular setups)
- test/validation instructions
(You can/should overlook the fact they use icky Ruby for this whole thing.)
There are thousands of Formula in the main Homebrew repository and you can “tap” other (properly organized) GitHub repositories for other (usually task-specific) formula. We’ll need to do this for R.
Finally, the Homebrew community has also come up with the notion of Casks where actual binary OS X programs (and other things) can be installed. We’ll use this as well for some ancillary components.
Apart from the ease of initial setup, the truly compelling part of using Homebrew is that all it takes to update components/libraries is to do a:
brew update && brew upgrade
from a Terminal prompt. You should get into the habit of issuing those commands daily-ish.
Yes, you will need to become comfortable in the Terminal (or, preferably, iTerm 2) to use the Homebrew ecosystem (though there are some efforts to make this more GUI-user friendly).
Using Homebrew to Create & Maintain Your R Installation
I won’t provide much (if any) color commentary to the commands below. Suffice it to say that in a few short lines of a script, you’ll end up having:
- R (with
gfortran
and the vast majority of required support libraries for many packages)
- Oracle Java (a later step in the sequence ensures R knows about your Java install)
- X11 (XQuartz)
- MacTex
- RStudio
- extra SVG, XML, curl, geo-munging and C++ support libraries
- A cool font for RStudio (FiraCode, though that’s not necessary)
- iTerm 2 (optional)
- GitUp git gui (optional)
If it’s your first time using Homebrew you’ll need to do this:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
NOTE that I’m generally against piping output of curl
to run raw on your system without validation, so you can download https://raw.githubusercontent.com/Homebrew/install/master/install and verify it (or ask a security friend to verify it), but you’ll be trusting the Homebrew ecosystem to not pwn your system for the rest of your time using it, so as long as you trust that I gave you the proper URL to get to the installer, cut/paste away.
Once Homebrew is setup I’d recommend copying and pasting each line (below) one-by-one to get familiar with Homebrew operations and messaging.
This can be a pretty scary experience if you’re not used to the command-line, so drop a note in the comments or on Twitter (target @hrbrmstr and use the #rstats
#homebrew
tags) if some things go awry or get confusing and I’ll try to help as much as I can.
brew tap caskroom/cask
brew install brew-cask
brew install Caskroom/cask/xquartz
brew cask install java
brew tap homebrew/science
brew install R --with-openblas # added --with-openblas based on a spiffy comment by Lincoln Mullen
brew install Caskroom/cask/rstudio
# For latex:
brew cask install mactex
# OR YOU CAN DO
brew install gnupg
brew cask install basictex # suggested by @noamross
# plus the following, provided by Kras.Pten
# read why here: http://rud.is/b/2015/10/22/installing-r-on-os-x-100-homebrew-edition/#comment-10603
sudo tlmgr update –-self
sudo tlmgr update –-all
sudo tlmgr install titling framed inconsolata
# DO NOT DO BOTH!
brew install libsvg curl libxml2 gdal geos boost
R CMD javareconf JAVA_CPPFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
brew tap caskroom/fonts
brew cask install font-fira-code
brew cask install iterm2
brew cask install gitup # if you want a GUI for git stuff (h/t @jennybryan)
That’s quite a bit less clicking/typing from what was required in the previous post.
Fin
I validated that entire configuration on a completely fresh installation of El Capitan (OS X 10.11) in a VM. At the end, I had a fully-functioning data-science setup. Hopefully, you will as well.
If you have suggestions for other Homebrew things to add to make a good “data science OS X setup”, drop a note in the comments!
P.S.
Once you have a full Homebrew & “Cask” setup, the way to keep up-to-date with everything is more like:
brew update && brew upgrade brew-cask && brew cleanup && brew cask cleanup
but an complete “how to use Homebrew” guide is beyond the scope of this post.