【问题标题】:RPM Replace Files In Post scripletRPM 替换 Post 脚本中的文件
【发布时间】:2014-07-07 17:40:06
【问题描述】:

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

当我部署一个旧包时,我想保留我现有的恢复脚本,而不是用旧的覆盖它们。在升级期间,应覆盖还原脚本文件夹。

(简化:在升级期间我想添加新脚本,在降级期间我不想删除较新的脚本。)

我目前的方法是在预安装过程中将旧脚本复制到一个临时文件夹中,然后将它们复制回安装后的还原脚本文件夹中,这不是。我可以在部署完成后手动复制文件。

我正在使用以下命令:

'cp' -f TempScriptFolder ScriptFolder. 

在这一点上,我对这个 RPM goop 感到很困惑,并且不确定还可以尝试什么。

【问题讨论】:

  • %post 期间复制文件有什么问题?

标签: rpm


【解决方案1】:

您保留脚本文件的pre-post- 方法很好,您只需要一些逻辑帮助。您的第一个问题是您没有使用上面的命令复制任何内容,因为您缺少 cp-r-a 选项。 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

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

【讨论】:

  • 好吧,我发现如果我做了一个文件夹/*文件夹/,我就无法复制。完整的文件夹 + 内容副本似乎有效。我需要稍微玩一下它才能让它按照我想要的方式工作,但我正在再次前进。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
相关资源
最近更新 更多