使用Puppet安装RPM并执行脚本

时间:2016-02-25 03:29:56

标签: puppet rpm

我有一个安装shell脚本的RPM。 Puppet代码需要访问此RPM,检索RPM中打包的shell脚本并执行它。我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以通过

提取rpm scriptlet
rpm -qp --script foo.rpm

请注意它包含所有脚本(%pre,%post,%postun ...),因此您需要使用sed或类似的东西来提取该脚本,将其保存到文件和运行。

答案 1 :(得分:0)

你需要一个package语句来安装rpm,然后一个exec来运行shell脚本。假设您的rpm名为my-shellscript.rpm,位于模块的files目录中,并且rpm将安装位置定义为/tmp/my-shellscript.sh,那么您将拥有类似的内容,

class example {    

    package { 'my-shellscript.rpm' :
        ensure   => 'installed',
        provider => 'rpm',
        source   => 'puppet:///modules/example/my-shellscript.rpm',
    }

    exec { 'my-shellscript.sh':
        command => '/tmp/my-schellscript.sh', 
        require => Package['my-shellscript.rpm'],
    }
}

答案 2 :(得分:0)

要从代码中执行脚本,您需要执行以下步骤:

  1. 在某个临时目录中提取rpm的内容。您可以使用rpmcpio实用程序。

    rpm2cpio test.rpm |cpio -idmv

  2. 在rpm文件中找到脚本的位置。你可以使用rpm命令。

    rpm -qpl test.rpm |grep "script.sh"

  3. 在您的代码中,从您提取rpm内容的临时位置执行脚本。

    sh /tmp/test/xxx/script.sh