我有一个安装shell脚本的RPM。 Puppet代码需要访问此RPM,检索RPM中打包的shell脚本并执行它。我该怎么做?
答案 0 :(得分:0)
您可以通过
提取rpm scriptletrpm -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)
要从代码中执行脚本,您需要执行以下步骤:
在某个临时目录中提取rpm的内容。您可以使用rpmcpio实用程序。
rpm2cpio test.rpm |cpio -idmv
在rpm文件中找到脚本的位置。你可以使用rpm命令。
rpm -qpl test.rpm |grep "script.sh"
在您的代码中,从您提取rpm内容的临时位置执行脚本。
sh /tmp/test/xxx/script.sh