我有一个自己创建的自定义 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/*