%defattr行为在rpm 4.7.2和4.9.1之间变化?

时间:2013-08-28 19:20:00

标签: rpmbuild rpm-spec

是否允许在spec文件中多次使用%defattr?在Ubuntu 10(rpm版本4.7.1)下,以下定义将导致将777权限应用于 / var / log / testdir2

%files
%defattr(-,root,root,-)
%dir /var/log/testdir1
%defattr(777,root,root,-)
%dir /var/log/testdir2
%dir %attr(777,root,root) /var/log/testdir3

升级到Ubuntu 12.04.1(x86_64RPM版本4.9.1.1)后,使用相同的spec文件重新生成rpm并部署到同一目标计算机导致 / var / log / testdir2 具有权限755.我必须更改spec文件以定义%attr,如上面的 / var / log / testdir3 ,以获得所需的权限。

spec文件的%defattr定义后面是具有这些权限的文件集,然后是另一个%defattr定义,后跟具有这些权限的文件集。那是不允许的?或者在权限方面如何处理目录和文件?

1 个答案:

答案 0 :(得分:3)

%defattr通常用于设置文件/目录的默认属性,因此多次使用它对我来说似乎很奇怪。首先让我们看看%defattr值:%defattr(file perms, user, group, dir perms)。所以/ var / log / testdir3目录可能在你的tarball中拥有755的权限,因为你没有设置目录权限,它只是继承它们。

尝试这样的事情:

%files
%defattr(755,root,root,777)
%dir /var/log/testdir1
%dir /var/log/testdir2
%dir /var/log/testdir3

使用我上面的内容,它会将目录设置为777,然后将列出的所有文件设置为755,因为它继承了默认值(两者都拥有root.root的所有权)。

我仍然有点困惑为什么你将日志目录的权限设置为777,就像你声明%dir时它只设置了目录权限。你不是想把文件设置成什么东西吗?如果您需要具有不同权限的特定目录,则应使用%attr属性。

相关问题