v0.2 released

Today, I have landed mcm’s second major release. This includes a number of major features and bug fixes, taking mcm from a prototype to a trialworthy state.

File Modes

The catalog and the catalog applier tools (mcm-exec and mcm-shellify) now support setting file modes. This allows catalogs to set owners and permissions for files managed by mcm.

Lua Usability Enhancements

In v0.1.0, luacat used the default Lua path and gave little control over its output. Debugging catalog scripts was difficult because print() would send data to stdout, corrupting the catalog.

In v0.2.0, luacat is much easier to scale to larger catalogs. print() now sends its output to stderr. For ease of use in workflows, luacat accepts a -o option to send its output to a file instead of always using stdout. luacat now checks the script’s containing directory to check for modules with require(). You can also add more directories to package.path by using the -I flag or the MCM_LUACAT_PATH environment variable. One useful set of modules to include is the new luacat lib directory: I’ve written resource templates for apt packages and line-based config files like /etc/hosts. You can see more details in the luacat README.

Check it out!

There’s even more goodies: more robust output in shellify, concurrent execution, and precompiled binaries. Head over to the v0.2.0 release page to grab the latest copy and read up on how to get started.

Why mcm?

mcm is a configuration management solution. However, at first glance, mcm will seem quite strange to someone used to Puppet or other similar tools. “Where is the one command that does everything? What are all these small tools?” mcm doesn’t have its own language. mcm doesn’t have a daemon. mcm doesn’t even have a way of sending configuration to remote machines. Why not? It doesn’t need to. All of the infrastructure you need to do these things is already on your computer.

At the heart of mcm is the belief that less is exponentially more. Every environment is different, so mcm tries to get out of the way as much as it can. So instead of creating complex new software to understand, mcm tries to leverage the tools you already understand. At its core, mcm is just a catalog schema — a specification. The catalog is stored in a well-specified data format: Cap’n Proto. The rest of mcm provides a collection of tools that interoperate using the catalog format. Why is this better? Because with less tools and less to learn, mcm allows you to run more powerful workflows. For instance:

  • Need to write a program to build a configuration? Use Lua. Or write your own tool to generate a catalog file.
  • Need to send your configuration to a remote machine? Send a bash script over SSH. Or copy the catalog to a network file share then execute it directly
  • Need to encrypt or sign your configurations? Use gpg. Catalog files are just files.
  • Need to visualize your complex configuration? Use GraphViz.

mcm may be small, but its simplicity enables more powerful, nimble workflows. Learn how to Get Started.