我有问题。根据平台,我在rpm中的文件具有不同的用户/组。
问题是你已经看到rpm的正确属性rpm -V
所以我无法更改%post部分中的属性,因为这将始终显示用户已被更改。
有没有办法创建一个全局变量,我在其中设置变量用户的名称,然后在%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}, ...)
这给了我错误警告:用户example2不存在 - 使用root
有谁知道如何解决这个问题?
答案 0 :(得分:2)
%文件。用户必须提前存在。因此:
在spec文件puth的顶部
%global USERNAME example1
%global GROUPNAME example1
然后在%pre put:
%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
答案 1 :(得分:0)
我很确定这不是最佳做法,但我找到了一种方法:
%build
if [condition]; then
%global USERNAME example1
else
%global USERNAME example2
fi
稍后在%pre
部分,我可以添加用户,以防他不存在。
然后我可以在文件部分中使用此变量用户,就像我在%attr(-, %{USERNAME}, ...)
如果我要在文件的开头定义全局变量
(%global USERNAME example0
),构建将只使用其中定义的值并忽略%build
中更改的值。