我有一个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
答案 0 :(得分:1)
这是不可能的。 %attr
在构建时固定;您专门要求“在rpm安装期间”无效。
您可以在%post
中chown
,但这会破坏您的验证。
答案 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中。