RPM在Post scriptlet中替换文件

时间:2014-07-07 17:40:06

标签: rpm

我目前正在编写一个包含配置和还原脚本的RPM,这些脚本将在安装完成后手动运行。

当我部署一个较旧的软件包时,我希望保留现有的版本,而不是用旧版本覆盖它们。在升级过程中,应该覆盖reversion脚本文件夹。

(简化:在升级过程中我想添加新脚本,在降级期间我不希望删除更新的脚本。)

我目前的做法是在预安装期间将旧脚本复制到临时文件夹,然后将其复制回安装后的reversion脚本文件夹中。我可以在部署完成后手动复制文件。

我使用以下命令:

'cp' -f TempScriptFolder ScriptFolder. 

此时我对这个RPM goop非常困惑,并且不确定还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

您的pre-post-保存脚本文件的方法很好,您只需要对逻辑提供一些帮助。您的第一个问题是由于缺少-r-a cp选项,因此您没有使用上述命令复制任何内容。没有一个或另一个,cp将不会递归复制。尝试:

'cp' -af TempScriptFolder ScriptFolder

其次,如果您能够将版本附加到脚本目录名称,以便您可以参考脚本来自哪个版本,将会很有帮助。 (您可以在.spec文件中找到该版本,您可以将其写入临时.ver文件或传递给您的前/后脚本)在pre-install中,您可以使用mv命令来完成你需要。您可以将ScriptFolder移动到新文件夹,如下所示:

mv -f ScriptFolder ScriptFolder.version

这将保留单独目录中任何版本的脚本。如果您希望它们都包含在脚本文件夹下,mv再次成为您的朋友。只需mv -f ScriptFolder.version ScriptFolder将版本化目录放在现有的ScriptFolder目录下。

在升级/降级时,您可以再次获取该版本并检查ScriptFolde/*.version以查找该版本的现有脚本集,然后使用循环法mv还原到该版本。类似的东西:

mv -f ScriptFolder/ScriptFolder.version tmp.version
mv -f ScriptFolder.saveversion
mv -f tmp.version ScriptFolder

您可以制定出适合您的方法。