[[!meta title="cdist - configuration management"]] [[!toc levels=2]] ## Introduction cdist configures your system and is similar to other configuration management systems like [cfengine](http://www.cfengine.org/), [bcfg2](http://trac.mcs.anl.gov/projects/bcfg2), [chef](http://wiki.opscode.com/display/chef/) and [puppet](http://www.puppetlabs.com/), but it ticks differently: * cdist sticks completly to the KISS (keep it simple and stupid) paradigma * cdist's core is very small (< 1k lines of code) * There is only one type to extend cdist called ***type***. * One main development target: ***It must be incredible easy to add new types.*** * cdist is UNIX * It reuses existing tools like cat, find, mv, ... * cdist's documentation is bundled as manpages * cdist is written in POSIX shell * No special requirements like high level interpreters needed on server or target ### Architecture * Push mode (server pushes configuration) * Pull mode planned (client triggers configuration) * User defines configuration in shell scripts (called ***manifests***) * Generates internal configuration (cconfig style) * Uses ***types*** to generate code be executed on the target * And finally executes the code on the target / applies the configuration ### Features Stuff that should probably be included in every configuration management, but is not. Or: The reason why I began to write cdist. * Speed * Elegant code * Clean design * Good documentation (man pages) * Meaningful error messages * No surprise factor * Consistency in behaviour, naming and documentation * Easy integration nacked installations * Simple and well-known DSL: posix shell * It is very easy to * extend cdist * debug cdist-core and cdist-types * Focus on reuse of existing functionality * ssh * sh * find, rm, ... ## Requirements ### Server * A posix like shell * SSH-Client ### Client ("target host") * A posix like shell * SSH-Server ## Getting cdist You can clone cdist from git, which gives you the advantage of having a version control in place for development of your own stuff as well. ### Installation To install cdist, execute the following commands: git clone git://git.schottelius.org/cdist cd cdist export PATH=$PATH:$(pwd -P)/bin # If you want the manpages make man export MANPATH=$MANPATH:$(pwd -P)/doc/man Afterwards you can run ***cdist-quickstart*** to get an impression on how to use cdist. ### Available versions There are at least two branches available: * master: the development branch * 1.0: stable branch of version 1.0 Other branches may be available as well for features or bugfixes, but they may vanish at any point. To select a specific branch use # Generic code git checkout -b origin/ # Stay on version 1.0 git checkout -b 1.0 origin/1.0 ### Update To upgrade cdist in the current branch use git pull # Also update the manpages make man export MANPATH=$MANPATH:$(pwd -P)/doc/man The version branches are designed to change if there are incompatibilities. Or the other way round: As long as you stay on 1.0 and do git pull, nothing should break. ## Support ### IRC You can join the development ***IRC channel*** [#cLinux on irc.freenode.org](irc://irc.freenode.org/#cLinux). ### Mailing list Bug reports, questions, patches, etc. should be send to the [cdist mailing list](http://l.schottelius.org/mailman/listinfo/cdist).