下载: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

安装

[root@mail cfengine-2.2.10]# tar -zxvf cfengine-2.2.10.tar.gz 
[root@mail cfengine-2.2.10]# cd cfengine-2.2.10
[root@mail cfengine-2.2.10]# ./configure
[root@mail cfengine-2.2.10]# make
[root@mail cfengine-2.2.10]#make install
启动

[root@mail cfengine-2.2.10]# cp /usr/local/share/cfengine/cfagent.conf.example   /var/cfengine/inputs/cfagent.conf
[root@mail cfengine-2.2.10]# cp /usr/local/share/cfengine/cfservd.conf.example   /var/cfengine/inputs/cfservd.conf

 

cfengine 配置中最简单和必须的结构:

 

#comment…. 这是注释,以“#”开头,检查和创建/bin/usr/bin 的链接
control: 定义一个动作类型
actionsequence = ( links ) 注意括号两边必须有空格,将links动作假如到actionsequence,必须有actionsequence,否则cfengine什么都不会做,actionsequence告诉cfengine该做什么,以什么顺序去做

links:告诉cfengine下面的是需要创建的链接,可以有多个,按顺序执行,但links必须加到actionsequence否则将什么不会做
         /bin -> /usr/bin  

 

其中动作类型为下面之一:   groups, control, homeservers, binservers, mailserver, mountables, import, broadcast, resolve, defaultroute, directories, miscmounts,files, ignore, tidy, required, links, disable, shellcommands, editfiles, processes

 

针对SUNOS系统和其他系统采用不同动作:

#comment
control:
         actionsequence = ( links )
links:
         sun4::  以“::”结尾,这个代表classes(分类),用来部署针对该classes的动作,只有属于该classes,才执行下面的动作,classescfengine内定义的

                   /bin -> /usr/bin
         osf::
                   ………
上面例子就可以实现只针对Sunos生效,其他类型的系统有另外的操作。

 

增加另外的actionactionsequence

#comment …
control:
         actionsequence = ( tidy links )  增加了新的动作tidy,用来删除文件,先执行tidy,后执行links
links:  
         /bin -> /usr/bin
tidy:   要使下面动作生效,必须将tidy加入到actionsequence

         /tmp pattern=* age=7 recurse=inf  在目录/tmp下查找匹配pattern的文件,并且该文件有超过7天没有被访问,包括其子目录

 

cfengine的运行模式:

1.       在所有站点上使用cron 运行cfagent
2.       在所有站点上配置cfservd服务,这样可以远程使用cfrun进行激活,使得配置生效,记得将cfservd加入系统自动启动项目,且将所有站点加入到 cfrun.hosts文件中

 

一些基本概念:

         复合classes 是以“.”或者”|”连接起来的,如myclass.sun4.Monday:: 只有当host属于myclass且属于sun4且属于Monday的时候才执行下面动作; sun4|ultrix|osf:: host属于sun4 Ultrix osf 的时候执行下面动作
action      
myhost::  匹配所有的host除了myhost
                            command

 

mygroup.!myhost::  匹配mygroup中所有host除了myhost

         预定义classesultrix, sun4, sun3, hpux, hpux10, aix, solaris, osf, irix4, irix, irix64sco, freebsd, netbsd, openbsd, bsd4_3, newsos, solarisx86, aos,nextstep, bsdos, linux, debian, cray, unix_sv, GnU, NT
         变量的使用:control:
                                               myvar = ( /usr/local/…. )  定义了变量myvar

                                     links:
                                               $(myvar) -> /another/directory  使用变量myvar

         将其他变量值赋值给变量: myvar = ( “$(othervar)” )
         将命令输出赋值给变量:  listing = “exec /bin/ls” 之前要加上exec
         内部变量:  arch  当前host详细结构说明
                                   binserver          默认存放二进制的host
                                     class                            当前系统类型
                                     date          当前日期
                                     domain     当前host的域
                                     fqhost    hostfully qualified hostname
                                     host          当前hosthostname
                                     ipaddress   IP地址
                                     ostype               $(arch)的简称
                                     split           对字串进行分割
                                     sysadm    管理员的邮箱地址或名字
                                     timezone  当前的时区
                                     year                    当前的年份