四、配置过程

(一)下载安装

cfengine的文档里面都是采用源码安装的,经本人测试后发现源码安装经常会出现莫名奇妙的错误,而使用rpm包则是省时省力的方式。

装 cfengine 需要 openssl 和 Berkely DB 这两个依赖性的包,所以在正式安装cfengine前,必须确认你的系统已经安装了db4, db4-devel,一般来说都是系统自带安装好的.然后就可以下载cfengine了, 下载地址http://dag.wieers.com/rpm/packages/cfengine/cfengine-2.2.2-1.el5.rf.i386.rpm

安装也很简单,rpm –ivh cfengine-2.2.2-1.el5.rf.i386.rpm即可,接下来我们就要着手配置了

(二) 准备工作

在服务器和客户端将cfengine安装完成后,要做下面一些准备工作:

为了完全使用源码方便控制,将服务都禁用掉.

[root@centos1 inputs]# chkconfig cfservd off

[root@centos1 inputs]# chkconfig cfenvd off

[root@centos1 inputs]# chkconfig cfexecd off

然后查看会看到所有cfengine的相关服务都禁用了

[root@centos1 inputs]# chkconfig –list|grep cf

将cfengine的程序复制到bin目录下

mv /var/cfengine/bin/cfagent /var/cfengine/bin/cfagent.link///将原来的链接文件重命名///

cp /usr/sbin/cfagent /var/cfengine/bin

cp /usr/sbin/cfenvd /var/cfengine/bin

cp /usr/sbin/cfexecd /var/cfengine/bin

cp /usr/sbin/cfservd /var/cfengine/bin

(三)工作方式二

我这里先说工作方式二的原因是它的过程简单,而且很能体现cfengine的本质工作流程时需要的条件是:

服务器运行cfservd (这里当然是需要有cfservd.conf配置文件)。然后还有一个正确的策略文件cfagent.conf供客户机下载

客户机使用cfagent运行update.conf的配置,连接到服务器的cfservd进程,下载cfagent.conf来运行。所以我们接下来要在服务器和客户端上创建所需的配置文件:

服务器上:cfservd.conf cfagent.conf

客户端上:update.conf

我们这里将centos1作为服务器(192.168.0.114,为了简洁,文中会简称为114),centos2作为客户端,文中简称为115

1.对服务器端进行配置

1)创建配置文件cfservd.conf

在/var/cfengine/inputs下创建cfservd.conf

# cfservd.conf

# yahoon 2007.11.1

control:

    domain = ( yahoon.org )

    AllowConnectionsFrom = ( 192.168.0.0/24 )

    TrustKeysFrom = ( 192.168.0.0/24 )

    AllowUsers = ( root )

    MaxConnections = ( 150 )

    MultipleConnections = ( true )

    #AllowMultipleConnectionsFrom = ( 192.168.0 )

############################################

admit:

#/var/cfengine/rpc_out *.$(domain) 128.39.73

#/file *.$(domain) 128.39.73

    /masterfile/inputs    192.168.0.

    /var/cfengine         192.168.0.

然后我们就可以启动cfservd服务,执行

/var/cfengine/bin/cfservd –v

同样带上-v参数来查看详细的输出,利于排错

…(部分略)…

Listening for connections …

cfservd: cfservd starting Fri Nov 2 18:54:49 2007

显示是成功的,进一步查看fservd监听的tcp 5308端口

[root@centos1 inputs]# netstat -an|grep 5308

tcp        0      0 :::5308                     :::*                        LISTEN

2)创建策略文件cfagent.conf

这就是我们即将要发布给客户机运行的策略文件,路径同样是在/var/cfengine/inputs下创建,内容如下

control:

actionsequence = ( shellcommands )

shellcommands:

"/bin/echo Danger, Will Robison!"

3)测试

执行cfagent –v (如果不需要真正执行,可以加上-n参数)

…(部分略)..

cfengine:centos1:

Executing script /bin/echo Danger, Will Robison!…(timeout=0,uid=-1,gid=-1)

(Setting umask to 77)

cfengine:centos1:/bin/echo Dange: Danger, Will Robison!

cfengine:centos1: Finished script /bin/echo Danger, Will Robison!

Performance(Exec(/bin/echo Danger, Will Robison!)): time=0.0529 secs, av=0.0536 +/- 0.0231

———————————————————————

Alerts

———————————————————————

++++++++++++++++++++++++++++++++++++++++

Summary of objects involved

++++++++++++++++++++++++++++++++++++++++

    global

    update

    main

cfengine:centos1: Outcome of version (not specified): Promises still kept 0%, Promises repaired 100%, Promises not kept 0%

运行完全正常,那么就可以将其复制到要发布的目录里面/masterfile/inputs

4)DNS解析

cfservd在做文件传输的时候需要对连接上来的客户机做DNS解析,所以必需要有域名,如果是内部网没有dns服务,就利用/etc/hosts,将客户端加入进来.这里我们选用的域名为yahoon.org,编辑/etc/hosts文件

[root@centos1 inputs]# vi /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               centos1 localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.0.115   centos2.yahoon.org

粗体的部分即为加上的对客户机115的解析,要测试是否成功解析了centos2.yahoon.org十分简单,服务器上ping这个域名就可以了..

[root@centos1 inputs]# ping centos2.yahoon.org

centos2.yahoon.org (192.168.0.115) 56(84) bytes of data.

64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=1 ttl=64 time=3.74 ms

64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=2 ttl=64 time=1.61 ms

2.对客户端进行配置

1)创建配置文件update.conf

在/var/cfengine/inputs下创建 update.conf

# update.conf

# yahoon 2007.11.1

control:

    actionsequence = ( copy processes tidy )

    domain = ( yahoon.org )

    #policyhost = ( my_policy_host )

    policyhost = ( 192.168.0.114 )

    master_cfinput = ( /masterfile/inputs )

    workdir = ( /var/cfengine )

copy:

    $(master_cfinput) dest=$(workdir)/inputs

                      r=inf

                      mode=700

                      type=binary

                      server=$(policyhost)

                      trustkey=true

processes:

#    "cfservd" restart /var/cfengine/bin/cfservd

#    "cfenvd" restart "/var/cfengine/bin/cfenvd"

    "cfservd" signal=term restart /var/cfengine/bin/cfservd

    "cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H"

tidy:

    $(workdir)/outputs pattern=* age=7

# End