[[!meta title="cdist - configuration management"]]

## 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 (currently around 400 lines of code)
  * There is only one type to extend cdist called ***type***.
 * 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

MAIN AIM:  It MUST be incredible easy/dumb to add new types.


### Architecture

 * Push mode (server pushes configuration)
 * Pull mode (client triggers configuration)
 * User defines configuration in shell scripts (called ***manifests***)
 * Cdist generates internal configuration (cconfig style) and afterwards applies 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 (for push architecture)
 * SSH-Server (for pull architecture)

### Client

 * A posix like shell
 * SSH-Client (for pull architecture)
 * SSH-Server (for push architecture)

## Installation

Cdist stable always in master

 * Create a new unpriviliged user (probably "cdist")
 * Become that user, execute the following code:

git clone git://git.schottelius.org/cdist
cd cdist
export PATH=$PATH:$(pwd -P)/bin
 
That's it.

Operation on the server is run as "cdist" user.
Operation on the client is run as "root" user.

## Update

git pull && make install

## 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).

## Commercial Support

To be done.