【发布时间】:2015-08-30 09:50:45
【问题描述】:
通常,这根本不需要特殊操作:在%pre 或%post 中生成一个新文件,并在清理正在升级的 RPM 的旧内容时通过 RPM 机制删除旧文件.第一个复杂性:自动生成的文件应该与前一个文件保持相同的名称(与此无关:旧的 RPM 分散在多个客户中;技术规范要求保持名称)。如果它只是简单地生成但在%files 中不存在,则清理机制会删除生成的文件。好吧,可以在%files 中保留一个存根以防止删除。但是还有第二个复杂性:生成的文件可能与前一个文件具有相同的名称,但也可能不同(这取决于现在的环境)。有没有办法优雅地处理这种情况?
我目前的解决方案非常难看:我确实在%files 中保留了一个存根文件。如果需要更改名称,我会在 %post 中生成新文件并在同一脚本中删除旧文件。在%preun 中卸载后,如果由于名称更改而在%post 中删除它,我将再次创建已删除的文件。我这样做是为了避免出现关于尝试删除不存在文件的丑陋 RPM 警告(因为它仍列在 %files 中)。
很多不必要和不自然的工作。比如说,如果有一个选项可以在升级时动态地指示 RPM(在 %post 中)保留文件而不是删除(因为不再在 %files 中),这将使情况变得更加简单和清晰。遗憾的是,我还没有找到任何类似的选项。我真的很感激能以更好的方式处理这种情况的建议。
【问题讨论】: