我必须构建一个rpm 来复制文件A
的内容,以/path/to/tartetfile
主机名是否为A。在所有其他情况下,应将B
的内容复制到/path/to/targetfile
。我知道这可能是对rpm的误用,但我仍然必须这样做。您有什么想法如何以优雅的方式完成此操作吗?
我目前的解决方案是在我的BUILD
目录中创建一个空/path/to/targetfile
以及一个包含文件A
和B
的/tmp/contents.tar.gz
。在安装后例程中,我将提取/tmp/contents.tar.gz
的相关部分进行/path/to/targetfile
,然后删除压缩包。在预卸载例程中,我会触摸/tmp/contents.tar.gz
以抑制已删除文件的 rpm 报告错误。
对我来说,这似乎是一种非常肮脏的方式来完成这项工作。你有更好的吗?
如果你打算滥用rpm
来做一些不该做的事情,你将不得不做一些肮脏的把戏。
我没有看到适合您的其他解决方法。我看不到去除焦油.gz等的用途,除非(很少?)额外的空间对你来说确实是一个问题。我建议:
- 将所有文件(A 和 B)打包到某个特定的目录(
/usr/lib/your-package
或其他什么)中,而不是压缩格式。 - 在
%post
部分中,仅创建符号链接,以便/path/to/targetfile
指向/usr/lib/your-package/A
或/usr/lib/your-package/B
(符号链接几乎不占用空间)。这具有附加值,ls -l /path/to/targetfile
将显示它指向哪个文件,从而为您提供这是文件 A 还是 B 的信息。 - 在您的
%files
部分中声明%ghost /path/to/targetfile
,以便在删除时进行漂亮的清理。