0

我在尝试使用 CFENGINE3.5 配置某些东西时遇到了一个问题,我创建了一个从源代码安装一些包的策略,它从某个 url 下载 tar 球,然后解压缩它并使用 make 和 make install 进一步挖掘它,一切正常除了下载保存在“/etc”位置的 tar 球外,我希望 cfengine 将此文件放在 /tmp。

有没有办法自定义 cfengine 的这种默认行为,以将所有临时下载的文件保存在“/tmp”而不是“/etc”。

以下是政策片段:

bundle agent install
{
  vars:
      "packages" slist => {
                            "Algorithm-Diff-1.1902",
                            "Apache-DB-0.13",
                            "Apache-DBI-1.06",
                            "Apache-Session-1.83",
                            "Apache-SessionX-2.01",
                            "AppConfig-1.65",
                            "Archive-Tar-1.32",
      };

  commands:
      "/usr/bin/wget http://10.X.X.X/downloads/perl-modules/$(packages).tar.gz;
/usr/bin/gunzip $(packages).tar.gz;
tar -xf $(packages).tar;
cd $(packages);
/usr/bin/perl Makefile.PL;
/usr/bin/make;
/usr/bin/make install;"
        contain =>  standard,
        classes => satisfied(canonify("$(packages)-installed"));
}

body contain standard
{
        useshell => "true";
        exec_owner => "root";
} 

提前致谢。

4

1 回答 1

1

您可以将执行命令的目录添加到contain正文中,如下所示:

body contain standard
{
  useshell => "true";
  exec_owner => "root";
  chdir => "/tmp";
}

请注意,标准库 (lib/3.5/commands.cf) 中已经有一些contain主体,也许可以使用其中之一,因此您不必编写自己的。请注意,CFEngine 已经以 root 身份执行,因此exec_owner => "root"不是绝对必要的。

于 2013-10-07T14:29:14.770 回答