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

%attr in rpm.spec does not take env variable's value

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

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

这是不可能的。 %attr 在构建时固定;你特意要求 "during the rpm installation" 这行不通。

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

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

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