Cfengine3.5的安装及简单说明和使用

        cfengine是一个自动化、集中化管理系统工具,它的宗旨是“让你的系统始终运行在你想要的模式下”。它实现的思想就是制定一些策略,让系统定时运行一个进程,去检查系统当前的状态与策略的要求是否一致,不一致的话,就按策略要求去执行一遍。而这种策略可以在本地定制,也可以在中心策略服务器配置,然后通知客户端去更新策略并执行策略。当你所管理的服务器成一定规模时,使用这个工具,将大大提高工作效率,我也是最近才了解这个工具,在花了几天时间的研究后,才大概有些了解,因此记录下来,避免日久遗忘。如果想了解更多的cfengine具体介绍,请自行搜索。

1、cfengine的安装

      cfengine可以单机独立运行,也可以建一台中心策略服务器,通过它去分发或让客户机定时去更新自己本地的承诺(策略),从而实现集中化管理。

      cfengine的官方网站http://cfengine.com/(国内好像打不开),目前的最新版本是3.5,所以本文是基于3.5写的。本人的服务器是64位的centos6.4

      我们可以直接安装rpm包,也可以基于源代码去编译再安装,结果好像没什么什么差别,但在安装前,为避免过程中出错,我们需要先安装相关的依赖库

     1.1安装库以下:

    #yum install openssl openssl-devel db4 db4-devel flex pcre pcre-devel openldap gcc -y

     #rpm -ivh cfengine-community-3.5.1-3.x86_64.rpm

     1.2可以使用# git clone git://github.com/cfengine/core.git 安装最新版

     1.3 如果是下载源文件的,可以这样

    tar zxvf cfengine-3.5.1.tar.gz
   $ cd cfengine-3.3.0
   $ ./configure
   $ make
   $ make install

对于旧版本,要运行以下命令生成cf-key,用来与服务器端通信认证用,

# /var/cfengine/bin/cf-key
Making a key pair for cfengine, please wait, this could take a minute...

但3.5版安装rpm版的,会自动生成cf-key,因此不需要执行此步

# /var/cfengine/bin/cf-key
A key file already exists at /var/cfengine/ppkeys/localhost.pub

2、cfengine的组件及目录结构

 

      cfengine默认会安装到/var/cfengine目录下,同时,在/usr/local/sbin下,也会生成一份可执行的文件,但我们平时只需要在/var/cfengine目录下工作即可,可以忽略/usr/local/sbin下的内容。因为在/var/cfengine/bin目录已经包含了这些组件。现在根据我的理解简单说一下这些组件的作用

*注意,在cfengine的概念了,“承诺”是很重要的概念,我这里把它当作是“策略”

cf-agent : 它负责去执行承诺(策略)文件里的具体内容,这些策略文件是位于/var/cfengine/inputs/目录下的,但这个目录其实只是个缓存目录,真正的目录是在/var/cfengine/masterfiles/这个目录里,我们修改策略只需要这个目录修复即可,cf-agent在不带参数运行时,默认是使用这个目录下的/var/cfengine/masterfiles/promises.cf这个策略文件,我们也可以使用“cf-agent -f policesfilename"来指定运行特定策略。
cf-execd:它是个Daemon后台常驻进程,它会周期性启动cf-agent这个程序,默认是5分钟,我们可以在/var/cfengine/masterfiles/controls/cf_execd.cf修改时间间隔。

cf-serverd:它也是个Daemon, 中心服务器就是通过它来分发策略及数据文件,当需要集中发管理时,服务器端及客户机都需要运行这个进程,它默认是使用到TCP5308端口,所以确保的iptables里开了这个端口。它的两个功能:一、充当文件服务器角色,让远程客户机从这里下载文件;二、允许远程已经授权的cf-runagent去启动本机的cf-agent进程和基于角色访问控制设置一些额外的类

cf-monitord - 负责系统信息的统计。
cf-promises :在cf-agent启动前,会自己激活cf-promises这个进程,它负责检查策略文件的语法,也可以直接用它来检查策略文件。
cf-runagent :在中心服务器上,我们运行cf-runagent去通知远程的客户机运行cf-agent,这样,就不用去等待那默认5分钟的间隔,但要注意,一分钟内只允许运行一次。
cf-report :它用来生成一些报告内容Agent: Extracts and presents report data in HTML,XML or graph formats
cf-know :这个我还没有搞清楚。等以后再补充。

3、启动cfengine

     在安装完后,会自己加入系统自动启动里,我们查看一下:

[root@test ~]# chkconfig | grep cf
cfengine3       0:off   1:off   2:on    3:on    4:on    5:on    6:off

    如果直接运行”service cfengine3 start“ 会提示找到到策略文件

[root@bbsweb ~]# service cfengine3 start
Policy is not found in /var/cfengine/inputs, not starting CFEngine.

    在这里,我们还需要对cfengine进行一次bootstrap引导。bootstrap需要一个策略中心服务器,可以用自己本机的IP(但不可以用127.0.0.1),也可以指向一台已经配置好的策略服务器IP,命令以下(192.168.11.189是本机的地址)

[root@test ~]# /var/cfengine/bin/cf-agent --bootstrap --policy-server 192.168.11.189
2013-07-31T12:15:31+0800  warning: Deprecated bootstrap options detected. The --policy-server (-s) option is deprecated from CFEngine community version 3.5.0.Please provide the address argument to --bootstrap (-B) instead. Rewriting your arguments now, but you need to adjust them as this support will be removed soon.
2013-07-31T12:15:39+0800   notice: Q: "...f-serverd"": 2013-07-31T12:15:39+0800   notice: Server is starting...

2013-07-31T12:15:39+0800   notice: R: This host assumes the role of policy server
2013-07-31T12:15:39+0800   notice: R: Updated local policy from policy server
2013-07-31T12:15:39+0800   notice: R: Started the server
2013-07-31T12:15:39+0800   notice: R: Started the scheduler
2013-07-31T12:15:39+0800   notice: Bootstrap to '192.168.11.189' completed successfully!

[root@test ~]# ps auxf|grep cf-
root     26060  0.0  0.0 103236   856 pts/0    S+   12:17   0:00          \_ grep cf-
root     25969  0.1  0.0  33836  2664 ?        Ss   12:15   0:00 /var/cfengine/bin/cf-execd
root     25976  0.1  0.0  33896  2384 ?        Ss   12:15   0:00 /var/cfengine/bin/cf-serverd

[root@test ~]# ls /var/cfengine/inputs/    #这里,cfengine会将/var/cfengine/masterfiles里的策略复制到inputs目录里
cf-sketch-runfile.cf  controls  def.cf  failsafe.cf  lib  libraries  promises.cf  services  update.cf

这里,服务进程已经启动了,因为我之前已经配置好一中心服务器(192.168.11.1),我可以重新将--policy-server指向这台服务器

[root@test ~]# service cfengine stop
cfengine: unrecognized service
[root@test ~]# service cfengine3 stop
Shutting down cf-execd: [  OK  ]
Shutting down cf-serverd: [  OK  ]
Shutting down cf-monitord: [FAILED]  #因为这个还没有启动
[root@test ~]# ps auxf|grep cf-
root     26269  0.0  0.0 103236   856 pts/0    S+   12:21   0:00          \_ grep cf-
[root@test ~]# /var/cfengine/bin/cf-agent --bootstrap --policy-server 192.168.11.1
2013-07-31T12:21:13+0800  warning: Deprecated bootstrap options detected. The --policy-server (-s) option is deprecated from CFEngine community version 3.5.0.Please provide the address argument to --bootstrap (-B) instead. Rewriting your arguments now, but you need to adjust them as this support will be removed soon.
2013-07-31T12:21:14+0800   notice: R: This autonomous node assumes the role of voluntary client
2013-07-31T12:21:14+0800   notice: R: Updated local policy from policy server
2013-07-31T12:21:14+0800   notice: R: Started the scheduler
2013-07-31T12:21:14+0800   notice: Bootstrap to '192.168.11.1' completed successfully!

[root@test ~]# ps auxf|grep cf-
root      1158  0.0  0.0 103236   856 pts/0    S+   15:02   0:00          \_ grep cf-
root     26280  0.0  0.0 101424  3300 ?        Ss   12:21   0:09 /var/cfengine/bin/cf-execd
root     26490  0.2  0.0  34000  3276 ?        Ss   12:26   0:19 /var/cfengine/bin/cf-serverd
root     26493  0.0  0.0  34272  3592 ?        Ss   12:26   0:05 /var/cfengine/bin/cf-monitord

这样,这台机就可以定时向服务器端下载策略了并执行了。其实,在客户端与服务器之间还有些访问控制的,在服务器端需设置允许的IP。这些以后再说明。下面说一下,在单机本地制定一个简单的策略。

新建 一个/var/cfengine/inputs/test.cf ,输入蓝色字体的内容,保存后,执行cf-agent,

[root@test~]# more /var/cfengine/inputs/test.cf
body common control
{
bundlesequence => {"test"};
}
bundle agent test
{
files:
"/home/testfile"
comment => "This is for keeps...",
create => "true",
perms => p("612");
}
body perms p(x)
{
mode => "$(x)";
}

[root@test ~]# /var/cfengine/bin/cf-agent /var/cfengine/inputs/test.cf
[root@test ~]# ls /home/testfile -l
-rw---x-w- 1 root root 0 Jul 31 15:15 /home/testfile

       我们可以见到,在/home目录下,生成了一个名为testfile的文件,并对文件进行了属性设置。直接指定特定策略文件只运行一次,而不会定时去再次执行。尽管上面策略没什么具体的意义,但它包括了策略的基本结构及功能,"body common control"是每个策略里有且仅有的,就像c语言的main()函数一样,bundlesequence列出了将要执行的agent及顺序。而bundle agent就像是子函数或子程序,可以有多个,它里面的内容为具体要做的内容。在bundlesequence=>{}里列出的才执行。 cfengine本身遵循自己语法及有着丰富的类,目前我还没有研究透,后续会补上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值