User Tools

Site Tools


Provisioning: OS X

We use a bunch of tools and packages to develop software and get things done. For the most part, there are nice installers for everything, but they can take some time. This guide attempts to list stuff that's worth installing and roughly how to do it. If you're following this guide, please update any instructions that are missing, insufficient, outdated, etc.

Things are listed in the order that you'll probably want to install things.

This guide favors ease-of-install, use, and maintenance over install time and disk space. There are a few unattended long-running steps in here.

Downloading Programs from the Internet

Apple tries to be secure and such nowadays. By default, when you download a program from the Internet, you can't just run it the first time you open it after downloading. The first time you need to open Finder, go to the Applications folder, and right-click on the application you just installed and click open.

You only need to do this the first time for anything you download.


The default terminal app for OS X is pretty crappy. iTerm2 is a pretty great replacement. Pretty much everyone who codes on a Mac uses it.

XCode and XCode Command Line Tools

IIRC, XCode doesn't come installed. Open the App Store, search for XCode, and install it (this gives you stuff like the system compiler in the easiest way).

XCode has lots of optional components that aren't installed by default. That's fine, things that need them will prompt you for them intuitively, this is just a heads up to say don't be surprised if things ask you to install XCode additional stuff and go ahead and do it.


Homebrew is a package manager for OS X (like apt from debian, or yum from suse, etc). As of this writing, brew is easily the most user-friendly and fast OS X package manager. It replaces macports.

Visit to install.

If you find you're missing a utility you're used to having, you can likely just brew install programname. Failing that, googling “homebrew programname” is pretty effective.

Brew does not use or require sudo in the common case. Do not run brew commands with sudo.

If things are wonky, try running brew doctor, it's a built-in self-diagnosis that'll often be able to tell you what to fix. I've needed this twice in five years - brew is pretty stable.


Most things make it into brew core pretty quickly. Sometimes you want to install third-party stuff. These are called “tap”s in brew. I think the only thing I have tapped worth it for everyone is:

brew tap armmbed/formulae

Which is ARM's official release of arm-none-eabi-gcc.

Install Packages

There are a bunch of packages that are useful. This list is everything I have installed on my machine as of this writing (from brew list):

ant apr apr-util arm-none-eabi-gcc arpack aspell atk atkmm autoconf autogen automake bash bash-completion bash-git-prompt bdw-gc binutils bison boost c-ares cairo cairomm calc cloc cloog cmake coreutils cppcheck curl cvs dcfldd dfu-util dirmngr doxygen e2fsprogs ecj eigen enchant epstool ffmpeg fftw findutils flex fltk fontconfig freetype gawk gcc gd gdb gdbm gdk-pixbuf gerbv gettext ghostscript git git-extras gl2ps glib glibmm glpk gnome-icon-theme gnu-getopt gnu-sed gnupg gnupg2 gnuplot go gobject-introspection gpg-agent grafana graphicsmagick gsettings-desktop-schemas gsl gtk+ gtk+3 gtkmm gtksourceview3 guile harfbuzz hdf5 help2man hicolor-icon-theme hidapi hub icu4c ilmbase imagemagick inkscape jansson jbig2dec jpeg lame libassuan libcroco libelf libepoxy libevent libffi libftdi libgcrypt libgpg-error libksba liblqr libmpc libpng librsvg libsigc++ libtiff libtool libunistring libusb libusb-compat libwebsockets libxml2 libxslt libyaml lighttpd links little-cms little-cms2 lua meld mercurial metis mobile-shell moreutils mosquitto mpfr mplayer mysql nmap node octave open-ocd openexr openjpeg openssl pandoc pango pangomm pcre pdsh perl pinentry pixman pkg-config plotutils poppler popt portmidi postgresql protobuf psgrep pssh pstoedit pstree pth pwgen python python3 qhull qpdf qrupdate qscintilla2 readline ruby sdl sdl_image sdl_mixer sdl_ttf shared-mime-info sip smpeg socat sqlite ssh-copy-id sshfs subversion suite-sparse suite-sparse421 szip tbb transfig tree ttylog unoconv veclibfort vim watch webp wget wmctrl x264 xvid xz yasm

Running brew install that list is probably a good start.

In some cases, brew will tell you that there's a “system” version (e.g. the Python that ships with OS X) and offer to replace it. In general, choose the brew version of everything. The stuff that ships with OS X is really out of date and brew fixes that.

Related, sometimes brew will install things, but not add them to your path by default. It usually prints a message when it does this. If you think something should be installed by isn't in your path, the easiest thing to do is simply run brew install thing again, which will install it, give an error, or tell you it hasn't linked it for some such reason. I've not yet run into a problem from linking things, but YMMV.

Pretty sure brew tells you the command to run, but it's just brew link thing or sometimes brew link -f thing (force)


You should have up to date python2 and python3 installs from the brew step above.

Managing python2 vs python3 stuff can be annoying. We try to always be explicit in our shebang lines so the right version of python runs. We also try to use python3 for everything that we write. How does this affect you? Invoke scripts with ./ not python so they can choose the right version.

pip is the python package manager. 99% sure it's installed from the brew stuff above. If it's not, add that step here.

Here's what I currently have installed on my machine. Once for py2k, once for py3k:

You should not need to use sudo with pip ON MAC (Linux needs sudo still IIRC). Don't use sudo or directories will end up owned as root and you'll be sad.

pip2 install alabaster argh Babel colorama colorterm configobj coverage coveralls crcmod dnet docopt docutils easywatch enum34 future imagesize Jinja2 MarkupSafe meld mercurial nose numpy pandas pathtools pcapy Pillow protobuf pssh py pyasn1 pycrypto pyelftools pygame Pygments pygobject pylibftdi pyserial pytest pytz PyYAML requests scapy scipy sh six smmap snowballstemmer Sphinx sphinx-rtd-theme staticjinja stormloader TBB Twisted watchdog zope.interface
pip3 install alabaster Babel colorama colorlog configobj crcmod docutils enum34 future imagesize Jinja2 latexcodec Markdown MarkupSafe numpy pluggy psutil py pybtex pyelftools Pygments pylibftdi pyserial pytz PyYAML requests scipy sh six snowballstemmer Sphinx stormloader termcolor tox virtualenv


This is easy on Mac. There's one real option: the giant package with all of Latex, which is great.

Download and install from here:


First you need to install FUSE for OS X:

Then install tup:

brew tap homebrew/fuse

brew install homebrew/fuse/tup


If you don't have an account on energy / access to shed (or know what that means), e-mail Pat and Branden with: 1. Your preferred username, and 2. Your ssh public key.

Grab a copy of shed:

svn co svn+ssh://

You should be able to go to any paper in shed/papers and run tup to build at this point.


Pretty much all the software and hardware we generate is on GitHub:

You probably want to set up your SSH key with GitHub:

Once that's done, you can clone any repo (such as via git clone


I think that's everything. You should be in a pretty good place from here.

provisioningmac.txt · Last modified: 2017/02/11 23:43 by ppannuto