【问题标题】:%defattr behaviour change between rpm 4.7.2 and 4.9.1?rpm 4.7.2 和 4.9.1 之间的 %defattr 行为变化?
【发布时间】:2013-09-01 00:47:41
【问题描述】:

是否允许在规范文件中多次使用%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

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

【问题讨论】:

    标签: rpmbuild rpm-spec


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。你是对的,设置第四个参数,目录权限,正在做我想做的事。我有一组具有不同权限的目录(不包含文件)。每个组都以不同的 %defattr 设置为前缀。在最近的操作系统升级(新版本的 rpmbuild)之后,我的 rpm 的行为发生了变化,但似乎我一开始可能没有完全正确地使用 %defattr。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 2019-10-20
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2015-10-30
    • 2014-02-21
    • 2020-09-09
    相关资源
    最近更新 更多