在努力搜索 RPM 最佳实践指南并几乎没有找到后,令我惊讶的是,我求助于社区 -
我需要确保安装后存在一些用户和组,并且这些用户是这些组的成员。对此有推荐的程序吗?
在现有的 rpm 规范中,我看到所需的用户和组在使用 %pre 脚本添加之前已被删除useradd
。我听说这是一种常见的做法。为什么是这样?它比用 测试用户存在更好吗id -u
?
我们的一些客户可能希望自己管理他们的用户,因此他们会在运行我们的 rpm 之前创建用户。综上所述,似乎最好的方法是测试用户是否存在,如果不存在则创建它。对此有何评论?谢谢。
编辑:RHEL 5.7
答案1
useradd
基本上,这个想法是,如果一个包需要特定的组,则用户/组管理应该由 rpm 安装脚本使用或来处理,groupadd
并且应该使用getent
来确定它需要的用户或组是否已经存在。这使得管理员可以灵活地管理系统用户/组,例如通过 LDAP 等目录服务,否则这些用户/组可能由程序包进行管理。另一方面,发行版应该为将由程序包创建的用户和组预先分配 UID 和 GID,以确保如果用户/组是由程序包安装且不是由本地管理员管理的,则 UID 和 GID GID 在运行同一平台的所有系统中都是一致的。
答案2
我意识到这是一个老问题,但我来这里试图找到如何在 rpm 规范文件中创建组。希望以下内容会有所帮助。
要检查组是否存在并查看哪些用户属于该组,请使用
getent group root
例如,对于组“root”。
我还发现以下内容作为在 rpm 规范文件中添加组的标准方法很有帮助:在 rpm 中创建用户和组
在 [rpm 规范文件] 的 %pre 部分中,确保以正确的方式创建所需的用户/组(有关 RHEL 软件包如何执行此操作的示例,请参阅“rpm -q --scripts ...”,您可以或者可能不想使用“系统用户”(uid < 500)等)。
我查看了 rtkit 的例子
rpm -q --scripts rtkit-0.11-10.fc21.x86_64
preinstall scriptlet (using /bin/sh):
getent group rtkit >/dev/null 2>&1 || groupadd -r -g 172 rtkit