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



我有个问题。根据平台的不同,我在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中更改的值。

最新更新