| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> perl >> 功能丰富的Perl:用于系统管理
 

功能丰富的Perl:用于系统管理

2008-05-19 06:25:45 编辑來源:互联网 繁體版 评论
 
 
  cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛(convergence)到一种理想状态。依照它的作者 Mark Burgess 所说,cfengine 总是使您的系统更接近于您所定义的配置; 它决不会使系统变得更糟。在本文中,Ted 通过演示一些简单的 cfengine 使用,使您熟悉这一独特的系统管理工具。

  初学者和中级系统管理员将从本文获益最多;解说和示例假设您可以运用大部分初学者级别的系统管理概念。

  要使用本文中的示例,您的系统应该是一个最近的(2000 或更新)主流 UNIX(Linux、Solaris、BSD)安装。示例可以与早期版本的 Perl 和 UNIX 以及其它操作系统一起使用,如果它们不能工作,对您来说,可以把它当成练习来解决。

  cfengine 正处于开发中。版本 1.6.3 是稳定的,它是本文的基础。当前正在进行阿尔法测试的版本 2.0 的计划包括重写体系结构、添加许多很棒的新功能部件以及使语法基本上保持不变。要了解 cfengine 的所有功能以及版本 2.0 中的增强功能,请访问 cfengine主页(请参阅本文后面的参考资料)。

  cfengine 的要点

  cfengine 将改变您的系统管理方法。您将运行一个命令并观察系统将收敛到一种稳定状态。我保证这看起来象在变魔术。在您喝茶的时候,cfengine 将编辑文件、运行命令并创建符号链接。

  然而,cfengine 并不能代替您思考。在将配置文件放入产品之前,您仍需要编写它并对它进行测试。 而另一方面,cfengine 所做的事情几乎很少会造成损害。

  cfengine 使系统收敛成为可能。但是,为什么需要收敛呢? 我认为系统管理员首先需要保持内心宁静,其余的事情都是次要的。稳定性、可靠性和可预测性是达到内心宁静的方法。这看似过分简单, 但询问任何一名好的系统管理员,每次您都会得到这个答案。收敛可以帮助管理员达到稳定性、可靠性和可预测性。虽然它不是达到那些目标的唯一方法,但在我的经历中它所带来的痛苦最少。

  稳定性可定义为防止无意的更改。当 cfengine 实现收敛时,它通过规则集做到这一点。良好设计的规则(请放心,cfengine 使良好的设计变得容易)只是使系统达到一种理想状态(如在 cfengine 规则中定义的那样理想)。例如,每次运行 cfengine 时,都可以重新创建关键的系统符号链接。或者,只要修改了本地副本,都可以从可信资源库复制 init.d 启动脚本。 如果 cfengine 没有发觉进程在运行,那么可以重新启动它们。

  可靠性是使机器幸免于问题的能力。网络出故障或磁盘出故障是主要的可靠性考验。您的系统能幸免于那些问题吗?通过收敛到一种理想状态,您可以期望系统处于或接近那一理想状态。 虽然可靠性不单由 cfengine 完成,但收敛可使之更加容易。 因为稳定的系统不太可能受问题影响,所以稳定性也是可靠性的主要资产。 最后,cfengine 的收敛使获得“空白”系统并使它达到期望的状态成为可能, 并能够对关键系统进行快速临时替换。

  这里,有必要多讲讲期望和理想的状态。目前为止,我们假设仅有一种理想状态,它就是那个期望的状态。事实上,对于所有机器来说并没有理想状态。 机器按任务、位置、连通性、用户、操作系统类型和版本等分类。每个系统管理员都用某些方法来对他的机器分类,通常根据上述各项以及更多项(我们稍后将详细讨论类)。虽然对于所有机器来说没有一种理想状态,但对于给定的机器类有一个要达到的理想状态。 这是 cfengine 的设计目标。cfengine 使寻找理想状态变得可行,并且易于收敛到该状态。

  可预测性是机器按照期望的那样来运转的能力。 收敛通过使系统变得稳定且可靠来达到可预测性。而且,一旦新机器收敛到一种理想状态,就可以期望它象它所替换的旧机器那样工作。当机器将很快收敛到一个已知状态时,就可以很容易地估计添加系统或替换它们的调度成本。最后,为您系统编写的软件可以期望系统处于一种接近理想的状态。然后,系统资源处于一种可预测的状态,这样,软件就可以更多地集中在功能上,而更少地将每个系统作为怀有敌意的未知领域对待。

  cfengine 的概述

  Cfengine 由几个程序组成。在版本 1.6.3 中,主程序叫作 cfengine。cfengine 程序解释文件中的规则集,并执行那些规则请求的操作。 严格来说,cfengine 程序只是 cfengine 语言的解释器,并且任何 cfengine 程序都只是那个解释器的脚本。

  在版本 1.6.3 中,还有一个名为 cfd 的守护程序及其同伴 cfrun。cfd 将在版本 2.0 得到加强,而在 1.6.3 版本中有许多未完善的地方。幸运的是,不用 cfd,就可以完成我所需要的任务(用信号通知运行 cfengine 并远程复制文件)。我宁愿在 ssh 上通过显式脚本启动 cfengine。 它只比 cfd 少许慢一点,但更易于监控。当通过 cfd 启动时,cfengine 发出的错误和远程定义的类没有可靠地显示出来。 对于远程文件复制,我发现 cfd 是不可靠的而且可能会危害安全性,所以我使用 rsync。cfengine 的作者 Mark Burgess 声明 cfd 在版本 2.0 中将有很大改进,而 rsync 将不再是必需的,但在版本 2.0 推出之前,我建议避免 cfd。

  在开始使用 cfengine 之前,应该编译和安装它。对于可以使用它们的系统,RPM 都有可用的版本, 而且还有一个可用的 Solaris 包(请参阅参考资料)。如果要存储文件的永久校验和(类似于 Tripwire 所做的事情),则应该带有 Berkeley DB 支持进行编译。然后,应该开始创建配置文件。 主要的配置文件是 /etc/cfengine/cfengine.conf,它是在不带文件名调用 cfengine 时运行的(当在 1.6.3 中编译时,可以指定一个不同的缺省配置目录,但在 2.0 及更高版本中,/etc/cfengine 将是检查的唯一位置,所以您应该严格遵守这一点)。

  下面是 cfengine 的启始配置。它不是成品, 在运行它之前,应该仔细地阅读 cfengine 参考大全和教程(请参阅参考资料)。 请带 -v -n(详细的预演)选项尝试运行 cfengine,看一下这个配置将做些什么。 当使用 -n(预演)选项时,不会影响系统。

  清单 1. cfengine 的启始配置文件 /etc/cfengine/cfengine.conf

  # note that only some of the possible sections are used here;

  # refer to the cfengine documentation for the full list of sections

  # you can have.

  Comments, as you can see, are like shell or Perl

  # comments.

  # see the tutorial and reference for any unexplained phenomena

  import:

  any::

  cf.groups

  groups:

  # all groups are defined in cf.groups, imported above, but you can

  # define extras here.

  The format is simple:

  class = ( machine1 machine2 )

  # and then any machine named machine1 or machine2 will have that class

  # defined.

  # the control section sets up how cfengine will behave

  control:

  any::

  # you have to state in AddInstallable what classes unknown to cfengine

  # by default you will be using.

  Run cfengine as "cfengine -v" to see

  # the built-in classes you don't have to define.

  Here we divide

  # machines into the ones that run inetd and the ones that run xinetd,

  # as an example.

  AddInstallable = ( inetd xinetd )

  editfilesize

  = ( 300000 )

  moduledirectory = ( /etc/cfengine/modules )

  domain

  = ( yourdomain.com )

  any::

  LogDirectory

  = ( /etc/cfengine/log )

  netmask

  = ( 255.255.255.0 )

  Repository

  = ( /etc/cfengine/repository )

  sysadm

  = ( "tzz@iglou.com" )

  # Bug in cfengine: actionsequence must follow LogDirectory and Repository

  actionsequence = ( directories files editfiles copy links processes disable

  shellcommands )

  directories:

  # this ensures that these directories will be created when cfengine runs

  /etc/cfengine/log

  /etc/cfengine/repository

  /etc/cfengine/cfcollector

  files:

  any::

  # set the permissions for these files

  /etc/sudoers mode=0440 owner=root group=root action=fixall

  /etc/hosts.allow mode=0644 owner=root group=root action=fixall

  /etc/hosts.deny mode=0644 owner=root group=root action=fixall

  # just warn if this file's permissions are wrong

  /etc/shadow mode=0400 owner=root action=warnall inform=true

  # CERT advisory CA-2001-05, for Solaris only

  solaris::

  /usr/lib/dmi/snmpXdmid mode=0000 owner=root group=root action=fixall

  # example of setting permissions differently for different OS types

  # (not Linux and Linux), and negating classes

  !linux::

  /.ssh mode=0700 owner=root action=fixall inform=true

  linux::

  /root/.ssh mode=0700 owner=root action=fixall inform=true

  editfiles:

  any::

  # add the rsync service to /etc/services and /etc/inetd.conf

  { /etc/services

  SetLine "rsync

  873/tcp # rsync"

  
 
 
 
上一篇《Linux下Perl的经典用法:读入单个记录》
下一篇《功能丰富的Perl:用Perl保存》
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
 
  cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛(convergence)到一种理想状态。依照它的作者 Mark Burgess 所说,cfengine 总是使您的系统更接近于您所定义的配置; 它决不会使系统变得更糟。在本文中,Ted 通过演示一些简单的 cfengine 使用,使您熟悉这一独特的系统管理工具。   初学者和中级系统管理员将从本文获益最多;解说和示例假设您可以运用大部分初学者级别的系统管理概念。   要使用本文中的示例,您的系统应该是一个最近的(2000 或更新)主流 UNIX(Linux、Solaris、BSD)安装。示例可以与早期版本的 Perl 和 UNIX 以及其它操作系统一起使用,如果它们不能工作,对您来说,可以把它当成练习来解决。   cfengine 正处于开发中。版本 1.6.3 是稳定的,它是本文的基础。当前正在进行阿尔法测试的版本 2.0 的计划包括重写体系结构、添加许多很棒的新功能部件以及使语法基本上保持不变。要了解 cfengine 的所有功能以及版本 2.0 中的增强功能,请访问 cfengine主页(请参阅本文后面的参考资料)。   cfengine 的要点   cfengine 将改变您的系统管理方法。您将运行一个命令并观察系统将收敛到一种稳定状态。我保证这看起来象在变魔术。在您喝茶的时候,cfengine 将编辑文件、运行命令并创建符号链接。   然而,cfengine 并不能代替您思考。在将配置文件放入产品之前,您仍需要编写它并对它进行测试。 而另一方面,cfengine 所做的事情几乎很少会造成损害。   cfengine 使系统收敛成为可能。但是,为什么需要收敛呢? 我认为系统管理员首先需要保持内心宁静,其余的事情都是次要的。稳定性、可靠性和可预测性是达到内心宁静的方法。这看似过分简单, 但询问任何一名好的系统管理员,每次您都会得到这个答案。收敛可以帮助管理员达到稳定性、可靠性和可预测性。虽然它不是达到那些目标的唯一方法,但在我的经历中它所带来的痛苦最少。   稳定性可定义为防止无意的更改。当 cfengine 实现收敛时,它通过规则集做到这一点。良好设计的规则(请放心,cfengine 使良好的设计变得容易)只是使系统达到一种理想状态(如在 cfengine 规则中定义的那样理想)。例如,每次运行 cfengine 时,都可以重新创建关键的系统符号链接。或者,只要修改了本地副本,都可以从可信资源库复制 init.d 启动脚本。 如果 cfengine 没有发觉进程在运行,那么可以重新启动它们。   可靠性是使机器幸免于问题的能力。网络出故障或磁盘出故障是主要的可靠性考验。您的系统能幸免于那些问题吗?通过收敛到一种理想状态,您可以期望系统处于或接近那一理想状态。 虽然可靠性不单由 cfengine 完成,但收敛可使之更加容易。 因为稳定的系统不太可能受问题影响,所以稳定性也是可靠性的主要资产。 最后,cfengine 的收敛使获得“空白”系统并使它达到期望的状态成为可能, 并能够对关键系统进行快速临时替换。   这里,有必要多讲讲期望和理想的状态。目前为止,我们假设仅有一种理想状态,它就是那个期望的状态。事实上,对于所有机器来说并没有理想状态。 机器按任务、位置、连通性、用户、操作系统类型和版本等分类。每个系统管理员都用某些方法来对他的机器分类,通常根据上述各项以及更多项(我们稍后将详细讨论类)。虽然对于所有机器来说没有一种理想状态,但对于给定的机器类有一个要达到的理想状态。 这是 cfengine 的设计目标。cfengine 使寻找理想状态变得可行,并且易于收敛到该状态。   可预测性是机器按照期望的那样来运转的能力。 收敛通过使系统变得稳定且可靠来达到可预测性。而且,一旦新机器收敛到一种理想状态,就可以期望它象它所替换的旧机器那样工作。当机器将很快收敛到一个已知状态时,就可以很容易地估计添加系统或替换它们的调度成本。最后,为您系统编写的软件可以期望系统处于一种接近理想的状态。然后,系统资源处于一种可预测的状态,这样,软件就可以更多地集中在功能上,而更少地将每个系统作为怀有敌意的未知领域对待。   cfengine 的概述   Cfengine 由几个程序组成。在版本 1.6.3 中,主程序叫作 cfengine。cfengine 程序解释文件中的规则集,并执行那些规则请求的操作。 严格来说,cfengine 程序只是 cfengine 语言的解释器,并且任何 cfengine 程序都只是那个解释器的脚本。   在版本 1.6.3 中,还有一个名为 cfd 的守护程序及其同伴 cfrun。cfd 将在版本 2.0 得到加强,而在 1.6.3 版本中有许多未完善的地方。幸运的是,不用 cfd,就可以完成我所需要的任务(用信号通知运行 cfengine 并远程复制文件)。我宁愿在 ssh 上通过显式脚本启动 cfengine。 它只比 cfd 少许慢一点,但更易于监控。当通过 cfd 启动时,cfengine 发出的错误和远程定义的类没有可靠地显示出来。 对于远程文件复制,我发现 cfd 是不可靠的而且可能会危害安全性,所以我使用 rsync。cfengine 的作者 Mark Burgess 声明 cfd 在版本 2.0 中将有很大改进,而 rsync 将不再是必需的,但在版本 2.0 推出之前,我建议避免 cfd。   在开始使用 cfengine 之前,应该编译和安装它。对于可以使用它们的系统,RPM 都有可用的版本, 而且还有一个可用的 Solaris 包(请参阅参考资料)。如果要存储文件的永久校验和(类似于 Tripwire 所做的事情),则应该带有 Berkeley DB 支持进行编译。然后,应该开始创建配置文件。 主要的配置文件是 /etc/cfengine/cfengine.conf,它是在不带文件名调用 cfengine 时运行的(当在 1.6.3 中编译时,可以指定一个不同的缺省配置目录,但在 2.0 及更高版本中,/etc/cfengine 将是检查的唯一位置,所以您应该严格遵守这一点)。   下面是 cfengine 的启始配置。它不是成品, 在运行它之前,应该仔细地阅读 cfengine 参考大全和教程(请参阅参考资料)。 请带 -v -n(详细的预演)选项尝试运行 cfengine,看一下这个配置将做些什么。 当使用 -n(预演)选项时,不会影响系统。   清单 1. cfengine 的启始配置文件 /etc/cfengine/cfengine.conf   # note that only some of the possible sections are used here;   # refer to the cfengine documentation for the full list of sections   # you can have.   Comments, as you can see, are like shell or Perl   # comments.   # see the tutorial and reference for any unexplained phenomena   import:   any::   cf.groups   groups:   # all groups are defined in cf.groups, imported above, but you can   # define extras here.   The format is simple:   class = ( machine1 machine2 )   # and then any machine named machine1 or machine2 will have that class   # defined.   # the control section sets up how cfengine will behave   control:   any::   # you have to state in AddInstallable what classes unknown to cfengine   # by default you will be using.   Run cfengine as "cfengine -v" to see   # the built-in classes you don't have to define.   Here we divide   # machines into the ones that run inetd and the ones that run xinetd,   # as an example.   AddInstallable = ( inetd xinetd )   editfilesize   = ( 300000 )   moduledirectory = ( /etc/cfengine/modules )   domain   = ( yourdomain.com )   any::   LogDirectory   = ( /etc/cfengine/log )   netmask   = ( 255.255.255.0 )   Repository   = ( /etc/cfengine/repository )   sysadm   = ( "tzz@iglou.com" )   # Bug in cfengine: actionsequence must follow LogDirectory and Repository   actionsequence = ( directories files editfiles copy links processes disable   shellcommands )   directories:   # this ensures that these directories will be created when cfengine runs   /etc/cfengine/log   /etc/cfengine/repository   /etc/cfengine/cfcollector   files:   any::   # set the permissions for these files   /etc/sudoers mode=0440 owner=root group=root action=fixall   /etc/hosts.allow mode=0644 owner=root group=root action=fixall   /etc/hosts.deny mode=0644 owner=root group=root action=fixall   # just warn if this file's permissions are wrong   /etc/shadow mode=0400 owner=root action=warnall inform=true   # CERT advisory CA-2001-05, for Solaris only   solaris::   /usr/lib/dmi/snmpXdmid mode=0000 owner=root group=root action=fixall   # example of setting permissions differently for different OS types   # (not Linux and Linux), and negating classes   !linux::   /.ssh mode=0700 owner=root action=fixall inform=true   linux::   /root/.ssh mode=0700 owner=root action=fixall inform=true   editfiles:   any::   # add the rsync service to /etc/services and /etc/inetd.conf   { /etc/services   SetLine "rsync   873/tcp # rsync"   
󰈣󰈤
 
 
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
情人节的清纯女生(9)
情人节的清纯女生(8)
情人节的清纯女生(7)
情人节的清纯女生(6)
山东蓬莱海边组照
一探哲蚌 II
一探哲蚌 III
古长城的一角
 
>>返回首页<<
 
 
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有