如何从自定义 rpm 添加到 sudoers.d

如何从自定义 rpm 添加到 sudoers.d

我有一个自己创建的自定义 RPM,需要向 sudoers 添加条目,因此我在我的 RPM 中添加了一个文件条目/etc/sudoers.d/mypackage,并将我的 sudo 命令放入其中。

文件已添加,RPM 已生成。不幸的是,当我尝试安装该软件包时,它报错:

file /etc/sudoers.d from install of mypackage-1.0.0-1.x86_64 conflicts with file from sudo-1.8.6p7016.el7.x86_64

如果我使用 --force 安装 rpm,它将正确安装,例如:

rpm -Uvh --force mypackage.rpm

我可能可以将 sudoers 文件的内容回显到其中,/etc/sudoers.d但我更希望使用 rpm 来跟踪 sudoers 文件。

如何从自定义 RPM 向 sudoers 添加条目而不让 sudo 抱怨?

编辑:为了澄清一下我的帖子,我有十几个包含文件的目录:

/etc/sudoers.d
/etc/httpd/conf.d/
/etc/systemd/system
/etc/cron.d
...

因为我事先没有目录列表,而且这个列表可能会改变,所以我尝试做的是:

%files
/etc/*
%exclude /etc/sudoers.d
/etc/sudoers.d/*

但此时,sudoers.d 中的文件不会被包含。如果我想逐个提及目录,我必须动态生成目录列表

按照建议,我尝试rpm -qf /etc/sudoers.d这样做,它确实说了sudo-1.8.5.el7_2.x86_64。如果我这样做rpm -qf /etc/systemd/system,它确实说了systemd-219-19.el7_2.x86_64,但当我尝试安装 rpm 时,rpm 不会抱怨

答案1

这可能是因为在%files部分中有类似这样的内容:

%files
/etc/sudoers.d/

这使得您的软件包不仅包含 ; 中的文件,/etc/sudoers.d还包括目录本身。您可以使用 进行检查rpm -qlp <generated-rpm>

rpm不允许不同的包提供相同的文件或目录。解决方案是仅打包文件里面这个目录:

%files
/etc/sudoers.d/*

相关内容