使用Puppet安装RPM并执行脚本

使用Puppet安装RPM并执行脚本,puppet,rpm,Puppet,Rpm,我有一个安装shell脚本的RPM。Puppet代码需要访问这个RPM,检索打包在RPM中的shell脚本并执行它。我该怎么做?您可以通过 rpm -qp --script foo.rpm 请注意,它包含所有脚本(%pre,%post,%poston…),因此您需要使用sed或类似的工具来提取一个脚本,将其保存到文件并运行。您需要一个package语句来安装rpm,然后需要一个exec来运行shell脚本。假设您的rpm名为my-shellscript.rpm,并且位于模块的files目录中,

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

您可以通过

rpm -qp --script foo.rpm

请注意,它包含所有脚本(%pre,%post,%poston…),因此您需要使用sed或类似的工具来提取一个脚本,将其保存到文件并运行。

您需要一个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'],
    }
}

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

  • 在某个临时目录中提取rpm的内容。您可以使用rpmcpio实用程序进行此操作

    rpm2cpio test.rpm | cpio-idmv

  • 在rpm文件中查找脚本的位置。您可以使用rpm命令进行此操作

    rpm-qpl test.rpm | grep“script.sh”

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

    sh/tmp/test/xxx/script.sh