我正在运行 CentOS 6.8,我已经更改了/etc/rc.d/init.d/sendmail
(在 中我无法执行的操作/etc/sysconfig/sendmail
),但是 yum 在更新 sendmail 时覆盖了该文件。有没有办法配置 yum 不更新某些文件,而是警告我更改(并将新版本存储在某处,以便我可以将更改与更新合并)?
答案1
你真的不能。 yum
(或更严格地说rpm
)取决于%config
RPM 内部来决定文件是配置文件,即当更新的文件恰好位于较新的 RPM 中时,标记为 的文件%config(noreplace)
将被保存。.rpmnew
您有两个选择:
- 下载RPM(不是跟你更新)并用
%config(noreplace)
for重新打包/etc/rc.d/init.d/sendmail
,然后用yum安装。 - 下载 RPM 并用于
rpm --excludepath
安装该软件包。我更喜欢这个选项,它很老套,但不像每次更新时编辑 RPM 那样老套。见下文:
首先排除sendmail
使用yum update
,/etc/yum.conf
进行更新
exclude=sendmail*
这将使软件包yum
永远不会更新sendmail
,但仍会列出它,yum check-update
以便您知道有新的 sendmail RPM 可用。然后您可以使用以下命令下载它:
yum install -downloadonly --installroot=. sendmail-<version>
然后使用rpm
with--excludepath
不更新文件/etc/rc.d
:
rpm --excludepath /etc/rc.d/init.d/sendmail sendmail-<version>.rpm
参考%config
:
答案2
您可以将文件设置为不可变 ( chattr +i /etc/rc.d/init.d/sendmail
)。软件包的任何(自动)更新都会失败,这会让您意识到这种情况;然后只需删除不可变标志,执行更新,重做文件的修改,然后再次将其设置为不可变。