【问题标题】:sed and ln commands not working in rpm post install scriptsed 和 ln 命令在 rpm 安装后脚本中不起作用
【发布时间】:2016-11-01 14:38:38
【问题描述】:

我正在尝试为我们的程序构建 RPM,但遇到了一些问题。我正在尝试在 postinstall/preremove 中将 sedln 命令作为脚本运行,它们似乎没有进行任何更改。我们正在使用 maven rpm 插件来构建 RPM。我在某处读到关闭 selinux 可能会有所帮助,但它仍然不起作用。我们使用的是 CentOS 7。

来自 pom.xml:

  <postinstallScriptlet>
    <script>sed -i 's/foo/bar/g' /path/to/file</script>
  </postinstallScriptlet>
  <preremoveScriptlet>
    <script>sed -i 's/bar/foo/g' /path/to/file</script>
  </preremoveScriptlet>

这在我手动运行时有效,但不是作为 rpm 的一部分

【问题讨论】:

  • 可以添加/path/to/sed -i ... 吗?祝你好运。
  • /path/to/sed 没有修复它。
  • 您确实使用了/usr/bin/sed 或适当的/path/to/ 吗?祝你好运。
  • 是的,我用过 /usr/bin/sed。

标签: sed centos rpm rpm-maven-plugin


【解决方案1】:

这应该适用于全新安装。但是,当您升级软件包时它将不起作用。因为下单。见https://fedoraproject.org/wiki/Packaging:Scriptlets#Scriptlet_Ordering

rpm首先调用新包的postinstallScriptlet,安装它,然后调用旧版本包的preremoveScriptlet,然后删除旧版本。 所以你基本上打电话给sed -i 's/foo/bar/g' /path/to/file,然后是sed -i 's/bar/foo/g' /path/to/file

你可能想要这样的东西:

<preremoveScriptlet>
    <script>
if [ 0$1 -eq 0 ] ; then
  sed -i 's/bar/foo/g' /path/to/file
fi
</script>
  </preremoveScriptlet>

仅当您真正卸载软件包时才会调用 sed。而不是在升级期间。安装后脚本的相似之处。见https://fedoraproject.org/wiki/Packaging:Scriptlets#Syntax

【讨论】:

  • 安装后 scriptlet 甚至不适用于全新安装。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 2016-09-06
  • 2017-03-05
  • 2013-12-04
  • 1970-01-01
  • 2014-04-18
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多