As with most folks, I've worked on a number of various projects here and there. Many of those projects relied on bleeding-edge code that isn't available in the fedora update repositories, along with a various number of environment variables. For example, when developing against a newer version of glib I'd want to set these when building and running against it:

  • LD_PRELOAD
  • PKG_CONFIG_PATH

Far often enough, I would also be working on various python projects with specific module requirements. To ensure that installing these packages doesn't conflict with my local system, I used a virtualenv for each project.

Both of these tasks get rather tedious, and I'm a big fan of disposable, short-lived terminal tabs.

Furthermore, I wanted to be able to very easily sync my environments between my desktop, laptop, and server environments with minimal effort.

buildenv is an overly-complicated set of bash scripts that can do wonderful things for your workflow if you don't look too closely. You can visit the github page for more documentation, but here's a brief overview of what it can do:

  • Manages a set of filesystem roots in /opt/buildenv/ for each environment to install software to
  • Massages LD_PRELOAD, PKG_CONFIG_PATH, and a handful of other useful variables
  • Lets you run makefiles and other scripts when an environment is loaded. For example, downloading, building, and installing the latest boost if something needs it
  • A set of "feature flags" for buildenvs to do things such as activating a python virtualenv
  • Load "parent" buildenvs, such as when building something that requires the latest gstreamer-1.0, you can also pull in the latest glib as a dependency