使用rpmbuild和Os-nebula-rpm插件创建的RPM之间的差异

时间:2016-03-28 21:01:26

标签: gradle rpm

我正在尝试使用Nebula rpm plugin for Gradle来构建RPM。我发现以这种方式构建的RPM与使用spec文件和rpmbuild构建传统方式的RPM之间存在以下差异。

在spec文件中,您可能会遇到以下情况:

%dir /usr/local/myapp/logs

这将在安装rpm时创建目录/usr/local/myapp/logs。一旦myapp开始运行,它就会将日志写入此目录。卸载应用程序时,rpm会理解/usr/local/myapp/logs下的文件不是由rpm安装过程创建的,因此不会删除此目录或其中的文件。如果在卸载时目录为空,则将删除该目录。

Gradle插件有类似的指令。如果你包括

directory('/usr/local/myapp/logs')

在构建脚本中,将创建此目录,类似于rpm进程。但是,在这种情况下,当卸载rpm时,将删除自安装以来在其中添加的目录和任何文件。

我正在努力解释这种差异。 RPM插件基于redline-rpm java package,通过查看源代码和通常的RedHat rpm documentation,我找不到任何控制此行为的设置。

任何人都可以猜测这里可能会发生什么,以创造这种行为上的差异?

更新: this post有一些关于其工作原理的非常好的信息,但我仍然不知道任何改变此行为的指令的名称。

更新2 现在开始变得非常有趣了。如果我在使用Gradle插件构建的rpm上运行rpm -evv myapp,安装后以及将文件添加到/usr/local/myapp/logs后,我会看到以下内容:

D: fini      040755  2 (7007, 500)      4096 /usr/local/myapp/logs 
D:    erase rmdir of /usr/local/myapp/logs failed: Directory not empty

但仍然在操作完成后,目录消失了! 怎么会这样?是否有一些rpm可执行文件本身的配置允许删除?

0 个答案:

没有答案