sed和ln命令在rpm post安装脚本中不起作用

时间:2016-06-29 18:13:24

标签: sed centos rpm rpm-maven-plugin

我正在尝试为我们的程序构建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

的一部分时,这是有效的

1 个答案:

答案 0 :(得分: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。而不是在升级期间。类似于安装后的scriptlet。见https://fedoraproject.org/wiki/Packaging:Scriptlets#Syntax