%rpm.spec中的attr不接受环境变量';s值

%rpm.spec中的attr不接受环境变量';s值,rpm,rpmbuild,rpm-spec,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 %att

我有一个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 
我甚至尝试过给出%attr(0700,%%{getenv:user},%%{getenv:group}),但在准备rpm时失败了

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

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

rpmbuild --define='file_user some_user' --define='file_group some_group'
调用
rpmbuild
时,可以在命令行上定义宏:

在等级库文件中:

%attr(0700,%{file_user},%{file_group}) /path/to/file
像这样调用
rpmbuild

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

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


在你的
%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。

OP说“在rpm安装期间”,这是不可能的。@AaronD.Marasco您是对的;我纠正了我的答案,你有我的赞成票:)阿克沙拉马什,如果你的问题被回答了,那么请考虑接受这些答案来解决你的问题。您可以选择向上投票其他有用的答案。它将在什么意义上打破验证?
rpm-V
将报告文件的模式与rpmdb认为的模式不同。chmod:无法访问“”:没有这样的文件或目录chown:无法访问“”:没有这样的文件或目录是的,我正在以同样的方式进行操作。。但问题是,组和用户将在运行时(在安装rpm时)获得我的用户。因此,getent group$GROUPNAME>/dev/null | | groupadd-r$GROUPNAME。应采用用户为$GROUPNAME设置的evn。。对于%attr(0770,根,$GROUPNAME)%dir目录\u路径,也应该应用同样的方法