创建全局变量或变量用户/组rpm

时间:2015-11-26 10:39:14

标签: global-variables rpm rpmbuild verify

我有问题。根据平台,我在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

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

在执行%post之前评估并安装

%文件。用户必须提前存在。因此:

在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中更改的值。