【问题标题】:%attr in rpm.spec does not take env variable's valuerpm.spec 中的 %attr 不采用环境变量的值
【发布时间】:2019-05-21 07:29:10
【问题描述】:

我有一个 rpm.spec 文件,我必须在其中授予文件的文件权限。

我希望 %attr 在 rpm 安装期间获取 $user 和 $group 值。(我将在其中执行“export user=”和“export group=”) 但它不采用这些值,而是在安装 rpm 时出现语法错误。

我的规范文件中有类似的东西

%pre

%files
%defattr(-,root,root,-)
<some_path>
%config /etc/akshatha
%doc /usr/share/doc/akshatha
%attr(0700,$user,$group) %dir directory_path
%attr(0700,$user,$group) %dir directory_path
%attr(0600,$user,$group) path_to_file 

这给了我一个错误,同时将 rpm 安装为 -

warning: user $user does not exist - using root
warning: group $group does not exist - using root

我什至尝试提供 %attr(0700,%{getenv:user},%{getenv:group}) 但这在准备 rpm 本身时失败了

RPM build errors:
Bad syntax: %attr(0700)
make: *** [all] Error 1

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    这是不可能的。 %attr 在构建时固定;您特别要求“在 rpm 安装期间”不起作用。

    在您的%post 中您可以chown 但这会破坏您的验证。

    【讨论】:

    • 它会在什么意义上破坏验证?
    • rpm -V 将报告文件的模式与 rpmdb 认为的模式不同。
    • chmod:无法访问“”:没有这样的文件或目录 chown:无法访问“”:没有这样的文件或目录
    【解决方案2】:

    编辑:正如@AaronD.Marasco 所说:在 rpm 安装期间是不可能的。如果你想定义它在构建过程中;那么你可以这样继续:

    调用rpmbuild时可以在命令行定义宏:

    在规范文件中:

    %attr(0700,%{file_user},%{file_group}) /path/to/file
    

    像这样调用rpmbuild:

    rpmbuild --define='file_user some_user' --define='file_group some_group'
    

    【讨论】:

    • OP 说“在 rpm 安装期间”这是不可能的。
    • @AaronD.Marasco 你是对的;我更正了我的答案,你有我的支持:)
    • @AkshathaRamesh 如果您的问题得到解答,那么请考虑接受这些答案中的任何一个以将您的问题标记为已解决。您可以选择为其他有用的答案投票。
    【解决方案3】:

    正如其他人指出的那样,这是不可能的。考虑到您要实现的目标,我会这样做:

    %pre
    getent group GROUPNAME >/dev/null || groupadd -r GROUPNAME
    
    %files
    %config /etc/akshatha
    %doc /usr/share/doc/akshatha
    %attr(0770,root, GROUPNAME) %dir directory_path
    ...
    

    然后我会指示管理员将用户放入组 GROUPNAME。

    【讨论】:

    • 是的,我正在做同样的事情..但事情是组和用户将在运行时获得我的用户(在安装 rpm 时有意义)。所以,getent 组 $GROUPNAME >/dev/null ||组添加 -r $GROUPNAME 。应该采取用户为 $GROUPNAME 设置的任何 evn .. 应该为 %attr(0770,root, $GROUPNAME) %dir directory_path 应用相同的东西
    猜你喜欢
    • 2019-10-11
    • 2019-06-19
    • 2023-04-06
    • 2014-09-30
    • 1970-01-01
    • 2012-11-13
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多