This guide documents our recommendation on how to upgrade an existing installation of CFEngine Community 3.4/3.5 and CFEngine Enterprise 3.0/3.5 to CFEngine 3.6.1, as well as upgrades from 3.6.
Our recommendation is to upgrade the Policy Server first. The rationale is that it is normally a dedicated machine with no business-relevant duties, so the risk is lower.
If you are doing a minor-minor 3.6 upgrade (e.g. from 3.6.2 to 3.6.3), the upgrade is easier. We would however still recommend to perform a masterfiles upgrade (ideally in a test environment first), as there are changes to enable High Availability and client upgrades to the new version. The masterfiles are available in the hub package and separately on the download page (Community and Enterprise editions share masterfiles as of 3.6).
From 3.6.1 to 3.6.2, the following masterfiles files have changed:
From 3.6.2 to 3.6.3, the following have changed:
Normally these new files did not exist in the preivous version or can be completely replaced by the old ones, the only ones that are likely changed by you are def.cf and promises.cf. For these two files, we would need to do a diff between your version and the new version and integrade the diff instead of replacing the whole file.
When the new masterfiles have been created and cf-promises promises.cf and cf-promises update.cf succeeds, you are ready to upgrade the Policy Server. That entails to
Check the version with /var/cfengine/bin/cf-promises -V, and if you are running Enterprise, the Mission Portal About page.
If your clients get promise failures (not kept) similar to “Can’t stat file ‘/var/cfengine/master_software_updates/cf-upgrade/linux.x86_64/cf-upgrade’ on ‘
If everything looks good, you are ready to upgrade the clients, please skip to Prepare Client upgrade (all versions) followed by Complete Client upgrade (all versions) below.
/root/3.6/masterfiles.cf-promises to verify that the policy runs with 3.6, by running cf-promises /root/3.6/masterfiles/promises.cf and cf-promises /root/3.6/masterfiles/update.cf.cf-promises to verify that the policy runs with you previous version of CFEngine (e.g. 3.5), by running the same commands as above on a node with that CFEngine version.Set trustkeysfrom to trust all hosts, or at least the Policy Server,
in the merged masterfiles policy, e.g. /root/3.6/masterfiles/update/update_policy.cf`.
CFEngine 3.6 uses LMDB for local databases, whereas older versions of CFEngine typically use TokyoCabinet or QDBM. The classic networking protocol uses the lastseen database to verify that the mapping between a peer’s IP address and the corresponding hostkey is not changed. Since the 3.6 installation will not have any mappings in the lastseen database, hosts won’t trust the IP address of the policy server without that setting.
cfmigrate binary.cfmigrate tool uses mongoexport, which is available from mongodb.org (it is included in the hub package of CFEngine 3.5).service cfengine3 stopps -e | grep cf is empty.Clients will continue to execute the policy that they have.
/var/cfengine (or your WORKDIR equivalent) is recommended.
cp -r /var/cfengine/ppkeys/ /root/3.5/ppkeystar cvzf /root/3.5/cfengine.tar.gz /var/cfenginecf-key -s > /root/3.5/hostsps -e | grep cf is empty.console
rpm -e cfengine-nova-hub # Red Hat based distribution
console
dpkg -p cfengine-nova-hub # Debian based distribution
console
rm -rf /var/cfengine
console
rpm -i cfengine-nova-hub-3.6.1.x86_64.rpm # Red Hat based distribution
console
dpkg --install cfengine-nova-hub_3.6.1-1_amd64.deb # Debian based distribution
console
cp /root/3.5/ppkeys/* /var/cfengine/ppkeys/
console
rm -rf /var/cfengine/masterfiles/*
console
cp /root/3.6/masterfiles/* /var/cfengine/masterfiles/
Bootstrap the Policy Server to itself.
console
/var/cfengine/bin/cf-agent -B <POLICY-SERVER-IP>
Any error messages regarding processes can be corrected by running
console
cf-agent -f update.cf -IK
cfmigrate binary.
cf-key -s that connections from all clients have been established within 5-10 minutes./var/cfengine/master_software_updates, under the appropriate directories for the OS distributions you use.trigger_upgrade in update.cf for a small set of clients, i.e. change !any to an appropriate class like an IP network (e.g. 10_10_1|10_10_2).Verify that the selected hosts are upgrading successfully.
As an Enterprise user, confirm that the hosts start appearing in Mission Portal after 5-10 minutes. Otherwise, log manually into a set of hosts to confirm the successful upgrade.
trigger_upgrade class is set.cf-key -s or in the Enterprise Mission Portal that hosts are upgraded correctly and start reporting in./root/3.5/hosts correspond to what you see is now reporting in.trustkeysfrom configuration to the previous value, typically an empty list.access promises.Optional: Recursively purge *.tcdb and *.tcdb.lock files from /var/cfengine
See [protocol_version][Components and Common Control#protocol_version] in
[Components and Common Control][] and [allowlegacyconnects][cf-serverd#allowlegacyconnects] in
[body server control][cf-serverd#Control Promises].