Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux RPM:升级时用生成的文件替换文件_Linux_Rpm - Fatal编程技术网

Linux RPM:升级时用生成的文件替换文件

Linux RPM:升级时用生成的文件替换文件,linux,rpm,Linux,Rpm,通常,这根本不需要特殊操作:在%pre或%post中生成新文件,旧文件由RPM机制删除,同时清除正在升级的RPM的旧内容。第一个复杂问题:自动生成的文件应该与前一个文件保持相同的名称与此无关:旧的RPM分散在多个客户中;技术规范要求保留名称。如果它只是生成的,但不存在于%文件中,则清除机制将删除生成的文件。嗯,可以在%文件中保留存根以防止删除。但还有第二个复杂问题:生成的文件可能与前一个文件同名,但也可能与前一个文件同名,这取决于当前的环境。有没有一种方法可以优雅地处理这种情况 我目前的解决方案

通常,这根本不需要特殊操作:在%pre或%post中生成新文件,旧文件由RPM机制删除,同时清除正在升级的RPM的旧内容。第一个复杂问题:自动生成的文件应该与前一个文件保持相同的名称与此无关:旧的RPM分散在多个客户中;技术规范要求保留名称。如果它只是生成的,但不存在于%文件中,则清除机制将删除生成的文件。嗯,可以在%文件中保留存根以防止删除。但还有第二个复杂问题:生成的文件可能与前一个文件同名,但也可能与前一个文件同名,这取决于当前的环境。有没有一种方法可以优雅地处理这种情况

我目前的解决方案非常糟糕:我确实在%文件中保留了一个存根文件。我在%post中生成新文件,如果名称需要更改,则在同一脚本中删除旧文件。在%preun中卸载后,如果由于名称更改而在%post中删除了删除的文件,我将再次创建该文件。我这样做是为了避免关于删除不存在文件的尝试的丑陋RPM警告,因为它仍然列在%文件中


许多不必要和不自然的工作。比如说,如果有一个选项可以动态指示%post中的RPM保留一个文件,而不是删除,因为升级时不再在%files中,这将使情况变得非常简单和清晰。遗憾的是,我没有找到任何类似的选择。如果您能给我一个更好地处理这种情况的建议,我将不胜感激。

您可以在%posttrans部分创建该文件


请参阅

上的章节Scriptlet在Scriptlet之间排序和保存状态。好的,谢谢您的建议。这确实有效,我想我会这样做,除非有更好的选择。我觉得这种解决方案有点不自然,因为它建议将要执行的工作移动到另一个位置/时间,而不是纠正不希望的行为文件删除。无论如何,这个决议看起来比我以前做的更简单、更清晰。我的另一个并发症与maven的使用有关;它提供posttransScriptlet,但在生成规范文件时丢失%posttrans关键字。我不得不添加第%posttrans行作为scriptlet本身的第一行。