Alex Clark <email@example.com>
Plone Consultant, Author, Core Developer
Presented to BACON-PIG @ Zenoss HQ in Annapolis MD June 24 2009 &
Presented to ZPUGDC @ Radio Free Asia in Washington DC July 6, 2009
What is buildout?
A system to create complex, repeatable environments
via Windows ini style syntax
“Pluggable” with recipes, search PyPI (http://
pypi.python.org) for ‘recipe’
Why are you doing this?
Ability to easily deploy Zenoss via buildout:
% svn co http://svn.aclark.net/svn/public/zen/trunk zen
% cd zen; python bootstrap.py; bin/buildout
Custom deployments featuring Zenoss + Plone.
Better understanding of your environment.
I like ﬁddling with buildout.
Aha, so you are insane then?
No. Well, maybe, but there are other good reasons:
Buildout has become the de facto standard in the Plone world for
deploying repeatable apps, and I’d like to see its popularity spread.
I’d also like to see some of Plone’s generally useful recipes be
adopted by other open source projects.
But buildout sucks! I.e. It is not as good as RPM, dpkg, etc.
IMO, Buildout is NOT an alternative to packaging systems like rpm, dpkg, etc.
but rather a complement to them.
IOW, my general approach is to use system packages when I can easily use
them, and to use buildout in cases where I need more control, repeatability,
conﬁguration management, etc.
System packages vs.
Some things (e.g. libjpeg) may be better left to the OS (and
whatever package management system it uses)
Some things may be better suited for buildout (particular when
it is hard to get packages for the latest code, e.g. rrdtool)
OK, Tell me about the buildout then
Mostly uses cmmi and command recipes. These recipes download
packages, extract them, cd to the package dir then do: ./conﬁgure;
make; make install. There are currently two competing recipes that
perform the same function with subtle differences, they are:
Allows you to set environment variables, e.g. CFLAGS, PKG_CONFIG,
Allows you to pass extra options to ./conﬁgure with ‘extra_options’ (e.g.
Allows you to do a post mortem via ‘keep_compile_dir = true’ option
Allows you to pass extra options to ./conﬁgure with ‘conﬁgure-options’ (e.g.
Depending on your needs, one, or the other, or both or either may be required.
So, what else does the buildout do?
Satisﬁes Zenoss dependencies:
Uses plone.recipe.zope2install to download and install the Zope 2 tarball.
Uses zc.recipe.cmmi recipe to build the package.
Uses zc.recipe.egg to conﬁgure environment variables.
Uses zc.recipe.cmmi/hexagonit.recipe.cmmi recipes to build the package and
cairo/pango, glib/gtk, gettext, fontconﬁg, etc.
Zenoss Zope 2 Products
Uses subversion svn:externals property to pull down Zenoss 2.3.x.
Enough. Show me the
Glad you asked, please see the commented buildout
Thank you for reading.
Please e-mail: firstname.lastname@example.org
For your Plone consulting & hosting needs, please
visit my website: http://aclark.net.
For the latest on my (Plone and other related)
activities, please follow me on Twitter: http://