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