cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用. cfengine的版本2和版本3存在很大差异,这里使用最新版本的cfengine3:
cfengine执行和分发的策略被称为承诺,cfengine建议的结构是:
- 一个版本控制器(subversion)用来创建策略
- 多个策略分发器(cfenginehub)用来分发策略----server
- 多个策略执行器(cfengine host)用来执行策略-----client,
本文使用的环境为:
- cfhub: 172.16.1.1/24
- cfhost: 172.16.1.2/24
系统为CentOS 5.5 32位最小化安装,本文将不会解释一些基本命令,如有疑问请移步google.
下载:
wget https://cfengine.com/source-code/download?file=cfengine-3.2.3.tar.gz
安装依赖:
yum -y install db4-devel pcre-devel openssl-devel flex
编译安装:
tar -zxvf download\?file\=cfengine-3.2.3.tar.gz
cd cfengine-3.2.3/
./configure --prefix=/usr/local/cfengine
make && make install
为了保证cfengine正常工作创建cfengine工作目录:
mkdir -p /var/cfengine/masterfiles # 存放要分发的承诺
mkdir /var/cfengine/inputs # 存放要执行的承诺
mkdir /var/cfengine/outputs # 存放执行承诺的输出
mkdir /var/cfengine/bin # 存放二进制文件
复制二进制文件:
cp /usr/local/cfengine/sbin/cf-* /var/cfengine/bin/
ls -l /var/cfengine/bin/
total 964
-rwxr-xr-x 1 root root 235958 Jan 13 2012 cf-agent # 执行承诺
-rwxr-xr-x 1 root root 63095 Jan 13 2012 cf-execd # 用于替代cron的程序,定时执行cf-agent
-rwxr-xr-x 1 root root 39076 Jan 13 2012 cf-key # 生成用于认证的证书
-rwxr-xr-x 1 root root 78711 Jan 13 2012 cf-know # 从大量承诺(知识建模代理)生成一个 ISO 标准的 Topic Map 的命令
-rwxr-xr-x 1 root root 150846 Jan 13 2012 cf-monitord # 负责收集有关系统状态信息的守护进程
-rwxr-xr-x 1 root root 16078 Jan 13 2012 cf-promises # 检查承诺语法的程序
-rwxr-xr-x 1 root root 107349 Jan 13 2012 cf-report # 生成报告
-rwxr-xr-x 1 root root 44160 Jan 13 2012 cf-runagent # 用来执行远程的cf-agent
-rwxr-xr-x 1 root root 172251 Jan 13 2012 cf-serverd # 分发承诺的守护进程
一个cfengine的hello, world:
vi /var/cfengine/inputs/test.cf # 新建一个承诺文件,添加下面内容
###################
# 这里顺便解释一下cfengine的语法,cfengine的语法大都如下
# <它是什么> <它对什么起作用> <它叫什么>
body common control # 一个body 对common组启作用,名字是control(名字为control的common的组是最重要的一个组,cfengine以这个组为起点
{
bundlesequence => { "test" }; # 定义要执行的承诺束为test
}
bundle agent test # 一个承诺束,对cf-agent起作用,叫test
{
reports: # 一个报告(仅仅显示消息,不对系统做改变)
cfengine_3:: # 一个类,对cfengine 版本3的策略执行点起作用(cfengine用这个来替代程序语言里的if-else)
"Hello world!"; # 承诺内容,显示"hello world!"
}
/var/cfengine/bin/cf-promises -f /var/cfengine/inputs/test.cf # 检查承诺语法
/var/cfengine/bin/cf-agent -f /var/cfengine/inputs/test.cf # 执行承诺
R: Hello world! # R:代表一个report.
为策略分发点创建配置文件:
cp /usr/local/cfengine/share/cfengine/masterfiles/* /var/cfengine/masterfile
编辑策略文件: 新建一个cftest1.cf承诺文件
vi /var/cfengine/masterfiles/cftest1.cf # 新建一个cftest1.cf
# 添加如下内容:
bundle agent test
{
reports:
cfengine_3::
"I'am cfengine 3 client";
}
然后编辑promises.cf文件加入执行这个承诺束的支持:
vi /var/cfengine/masterfiles/promises.cf
body common control
{
bundlesequence => { "main", "test" }; # 将test加入的承诺束队列
inputs => {
"cfengine_stdlib.cf",
"cftest1.cf", # 将cftest1.cf引入进来
};
version => "Community Promises.cf 1.0.0";
}
.......
做好之后先本地同步,然后启动server:
/var/cfengine/bin/cf-agent --bootstrap --policy-server 172.16.1.1然后执行策略:到如下提示表示成功: ```bash -> Bootstrap to 172.16.1.1 completed successfully netstat -antlp | grep cf tcp 0 0 :::5308 :::* LISTEN 20173/cf-serverd
cfengine默认是让本机地址的16位网络连接同步的,如果新加入一个另一网段的设备允许同步,比如允许192.168.1.网段同步,编辑/var/cfengine/masterfiles/promises.cf,找到bundle common def/var/cfengine/bin/cf-agent R: --> CFE is running on cfhub R: I'am cfengine 3 client
服务端基本配置完成,客户端(cfengine host),按照本文前面安装的部分进行安装,创建工作目录,复制二进制文件,不用创建配置文件和承诺,然后执行:vi /var/cfengine/masterfiles/promises.cf bundle common def { vars: # 定义变量 ... ... "acl" slist => { "$(sys.policy_hub)/16", "192.168.1.", # 这这个后面添加 ... ... }
会出现和服务器执行一样的提示,就表示成功,如果提示连接不成功,尝试关闭防火墙.同步后执行本地策略:/var/cfengine/bin/cf-agent --bootstrap --policy-server 172.16.1.1
cfengine官方还是建议在生产环境加一个版本控制器用来创建承诺文件,然后给策略分发点用来分发给策略执行点.更多cfengine的语法请参见手册./var/cfengine/bin/cf-agent