Cfengine 是一种 GNU 开源配置管理框架,用于计算机系统自动化。此框架是轻量的,可针对几乎所有平台构建。它能运行在所有常见平台上,其中包括 AIX、Linux、UNIX、Apple 和 Windows。
cf-promises 承诺的检验者和编译者,在试图执行一套配置承诺前预先检测。
cf-agent 变化的发动者,代理是Cfengine 操作系统资源的部分。
cf-serverd 服务器能够共享文件并且接受在一台个体计算机上执行当前策略的请求。它不可能从外部发送(推出)新信息给 Cfengine .
cf-execd 这是一个安排日程的后台程序(它能补充或取代cron)。它也可以作为包装器,执行和收集cf-agent的输出,并且发送邮件给有必要的系统用户。
cf-runagent 这是一个帮助者程序,它能够对话cf-serverd 并要求执行cf-agent上的当前策略。如果代理机上的策略包含了检验更新,它因此模拟为一个发动者,对cfengine 的主机产生变化。
cf-report 它能得出总结和其他报告,以多种格式输出或与其他系统整合。
cf-know 这个代理能够从大量关于系统知识的承诺中产生一个ISO 标准主题图。它可作为语义网显示文档。
Cfengine 安装
去Cfengine官网下载最新的Cfengine软件, 最新版本是V3.3
# ls
cfengine-3.2.4.tar.gz
cfengine-community-3.3.0-1.i386.rpm
cfengine-community-3.3.0-1.x86_64.rpm
源码安装
安装cfengine前需要一下安装一下三种软件:
Ø Openssl (openssl openssl-devel)
Ø BerkeleyDB(db4、db4-devel)
Ø pcre(pcre pcre-devel)
为安装简便,以上3种软件直接使用yum安装即可
# yum install openssl* pcre* db4* -y
安装Cfengine
# tar xf /cfengine-3.2.4.tar.gz -C /usr/src/
# cd /usr/src/cfengine-3.2.4/
# ./configure
# make && make install
# /usr/local/sbin/cf-key //生成一对密钥,并且生成当前Cfengine的工作目录
Making a key pair for cfengine,please wait, this could take a minute...
[root@server ~]# tree /var/cfengine/ //查看此时目录结构
/var/cfengine/
├── bin
├── inputs
├── lastseen
├── modules
├── outputs
├── ppkeys
│ ├── localhost.priv
│ └── localhost.pub
├── randseed
├── reports
└── state
├── cf_otherprocs
├── cf_procs
├── cf_rootprocs
└── cf_state.db
8 directories, 7 files
Cfengine的相关目录:
Ø /var/cfengine/bin --> 具有Cfengine二进制文件的目录
Ø /var/cfengine/inputs --> 具有Cfengine配置文件的目录
Ø /var/cfengine/outputs --> 具有Cfengine运行报告的目录
Ø /var/cfengine/ppkeys --> 具有身份验证密钥的目录
Ø /var/cfmasterfiles --> 具有策略服务器上的主文件的目录
Ø /var/cfengine/repository --> 包含了重要Cfengine 文件备份以备恢复(name/location 可配置)的目录
# mkdir -p /var/cfengine/masterfiles
# cp /usr/local/sbin/cf-* /var/cfengine/bin/ //拷贝命令文件到/var/cfengine/bin/下
# cp /usr/local/share/cfengine/masterfiles/*.cf/var/cfengine/masterfiles/
# tree /var/cfengine/bin/
/var/cfengine/bin/
├── cf-agent
├── cf-execd
├── cf-key
├── cf-know
├── cf-monitord
├── cf-promises
├── cf-report
├── cf-runagent
└── cf-serverd
0 directories, 9 files
二进制文件:
Ø /var/cfengine/bin/cf-promises --> 检查承诺语法的命令
Ø /var/cfengine/bin/cf-agent --> 维护共同做出的承诺及有关系统状态的代理包命令
Ø /var/cfengine/bin/cf-serverd --> 用来将策略或数据文件发布到客户端并就来自cf-runagent 的请求进行响应的服务器(守护进程)
Ø /var/cfengine/bin/cf-execd --> 负责运行cf-agent的调度守护进程
Ø /var/cfengine/bin/cf-runagent --> 在远端机器上运行cf-agent的命令
Ø /var/cfengine/bin/cf-monitord --> 负责收集有关系统状态信息的守护进程
Ø /var/cfengine/bin/cf-report --> 从 Cfengine 嵌入数据库生成摘要和其他报告的命令
Ø /var/cfengine/bin/cf-know --> 从大量承诺(知识建模代理)生成一个ISO标准的 Topic Map的命令
Ø /var/cfengine/bin/cf-key --> 在每个主机上运行一次来创建用于安全通信的公共/私有密钥对的密钥生成工具
配置文件:
Ø /var/cfengine/inputs/promises.cf --> cf-agent 所使用的主要配置文件
# /var/cfengine/bin/cf-agent --bootstrap //测试是否可以运行
** CFEngine BOOTSTRAP probe initiated
@@@
@@@ CFEngine
@ @@@ @ CFEngine Core 3.2.4
@ @@@ @
@ @@@ @
@ @
@@@
@ @
@ @
@ @
Copyright (C) CFEngine AS2008-2012
See Licensing athttp://cfengine.com/3rdpartylicenses
-> This host is: server.sxkj.com
-> Operating System Type is linux
-> Operating System Release is2.6.32-131.0.15.el6.i686
-> Architecture = i686
-> Internal soft-class is linux
-> An existing policy was cached on thishost in /var/cfengine/inputs
-> Assuming the policy distribution pointat: 10.1.1.187:/var/cfengine/masterfiles
-> Attempting to initiate promisedautonomous services...
** This host recognizes itself as a CFEnginePolicy Hub, with policy distribution and knowledge base.
-> The system is now converging. Fullinitialisation and self-analysis could take up to 30 minutes
-> Bootstrapto 10.1.1.187 completed successfully
# ps -e | grep cf //进一步检测cfengine的相关进程是否开启
12384 ? 00:00:00 cf-execd
12387 ? 00:00:00 cf-serverd
12398 ? 00:00:00 cf-monitord
简单策略执行测试
root用户测试
Cfengine有一个可以使用的工作空间目录。当以root身份运行,它的默认位置在`/var/cfengine' ,而目录~/.cfagent 是留给其他用户使用的。
# cat test.cf //编辑一个策略文件
bodycommon control
{
bundlesequence=> { "test" };
}
#
bundleagent test
{
reports: #这个是承诺类型 Thisis a promise type
cfengine_3:: #这个是类环境(这个承诺只能在cfengine3系统实行)
"Helloworld"; #这是一个简单的承诺(它产生了一个写有"Hello world"的报告)
}
# /var/cfengine/bin/cf-promises -f /root/test.cf
# /var/cfengine/bin/cf-agent -f /root/test.cf
R: Hello world
//这个‘R’:告诉你这是个来自于一个报告的输出
//如果你立即重复相同的命令(/var/cfengine/bin/cf-agent -f /root/test.cf),将什么也不会发生。但如果你等上1分钟,它将会再次的工作。cfengine认为重复指令的时间太短了而不需要再次保持承诺
# /var/cfengine/bin/cf-agent -v -f /root/test.cf | grep lock
//-v或者--verbose以详细的模式列出运行过程
cf3> Making sure that locksare private...
cf3> XX Nothing promised here [lock.test.reports.-server.Hello_world_10] (0/1 minuteselapsed)
cf3> -> No lock purging scheduled
#
# cat /root/test1.cf
bodycommon control
{
bundlesequence => {"edit_motd" };
}
bundleagent edit_motd
{
vars:
"motd" string =>"/etc/motd";
files:
"$(motd)"
create=> "true",
edit_line=> addmessage;
reports:
cfengine::
"Hello world!";
}
bundleedit_line addmessage
{
insert_lines:
"This system is managed byCFEngine 3";
}
# /var/cfengine/bin/cf-agent -KI -f ~/test1.cf //-K忽略锁状态,-I选项是有变化就显示
-> Edited file /etc/motd
R: Hello world!
# cat /etc/motd
This system is managed byCFEngine 3
//如果文件中已经有编辑的信息存在了,就不再编辑了
普通用户测试
你不需要超级用户的权限来使用cfengine。以普通用户可以安全地测试大多数的试验。你应该在准备开始配置系统以前花一些时间来试验小的例子。为了这么做你应该以常规无特权的用户登录到你的系统并开始配置:
$ /usr/local/sbin/cf-key
$ cp /usr/local/sbin/cf-* ~/.cfagent/bin
$ cat test.cf
body common control
{
bundlesequence=> { "test" };
}
#
bundle agent test
{
reports: #这个是承诺类型 This is a promise type
cfengine_3:: #这个是类环境(这个承诺只能在cfengine3系统实行)
"Helloworld"; #这是一个简单的承诺(它产生了一个写有"Hello world"的报告)
}
$ ~/.cfagent/bin/cf-promises -f ~/test.cf
$ ~/.cfagent/bin/cf-agent -f ~/test.cf
R: Hello world
rpm安装
这里以32位的rpm软件作为安装示例
# rpm -ivh cfengine-community-3.3.0-1.i386.rpm
Preparing... ########################################### [100%]
1:cfengine-community warning:user build does not exist - using root
warning: group build does notexist - using root
warning: user build does notexist - using root
warning: group build does notexist - using root
###########################################[100%]
#
本文档主要介绍Cfengine的源码安装配置,rpm不作过多介绍