我们管理系统,因此也管理存储库。我们删除/etc/yum.repos.d/<file>
我们的问题是:在系统更新/升级后,CentOS会自动重新创建已删除的存储库,这对我们来说是个问题。
问题:是否有命令/方法来确保在CentOS 7系统上升级后不会重新创建存储库。
答案 0 :(得分:1)
这些存储库是由某人创建的,操作系统不会重新创建它们。
可以通过更新centos-release
之类的RPM软件包或通过您设置/运行的自动脚本(可以吗?)来恢复它们。
我不知道删除存储库的自动方法;我看到一些解决方案:
通过添加
将centos-release
从可升级包中排除
exclude=centos-release
到/etc/yum.conf
(以空格分隔的列表)中,但这可能会中断某些更新;
通过以下方式禁用它们:
# yum-config-manager --disable base,updates,extras,centosplus,epel,whatever
(可以轻松编写脚本并将其放在cron或您的ansible剧本中)
编写一个小脚本并将其放置在/etc/cron.hourly/
中,例如/etc/cron.hourly/wipe_repos
,其中包含:
#!/usr/bin/env bash
rm -f /etc/yum.repos.d/CentOS-Base.repo
或者更好:
#!/usr/bin/env bash
yum-config-manager --disable base,updates,extras,centosplus,epel,whatever
我建议使用解决方案2,因为回购文件不会被更新覆盖,但是新版本会与旧的.rpmnew
文件一起放置。
这由%config(noreplace)
的源rpm中的标志centos-release
来保证,该标志应用于/etc/yum.repos.d/
中的所有文件。
您可以通过下载.src.rpm并打开centos-release.spec
文件来进行检查。
$ mkdir test && cd test
$ yumdownloader --source centos-release
$ rpm2cpio centos-release*.rpm | cpio -idmv
$ cat centos-release.spec
(或search for the package online并下载src.rpm)
然后向下滚动到%files
部分,您会注意到:
%config(noreplace) /etc/yum.repos.d/*
%config(noreplace)
意味着所有这些文件都不会被更新中的新文件替换,但是新rpm中的文件将以扩展名.rpmnew
保存,因此您将:
$ ls /etc/yum.repos.d/
CentOS-Base.repo <-- here you set them as disabled
CentOS-Base.repo.rpmnew <-- this comes from the update, but yum will ignore it
有关参考,请参见http://people.ds.cam.ac.uk/jw35/docs/rpm_config.html或https://serverfault.com/a/48819/。
答案 1 :(得分:0)
正如我在问题下方的评论中已经说过的那样,为什么更新后这些存储库仍然出现的原因很简单:定义系统存储库的文件由软件包{{1}拥有},并且每当更新或重新安装此软件包时,存储库就会重新出现。
软件包centos-release
是一个非常基本的软件包,它提供了centos-release
和redhat-release
的功能,许多其他基本软件包也依赖于此。
system-release
没有简便的方法。
但是一种可行的解决方案可能是创建一个自定义的RPM软件包来替换[local ~]$ rpm -q --provides centos-release
centos-release = 7-6.1810.2.el7.centos
centos-release(upstream) = 7.6
centos-release(x86-64) = 7-6.1810.2.el7.centos
config(centos-release) = 7-6.1810.2.el7.centos
redhat-release = 7.6-1
system-release = 7.6-1
system-release(releasever) = 7
[local ~]$ rpm -q --whatrequires system-release
setup-2.8.71-10.el7.noarch
grubby-8.28-25.el7.x86_64
[local ~]$ rpm -q --whatrequires redhat-release
initscripts-9.49.46-1.el7.x86_64
systemd-219-62.el7_6.5.x86_64
。它应该包含指向您自己的存储库的指针,并且当然需要提供功能centos-release
和redhat-release
。
请注意,我不知道这是否真的有效,这只是我在思考问题时想到的事情。它可以节省您创建从CentOS派生的完整自定义发行版的工作,这是我可以想到的实现您想要的唯一方法。
答案 2 :(得分:0)
我的解决方案并没有完全解决您要求的问题(“我如何永远删除默认存储库配置文件?”),但它确实稳定了您的配置更改。如果您将文件归零而不是删除它们,那么系统更新将使您的“编辑过的”版本保持不变。
我确实觉得这是一个“黑客”,留下了命名的幽灵文件,但我可以忍受它。无需禁用或自定义 redhat-release 或 system-release。
我的问题与您的略有不同 - 我为不同情况的相同存储库维护了不同的配置,由文件名指示。更新时,原始文件会返回,给我留下冗余和不正确的定义。现在他们没有。