0

我正在尝试为我们的程序构建 RPM 并遇到一些问题。我正在尝试在 postinstall/preremove 中将sedandln命令作为脚本运行,它们似乎没有进行任何更改。我们正在使用 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 的一部分时,这有效

4

1 回答 1

0

这应该适用于全新安装。但是,当您升级软件包时它将不起作用。因为下单。请参阅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

于 2016-06-29T20:56:07.320 回答