Cfengine 3.4.0 released

Today the Cfengine team from Oslo released version 3.4.0 of Cfengine (3).
If you read my article in the German Linux Magazine issue 11/2012, you’d know that this version is really amazing 😛

The community edition of Cfengine 3.4.0 now contains POSIX ACL support for both Windows and Linux platforms. Furthermore the remote syslog support is now enabled.

Some more changes are (taken from!topic/help-cfengine/zMQAjrp36QM):

- Added rpmvercmp utility to compare versions of RPM packages for
accurate sorting of RPM packages for packages promises.

- Implement network timeout on server side to avoid keeping stale
connections for hours.

- XML editing capabilities. See the documentation for edit_xml
body. Note the new dependency: libxml2.

- Implement inheritance of local classes by bundles called using
"usebundle". By default classes are not inherited. See the
examples/ for an example.

- Moved from Nova/Enterprise:
- POSIX ACL support,
- "outputs" promise type,
- remote syslog support.

- packages_default_arch_command hook in packages promises, to
specify default architecture of the packages on the system.

- packages_version_less_command / packages_version_equal_command hooks
in packages promises, to specify external command for native package
manager versions comparison

- Running in Solaris zone is now detected and classes "zone" and
"zone_<name>" are created in this case.

- VirtualBox support added to guest_environment promises.

- guest_environment promises are supported under OS X.

- The "depends_on" attribute is now active, for the partal ordering
of promises. If a promise depends on another (referred by handle)
it will only be considered if the depends_on list is either kept
or repaired already.

** WARNING: When upgrading, make sure that any existing use
of depends_on does not make some promises being
unintentionally ignored. This can happen if you are
currently refering to non-existant or never-run handles
in depends_on attributes.

- methods return values, initial implementation

- New format for cf-key -s, includes timestamp of last connection

- cf-promises --parse-tree option to parse policy file and dump it
in JSON format

- Namespaces support for bundles and bodies. See the
examples/unit_namespace*.cf for the usage.

- Default arguments for bundles. See the examples/

- Metadata promise type. See the examples/

New semantics:

- Methods promises now return the status of promises
kept within them. If any promise was not kept, the method is not
kept, else if any promise is repaired, the method was repaired
else it was kept.
- Remote variable access in namespaces by $(namespace:bundle.variable)

Changed functionality:

- cf-execd -F switch no longer implies 'run once'. New -O/--once
option is added to achieve this behaviour. This makes cf-execd
easier to run from systemd, launchd and other supervision


- Support for the following outdated platforms and corresponding
classes has been removed. De facto those platforms were
unsupported for a long time, as CFEngine codebase uses C99
language features unavailable on old platforms:

- SunOS 3.x (sun3)
- SunOS 4.x (sun4)
- Ultrix (ultrix)
- DEC OSF/1 AXP (osf)
- Digital UNIX (digital)
- Sony NEWS (newsos)
- 4.3BSD (bsd4_3)
- IRIX (irix, irix4, irix64)
- IBM Academic Operating System (aos)
- BSD/OS / BSDi / BSD/386 (bsdos)
- NeXTSTEP (nextstep)
- GNU Hurd (gnu)
- NEC UX/4800 (ux4800)

- (Old news) Since 3.3.0 the layout of CFEngine Community packages
has changed slightly.

cf-* binaries have been moved to /var/cfengine/bin, due to the
following reasons:

- cf-* binaries are linked to libraries installed to
/var/cfengine/lib, so placing binaries in /usr/local/sbin does not
increase reliability of the CFEngine,

- keeping whole CFEngine under single prefix (/var/cfengine)
makes packaging simpler,

- it matches the layout of CFEngine Enterprise packages.

Please adjust your policies (the recommended ways to deal with
the move are either to adjust $PATH to include /var/cfengine or to
create symlinks in /usr/local/sbin in case you are relying on
binaries to be available in $PATH).

- Workdir location is properly changed if --prefix or --enable-fhs
options are supplied to configure (Mantis #1195).

- Added check for broken libmysqlclient implementations (Mantis #1217).

- Standard library is updated from COPBL repository.

- cf-know is no longer built in Community releases. The only
functionality useful in Community, namely the reference manual
generation, is provided by new compile-time cf-gendoc tool.

- Filename (for storing filechanges) changed
  from file_change.log -> file_changes.log (in /var/cfengine/state)

  New format for storing file changes introduced:

  N = New file found
  C = Content Changed
  S = Stats changed
  R = File removed

- Acceptance test suite passes on Mac OS X.

- Changed some port numbers to replace old services with imap(s)

- archlinux hard class on Arch Linux.

- Detect BSD Make and automatically switch to GNU Make during build.


- cfruncommand for cf-execd is an arbitrary shell command now (Mantis #1268).
- Fixed broken "daily" splayclasses (Mantis #1307).
- Allow filenames up to 4096 bytes in network transfers (Redmine #1199).
- Fix stale state preserved during cf-serverd reload (Redmine #1487).
- Free disk space calculation is fixed (Mantis #1120).
- Numerous portability bugfixes (especially OpenBSD, Solaris, AIX-related).
- Compatibility fixes for AIX, HP-UX, Solaris (Mantis #1185, Mantis #1177, Mantis #1109).
- Fixed broken socklen_t configure check under OpenBSD (Mantis #1168).
- Fixed hang in cf-promises under OpenBSD (Mantis #1113).
- Fixed endless loop in evaluating "$()" construct (Mantis #1023).
- Fixed check for old PCRE versions (Mantis #1262).
- Fixed insertion of multi-line blocks at the start of file (Mantis #809).
- Fixed numerous memory leaks.
- Fixes for metadata that were not resolvable
- Fixes for namespaces that would not support metadata and variable expansion
- Point-to-point network interfaces are detected and reported by CFEngine (Mantis #1246)
- Partial non-GNU userspace support in acceptance testsuite (Mantis #1255)

You can download Cfengine 3.4.0 here:

One thought on “Cfengine 3.4.0 released

Comments are closed.