4

安装配置cfengine实现自动化配置Linux/Unix服务器

 2 years ago
source link: https://www.linuxzen.com/an-zhuang-pei-zhi-cfengineshi-xian-zi-dong-hua-pei-zhi-linuxunixfu-wu-qi.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Home Menu

安装配置cfengine实现自动化配置Linux/Unix服务器

Gray King | Tue 17 January 2012

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

然后执行策略:

/var/cfengine/bin/cf-agent
R: --> CFE is running on cfhub
R: I'am cfengine 3 client

cfengine默认是让本机地址的16位网络连接同步的,如果新加入一个另一网段的设备允许同步,比如允许192.168.1.网段同步,编辑/var/cfengine/masterfiles/promises.cf,找到bundle common def

vi /var/cfengine/masterfiles/promises.cf
bundle common def
{
 vars:                                            # 定义变量
   ... ...
    "acl" slist => {
                "$(sys.policy_hub)/16", "192.168.1.",          # 这这个后面添加
  ... ...
}

服务端基本配置完成,客户端(cfengine host),按照本文前面安装的部分进行安装,创建工作目录,复制二进制文件,不用创建配置文件和承诺,然后执行:

/var/cfengine/bin/cf-agent  --bootstrap --policy-server 172.16.1.1

会出现和服务器执行一样的提示,就表示成功,如果提示连接不成功,尝试关闭防火墙.同步后执行本地策略:

/var/cfengine/bin/cf-agent

cfengine官方还是建议在生产环境加一个版本控制器用来创建承诺文件,然后给策略分发点用来分发给策略执行点.更多cfengine的语法请参见手册.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK