来自RPM的一些文件具有虚假的权限

我正在用fpm构buildRPM。 其中一个目标是设置安装文件的用户和组,所以我使用了--rpmuser--rpmgroup标志。

它的大部分工作,但是其中一个目录没有收到所需的用户/组。 我用-e标志运行fpm来检查Spec文件。 所有文件和目录都在%files指令下面标记,该指令应该设置所需的用户和组 – adminuser,admingroup

 %files %defattr(-,adminuser,admingroup,-) # Reject config files already listed or parent directories, then prefix files # with "/", then make sure paths with spaces are quoted. I hate rpm so much. /etc/admin-services/admin.properties /usr/share/admin-app/static/admin-console/index.html /usr/share/admin-app/static/admin-console/console-env.js /usr/share/admin-app/static/admin-console/css/styles.css /usr/share/admin-app/webapps/admin-services.war 

安装完成后, 除了 / usr / share / admin-app / static目录(以及其下的所有文件),所有文件都属于adminuser,admingroup ,它们都属于root,root

我不认为这是FPM的错,规格文件看起来不错。 我相信这是rpmbuild下的一个问题。 任何想法可能会发生什么?

我已经阅读了规格文件的文档 ,我没有看到任何可能影响/ usr / share / admin-app / static目录的其他指令。

你应该使用--directories选项。 从fpm --help

 --directories DIRECTORIES Recursively mark a directory as being owned by the package 

没有它,所有权只是为文件设置,目录被省略,并将属于root:root

如果添加--directories /usr/share/admin-app/static并使用fpm -e查看spec文件,您将会看到它添加了%dir指令,该指令明确设置了您所期望的权限:

 %dir %attr(775, adminuser, admingroup) /usr/share/admin-app/static 

还有其他的path下的子目录,如果有的话。

另外,如果你的rpm根目录下有多个目录 (就像我做的那样),你必须为每个目录使用一个--directories选项。

这有点令人困惑,但是让我们感谢rpm,而不是fpm的错误。