3

是否允许%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)后,使用相同的规范文件重新生成 rpm 并部署到同一目标机器导致/var/log/testdir2的权限为 755。我必须将规范文件更改为%attr在上面的/var/log/testdir3中定义以获得所需的权限。

规范文件有一个%defattr定义,后面是具有这些权限的文件集,然后是另一个%defattr定义,后面是具有这些权限的文件集。这是不允许的吗?或者在权限方面如何处理目录和文件之间是否存在差异?

4

1 回答 1

4

%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属性。

于 2013-09-01T23:42:50.913 回答