CFengine on FreeBSD
Quick start to running a CFengine server on FreeBSD
Warning: This page specifically deals with Cfengine 2. The current main version is Cfengine 3 (as of September 2010), which is different in many ways. Checkout http://cfengine.org/ for more details.
Install cfengine package
cd /usr/ports/sysutils/cfengine make install clean
Create public/private keys (run cfkey)
/usr/local/sbin/cfkey
Setup namespace
Pick a domain name. This is just an administrative domain and does not have to correspond to an actual DNS domain name. In this example I use cf1.example.org
Bootstrap cfservd configuration
Create some missing folders
mkdir -p /var/cfengine/master /var/cfengine/outputs
Bootstrap /var/cfengine/inputs/cfservd.conf file
control:
domain = ( cf1.example.org )
any::
IfElapsed = ( 1 )
MaxConnections = ( 30 )
HostnameKeys = ( true )
AllowConnectionsFrom = ( # RFC1918
192.168
172.16
10
)
TrustKeysFrom = ( # RFC1918
192.168
172.16
10
)
admit: # or grant:
/var/cfengine/master 192.168.* 172.16.* 10.*
Make sure to adjust network ranges as appropriate above!!!
Now you have the basic frame, time to add some flesh, you need a cfagent.conf to define control, actionsequences and so on.
This basic cfagent.conf should be a decent starting point. Put into /var/cfengine/master/cfagent.conf
control:
any::
editfilesize = ( 300000 )
domain = ( cf1.example.org )
cvs_repository = ( /var/cvs )
repository = ( /var/cfengine/repository )
smtpserver = ( mail.example.org ) # site MTA
netmask = ( 255.255.255.0 )
sysadm = ( "root" )
EmailMaxLines = ( inf ) # max lines of output to email
EmailFrom = ( cfengine@example.org )
actionsequence = ( directories files editfiles copy links processes
disable shellcommands )
# When should cfexecd in daemon mode wake up the agent?
schedule = ( Min00_05 Min30_35 )
#=============================================================================
classes:
any::
has_netbackup = ( FileExists(/usr/openv/netbackup/bp.conf) )
has_postfix = ( FileExists(/etc/postfix/main.cf) )
#=============================================================================
# this ensures that these directories will exist or be created when
cfengine runs
directories:
any::
/var/log/cfengine
#=============================================================================
files:
any::
/etc/hosts mode=0644 owner=root group=wheel action=fixall inform=true
#=============================================================================
editfiles:
#=============================================================================
copy:
#=============================================================================
links:
#=============================================================================
processes:
all::
# Always run cfexecd
"cfexecd" restart "/usr/local/etc/rc.d/cfexecd forcestart"
#=============================================================================
disable:
any::
/etc/cron.hourly/cfengine
#=============================================================================
shellcommands:
Enable and start daemon cfservd
echo 'cfservd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/cfservd start
Log messages may appear in /var/log/messages
Try to connect from a client (see next section).
If necessary, run the server in debug mode
/usr/local/etc/rc.d/cfservd stop; /usr/local/sbin/cfservd -d2
Quick start to running a CFengine agent (client) on FreeBSD
This section is draft - I need to validate the steps on an actual system --fostermarkd 08:48, 25 January 2008 (PST)
Install cfengine package
cd /usr/ports/sysutils/cfengine make install clean
Create public/private keys (run cfkey)
/usr/local/sbin/cfkey
Bootstrap update configuration
Bootstrap /var/cfengine/inputs/update.conf
# Contents of update.conf
control:
actionsequence = ( copy processes tidy )
domain = ( example.org )
policyhost = ( cfmaster.example.org )
master_cfinput = ( /var/cfengine/master )
AddInstallable = ( new_cfenvd new_cfservd )
workdir = ( /var/cfengine )
!AllBinaryServers::
SplayTime = ( 1 )
copy:
$(master_cfinput) dest=$(workdir)/inputs
r=inf
mode=700
type=binary
exclude=*.lst
exclude=*~
exclude=#*
server=$(policyhost)
trustkey=true
tidy:
$(workdir)/outputs pattern=* age=7
Run cfagent to initialize
/usr/local/sbin/cfagent -q -v
This will do the initial setup by reading update.conf, connecting to the cfservd on the server, copying over the cfagent.conf and acting on what it contains.
Enable and start daemons: cfexecd and cfenvd
echo 'cfexecd_enable="YES"' >> /etc/rc.conf echo 'cfenvd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/cfexecd start /usr/local/etc/rc.d/cfenvd start
There after the agent will connect every half hour between :00-:01 and :30-:31 subject to splay time settings.
Log messages may appear in /var/log/messages