README.md

June 24, 2026 ยท View on GitHub

This repository contains the necessary tools to build and test cfengine packages for various platforms.

Hardware requirements

By experimentation I have found that building hub packages, which includes php dependency requires more than 1.6G of RAM/swap. 2.6G worked for me, less might work as well.

Example build of Community Agent

A minimal example would be to build packages for cfengine community agent. This should be done in an isolated environment such as a dedicated host, virtual machine or linux container.

Install necessary distribution packages. For example on debian/ubuntu:

apt update -y
apt upgrade -y
apt install -y git autoconf automake m4 make bison flex binutils libtool gcc g++ libc-dev libpam0g-dev python3 psmisc libtokyocabinet-dev libssl-dev libpcre2-dev default-jre-headless build-essential fakeroot ntp dpkg-dev debhelper pkg-config nfs-common sudo apt-utils wget libncurses5 rsync libexpat1-dev libexpat1 curl
apt purge -y emacs emacs24 libltdl-dev libltdl7

Get the cfengine source code:

mkdir $HOME/cfengine
cd $HOME/cfengine
git clone --recursive --depth 1 https://github.com/cfengine/core
git clone --depth 1 https://github.com/cfengine/buildscripts
git clone --depth 1 https://github.com/cfengine/masterfiles

Set some environment variables:

export NO_CONFIGURE=1
export PROJECT=community
export BUILD_TYPE=DEBUG
export EXPLICIT_ROLE=agent

Execute the build steps and see that packages are generated:

./buildscripts/build-scripts/autogen
./buildscripts/build-scripts/clean-buildmachine
./buildscripts/build-scripts/install-dependencies
./buildscripts/build-scripts/configure
./buildscripts/build-scripts/compile
./buildscripts/build-scripts/package
ls -l cfengine-community/*.deb

General Build Machine Prerequisites

Due to sheer diversity of the environments, build machine is expected to provide strict minimum amount of software (don't forget --no-install-recommends on dpkg-based systems):

To access the build machine:

  • SSH server
    • Bundled one on Unixes
    • FreeSSHd on Windows
  • 'build' account with SSH key installed

To transfer files back and forth:

  • rsync on Unixes
  • 7z on Windows

To be able to install packages and run tests:

  • passwordless sudo access for 'build' account
  • sudo should not require TTY (remove 'Defaults requiretty' from /etc/sudoers)

To build everything:

  • GCC (gcc)
    • Additionally, libgcc is used on AIX and Solaris only
  • GNU make (make)
  • libc development package (libc-dev, glibc-devel)
  • bison (bison)
  • flex (flex)
  • fakeroot (but not fakeroot 1.12, it is horribly slow!)

To create packages:

  • Native packaging manager
    • rpm-build on RPM-based systems
    • dpkg-dev, debhelper, fakeroot
    • WiX on Windows

To build MySQL library (yeah!):

  • g++ (gcc-c++, g++)
  • ncurses (ncurses-devel, libncurses5-dev)

To build libvirt:

  • pkg-config (pkg-config, pkgconfig)

Anything else is either preprocessed on buildbot slave or built and installed during build.

Documentation build pre-requisites

  • texinfo
  • texlive
  • cm-super
  • texlive-fonts-extra

Non-requisites

Build machines should not contain the following items, which may interfere with build process:

  • CFEngine itself, either in source or binary form (build machines are short-living, so this is not a problem)
  • Development packages for anything beside libc to avoid picking them up instead of bundled ones accidentally.
  • MySQL and PostgreSQL servers, clients and libraries

The following packages should not be installed on build machines as well, to avoid accidentally regenerating files transferred from buildslave:

  • automake
  • autoconf
  • libtool

Dependencies

File install-dependencies and the relevant subdirectories in deps-packaging are the source of this information.

Agent Dependencies

CFEngine version3.24.x3.27.xmasterNotes
diffutils3.123.123.12
libacl2.3.22.3.22.3.2
libattr2.5.22.5.22.5.2
libcurl8.17.08.17.08.20.0
libgnurx2.5.12.5.12.5.1Windows Enterprise agent
libiconv1.191.191.19Needed by libxml2
libxml22.15.32.15.32.15.3
libyaml0.2.50.2.50.2.5
LMDB0.9.350.9.350.9.35
OpenLDAP2.6.132.6.132.6.13Enterprise agent only
OpenSSL3.6.23.6.24.0.0
PCRE---
PCRE210.4710.4710.47
pthreads-w322-9-12-9-12-9-1Windows Enterprise agent
SASL22.1.282.1.282.1.28Solaris Enterprise agent
zlib1.3.21.3.21.3.2
librsync-2.3.42.3.4
leech-0.2.0-
leech2--5.1.0

Enterprise Hub dependencies

CFEngine version3.24.x3.27.xmaster
Apache2.4.672.4.672.4.67
APR1.7.61.7.61.7.6
apr-util1.6.31.6.31.6.3
Git2.54.02.54.02.54.0
libexpat2.8.12.8.12.8.1
PHP8.3.318.5.68.5.6
PostgreSQL16.1418.418.4
nghttp2-1.69.01.69.0
rsync3.4.33.4.33.4.3