我正在尝试在Fedora 15中创建一个安装我的软件的RPM,但是为了让我的软件在安装后正常工作,我还需要编辑系统上的其他(配置)文件,添加用户/组只有root用户才能执行其中一些任务。我知道永远不会以root用户身份创建RPM,我理解为什么这是一个糟糕的主意。但是,如果我将shell脚本语句添加到我的spec文件(%post,%prep ... any section)来编辑必要的文件,添加用户/组等,我的rpmbuild命令将失败并显示消息“Permission denied”(不出奇)。
处理此问题的最佳方法是什么?我是否必须先告诉我的用户安装我的软件包,然后以root身份运行shell脚本来配置它?这似乎并不优雅。我希望允许用户使用一个简单的命令来完成所有操作,例如“yum install mysoftware”。
我的大部分研究都表明,或许这甚至不应该通过RPM完成。我已经阅读了Maximum RPM的许多部分,以及许多其他好的资源,但还没有找到我正在寻找的东西。我是创建RPM的新手,但已经能够为我的软件成功创建一个简单的spec文件......在解压缩包并安装到正确的位置后,我无法正确配置所有内容。非常感谢任何输入!
答案 0 :(得分:7)
useradd
应该在%pre
中运行,不应在rpmbuild
期间运行。这是做到这一点的标准方式。我会推荐packaging guidelines,特别是users and groups上的部分。
答案 1 :(得分:5)
RPM %pre
文件的.spec
部分应检查软件安装所需的所有条件。
RPM %post
文件的.spec
部分应进行软件运行所需的所有修改
为避免RPM %post
文件的.spec
部分中出现文件权限错误,您可以在%files
部分设置文件权限和所有权。这样,安装RPM的用户具有修改配置文件的适当权限。
%install
# Copy files to directories on your installation server
%files
# Set file permissions and ownership on your installation server
%attr(775, myuser, mygroup) /path/to/my/file
%pre
# Check if custom user 'myuser' exists. If not, create it.
# Check if custom group 'mygroup' exists. If not, create it.
# All other checks here
%post
# Perform post-installation steps here, like editing other (configuration) files.
echo "Installation complete."