我有个问题。根据平台的不同,我在rpm中的文件有不同的用户/组。问题是,你已经应该用rpm -V
看到rpm的正确属性,所以我不能更改%post部分中的属性,因为这将始终显示用户已经更改。
有没有一种方法可以创建一个全局变量,我设置变量user的名称,然后在%files部分使用它?我用define尝试过,但它不能正常工作:
%pre
HOME = path
if[true]
%define USER example1
useradd -m -r -c $HOME $USER
else
%define USER example2
useradd -m -r -c $HOME $USER
fi
%files
%defattr(-, %{USER}, ...)
这给了我错误警告:用户示例2不存在-使用根
有人知道如何解决这个问题吗?
%文件在执行%post之前进行评估和安装。用户必须预先存在。因此:
在最顶级的规范文件puth
%global USERNAME example1
%global GROUPNAME example1
然后以%预投入:
%pre
getent group %{GROUPNAME} >/dev/null || groupadd -r %{GROUPNAME}
getent passwd %{USERNAME} >/dev/null ||
useradd -r -g %{GROUPNAME} -d HOMEDIR -s /sbin/nologin
-c "Useful comment about the purpose of this account" %{USERNAME}
exit 0
有关更多信息,请参阅:https://fedoraproject.org/wiki/Packaging:UsersAndGroups?rd=Packaging/UsersAndGroups#Dynamic_allocation
我很确定这不是最佳实践,但我找到了一种方法:
%build
if [condition]; then
%global USERNAME example1
else
%global USERNAME example2
fi
稍后在%pre
部分中,我可以添加用户,以防他不存在。
然后我可以在文件部分使用这个可变用户,就像我在%attr(-, %{USERNAME}, ...)
问题中一样
如果我在文件的开头定义全局变量(%global USERNAME example0
),构建将简单地使用在那里定义的值,并忽略%build
中更改的值。