我目前正在编写一个包含配置和还原脚本的RPM,这些脚本将在安装完成后手动运行。
当我部署一个较旧的软件包时,我希望保留现有的版本,而不是用旧版本覆盖它们。在升级过程中,应该覆盖reversion脚本文件夹。
(简化:在升级过程中我想添加新脚本,在降级期间我不希望删除更新的脚本。)
我目前的做法是在预安装期间将旧脚本复制到临时文件夹,然后将其复制回安装后的reversion脚本文件夹中。我可以在部署完成后手动复制文件。
我使用以下命令:
'cp' -f TempScriptFolder ScriptFolder.
此时我对这个RPM goop非常困惑,并且不确定还有什么可以尝试。
答案 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
您可以制定出适合您的方法。