我正在用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的错误。