通常情况下,这根本不需要特殊操作:在%pre
或%post
中生成新文件,并在清除旧内容时通过RPM机制删除旧文件正在升级的RPM。第一个复杂问题:自动生成的文件应与前一个文件保持相同的名称(与此无关:旧的RPM分散在多个客户中;技术规范要求保留名称)。如果它只是生成但在%files
中不存在,则清除机制将删除生成的文件。好吧,可以在%files
中保留一个存根以防止删除。但是还存在第二个复杂问题:生成的文件可能与前一个文件具有相同的名称,但同样可能不同(现在取决于环境)。有没有办法以优雅的方式处理这种情况?
我当前的解决方案非常难看:我确实在%files
中保留了一个存根文件。我在%post
中生成新文件,如果要更改名称,则删除同一脚本中的旧文件。在%preun
中卸载后,如果由于名称更改而在%post
中将其删除,我会再次创建已删除的文件。我这样做是为了避免关于不存在文件的删除尝试的丑陋RPM警告(因为它仍然列在%files
中)。
许多不必要和不自然的工作。比方说,如果有一个选项可以动态指示RPM(在%post
中)保留文件而不是在升级时删除(因为不再在%files
中),这将使情况变得更加简单和清晰。遗憾的是,我没有找到任何类似的选项。我真的很感激能够以更好的方式处理这种情况的建议。
答案 0 :(得分:0)
您可以在%posttrans部分创建该文件。
参见章节" Scriptlets订购"和"在scriptlet之间保存状态"在https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering