rpm.spec中的%attr不采用环境变量的值

时间:2019-05-21 07:29:11

标签: rpm rpmbuild rpm-spec

我有一个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

3 个答案:

答案 0 :(得分:1)

这是不可能的。 %attr在构建时固定;您专门要求“在rpm安装期间”无效。

您可以在%postchown,但这会破坏您的验证。

答案 1 :(得分:0)

编辑:正如@ 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'

答案 2 :(得分:0)

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

%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中。