Requirements

Server

  • A posix like shell
  • Python (>= 3.2 required)
  • SSH client
  • Asciidoc (for building the manpages)

Client ("target host")

  • A posix like shell
  • SSH server

Installation

Preparation

Ensure you have Python 3.2 installed on the machine you use to deploy to the targets (the source host).

Archlinux

Archlinux already has python >= 3.2, so you only need to do:

pacman -S python

CentOS

See the "From source" section

Debian

For Debian >= wheezy:

aptitude install python3

On squeeze you can add following line in /etc/apt/sources.list

deb http://ftp.debian.org/debian wheezy main

And add pinning entry in /etc/apt/preferences.d/wheezy:

Package: * Pin: release n=wheezy Pin-Priority: 1

Please be aware that both openssh-server and openssh-client might be removed on python3.2 installation. You surely want to reinstall them:

apt-get install -t wheezy openssh-server openssh-client

For older Debian versions, installing python 3.2 manually is required.

Fedora

For Fedora >= 15:

yum install python3

FreeBSD

For the port:

cd /usr/ports/lang/python32/ && make install clean

For the package:

pkg_add -r python32

Gentoo

Gentoo only provides python 3.2 in testing packages (http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=3). If you want to ensure nothing breaks you must set back the python version to what was default before.

emerge -av =python-3.2.2 --autounmask-write
emerge -av =python-3.2.2
eselect python list
eselect python list set python3.2

Max OS X

You can choose between Homebrew and Macports, either way works:

Homebrew variant:

brew install python3

Macports variant:

port install python32
ln -s /opt/local/bin/python3.2 /opt/local/bin/python3

From Source

For those operating systems not yet support Python 3.2:

pyversion=3.2.3
wget http://www.python.org/ftp/python/$pyversion/Python-${pyversion}.tar.bz2
tar xvfj Python-${pyversion}.tar.bz2
cd Python-${pyversion}
./configure
make
sudo make install

This installs python 3.2 to /usr/local/bin. Ensure this directory is in your PATH environment variable.

Get 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. 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
./build man
export MANPATH=$MANPATH:$(pwd -P)/doc/man

Available versions

There are at least the following branches available:

  • Development: master
  • 2.0: Python rewrite of cdist core [stable branch]

Old versions:

  • 1.7: Bugfixes, cleanups, new type and explorer rename
  • 1.6: New types, cleaned up __package* types, internal cleanup
  • 1.5: Focus on object orientation instead of global stage orientation
  • 1.4: Support for redefiniton of objects (if equal)
  • 1.3: Support for local and remote code execution (current stable)
  • 1.2: Dependencies supported
  • 1.1: __file to __file, __directory, __link migration
  • 1.0: First official release

Other branches may be available for features or bugfixes, but they may vanish at any point. To select a specific branch use

# Generic code
git checkout -b <name> origin/<name>

# Stay on a specific version
version=2.0
git checkout -b $version origin/$version

Mirrors

  • git://github.com/telmich/cdist.git (github)
  • git://git.code.sf.net/p/cdist/code (sourceforge)

Update

To upgrade cdist in the current branch use

git pull

# Also update the manpages
./build man
export MANPATH=$MANPATH:$(pwd -P)/doc/man

If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break. The master branch on the other hand is the development branch and may not be working, break your setup or eat the tree in your garden.

Upgrading from 1.7 to 2.0

  • Ensure python (>= 3.2) is installed on the server
  • Use "cdist config host" instead of "cdist-deploy-to host"
  • Use "cdist config -p host1 host2" instead of "cdist-mass-deploy"
  • Use "cdist banner" for fun
  • Use __object_fq instead of __self in manifests

Upgrading from 1.6 to 1.7

  • If you used the global explorer hardware_type, you need to change your code to use machine instead.

Upgrading from 1.5 to 1.6

  • If you used __package_apt --preseed, you need to use the new type __debconf_set_selections instead.
  • The __package types accepted either --state deinstalled or --state uninstaaled. Starting with 1.6, it was made consistently to --state removed.

Upgrading from 1.3 to 1.5

No incompatiblities.

Upgrading from 1.2 to 1.3

Rename gencode of every type to gencode-remote.

Upgrading from 1.1 to 1.2

No incompatiblities.

Upgrading from 1.0 to 1.1

In 1.1 the type __file was split into __directory, __file and __link. The parameter --type was removed from __file. Thus you need to replace __file calls in your manifests:

  • Remove --type from all __file calls
  • If type was symlink, use __link and --type symbolic
  • If type was directory, use __directory