[Freedombox-discuss] FBx Configuration Management

bnewbold at robocracy.org bnewbold at robocracy.org
Thu Jun 21 02:16:32 UTC 2012

General purpose "Configuration Management" seems to be a crucial component 
of the FreedomBox software stack/distribution. It needs to be secure, 
accessible (elegant user experience for diverse userbase), reliable, 
robust, etc.

As I see it there are a few overlapping needs: a way to make configuration 
changes programmatically, safely, and immediately on the devices 
themselves (eg, an API called by higher level user interfaces), a way for 
developers to define defaults and track those defaults over time (eg, 
version control for the default/skeleton /etc directory), a way for owners 
to backup and restore entire configuration profiles/snapshots, and a 
mechanism for independent package maintainers to define tweak-able 
variables as easily as possible (aka, minimize "repackaging" for use with 
FBx). It would be a nice feature if users could "undo" configuration 
changes atomically. It's unclear to me if we need fine grained access 
control to system-wide configuration or if this is all owner/root level 
(eg, should installed packages be allowed access to the centralized 
configuration interface?). It's also unclear how to handle syntax or 
logical errors with configuration.

The existing plan (based on a wiki page[0] and my fuzzy memory) is to use 
some combination of [DebConf], [Config::Model], and [Augeas] (perhaps with 
[1]) to manage and implement configuration. DebConf is how the debian 
package system manages configuration of packages ("dpkg-reconfigure"), 
Augeas is a C library to allow editing of many different text-based config 
file syntaxes through a single tree/node interface, and Config::Model is a 
newish set of Perl libraries that build upon the other two, as well as 
basic GUI and ncurses interfaces to those libraries. I'm not sure what 
Plinth calls down to right now, but I assume it would call in to 
Config::Model (via a Python wrapper?).

Other previous work includes the very mature [UCI] (Unified Configuration 
Interface) from OpenWRT (which underlies the LuCI web interface and 
handles a lot of tricky problems), deployment-oriented tools like [Puppet] 
and [Chef], Bcfg2, [CFEngine], and the recent [Blueprint] configuration 
reverse engineering tool (with interoperates with Chef and Puppet, handles 
manual changes, based on git and python).

My questions are:

whether there is a firm commitment to Config::Model (also if anybody has 
experience with it and is comfortable with perl);

whether it covers FBx's minimal needs (maybe my feature list above is too 

and whether programmatic access control is required.

I don't have much experience with any of these tools (I personally ignore 
DebConf and found the Puppet learning/pain curve steep), but I'll be at 
the upcoming hackfest in NYC and would be interested in hacking on this 
stuff then (with guidance). I'll also update the wiki with anything 
learned from this thread.


[0]: http://wiki.debian.org/FreedomBox/BoxConfiguration
[1]: http://cpansearch.perl.org/src/DDUMONT/Config-Model-Backend-Augeas-0.111/README
[Augeas]: http://augeas.net/
[Config::Model]: https://github.com/dod38fr/config-model
[UCI]: http://wiki.openwrt.org/doc/uci
[Blueprint]: http://devstructure.github.com/blueprint/
[CFEngine]: http://cfengine.com/

More information about the Freedombox-discuss mailing list