下载:
安装
[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
,才执行下面的动作,
classes
是
cfengine
内定义的
/bin -> /usr/bin
osf::
………
上面例子就可以实现只针对
Sunos
生效,其他类型的系统有另外的操作。
增加另外的action
到actionsequence
:
#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
预定义classes:ultrix, 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 host的fully qualified hostname
host 当前host的hostname
ipaddress IP地址
ostype $(arch)的简称
split 对字串进行分割
sysadm 管理员的邮箱地址或名字
timezone 当前的时区
year 当前的年份
未定义的变量: control:
actionsequence = ( shellcommands )
myvar = ( “test string” )
shellcommands:
“/bin/echo $(myvar) $(myvar2)”
输出结果:cfengine:host: Executing script /bin/echo test string $(myvar2)
编写模块:
control:
moduledirectory =
(
/usr/local/cfengine/modules
)
存放模块的路径
actionsequence =(
files
module:myplugin.specialclass
“module:argplugin.specialclass arg1 arg2”
copy
)
模块可以使用各种语言编写,
perl
,
shell
都可以
通用
class
:
any
::
any
代表所有的
class
actions
访问控制:
control:
access = ( mark root )
目录或文件的编辑于遍历:
files:
/usr/local/bin m=0755 exclude=*.ps action=fixall
/usr/local/bin m=0755 include=*.os ation=fixall
挂载文件目录:
control:
site = ( mysite )
domain = ( mysite.country )
sysadm = ( mark )
netmask = ( 255.255.255.0 )
actionsequence =
(
mountall
挂载每个
host
上已经定义的文件系统
mountinfo
显示每个
host
上已经成功挂载的文件系统
addmounts
检查
host
文件系统是否都已经挂载
mountall
links
)
groups:
MyGroup =
(
host1
host2
binserver1
binserver2
)
homeservers:
MyGroup:: host1
binservers:
MyGroup.sun4:: server1
MyGroup.ultrix:: server2
mailserver:
host1:/usr/spool/mail
mountables:
告诉
cfengine
哪些目录是可以挂载的
host1:/mysite/host1/u1
host1:/mysite/host1/u2
server1:/mysite/server1/local
server2:/mysite/server2/local
links:
/usr/local -> /${site}/${binserver}/local
循环列表:
control
:
split = ( “ “ )
使用空格做分隔符
mylist = ( “mark ricky bad-dude” )
定义了列表,将列表赋值给
mylist
tidy:
/mnt/home1/$(mylist) pattern=*.cfsaved age=1
将遍历
mylist
中的所有目录,匹配
.cfsaved
且一天没有访问的文件
运行用户脚本:
control:
cfbin = ( /local/gnu/lib/cfengine/bin )
定义了两个变量
backupdir = (/iu/dax/backup )
shellcommands:
运行
shell
命令
“$(cfbin)/cfbackup –p –f $(backupdir) –s /iu/nexus/u1”
管理
acl
:
files:
$(HOME)/myfile acl=acl_alias1 action=fixall
acl:
{ acl_alias1
method:append
fstype:solaris
user:len:rwx
}
{ acl_alias2
method:append
fstype:dfs
user:/…/iu.hioslo.no/cell_admin:wx
给
cell_admin
用户
wx
的权限
group:/…/iu.hioslo.no/acct-=admin:rx
给用户组
acct-admin rx
的权限
user:/…/iu.hioslo.no/root:rx
user:*:-x
}