更新后不要重新创建存储库

时间:2019-03-09 15:05:45

标签: unix centos

我们管理系统,因此也管理存储库。我们删除/etc/yum.repos.d/<file>

中不使用的存储库

我们的问题是:在系统更新/升级后,CentOS会自动重新创建已删除的存储库,这对我们来说是个问题。

问题:是否有命令/方法来确保在CentOS 7系统上升级后不会重新创建存储库。

3 个答案:

答案 0 :(得分:1)

这些存储库是由某人创建的,操作系统不会重新创建它们。
可以通过更新centos-release之类的RPM软件包或通过您设置/运行的自动脚本(可以吗?)来恢复它们。

我不知道删除存储库的自动方法;我看到一些解决方案:

  1. 通过添加
    centos-release从可升级包中排除 exclude=centos-release
    /etc/yum.conf(以空格分隔的列表)中,但这可能会中断某些更新;

  2. 通过以下方式禁用它们:

    # yum-config-manager --disable base,updates,extras,centosplus,epel,whatever
    

    (可以轻松编写脚本并将其放在cron或您的ansible剧本中)

  3. 编写一个小脚本并将其放置在/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.htmlhttps://serverfault.com/a/48819/

答案 1 :(得分:0)

正如我在问题下方的评论中已经说过的那样,为什么更新后这些存储库仍然出现的原因很简单:定义系统存储库的文件由软件包{{1}拥有},并且每当更新或重新安装此软件包时,存储库就会重新出现。

软件包centos-release是一个非常基本的软件包,它提供了centos-releaseredhat-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-releaseredhat-release

请注意,我不知道这是否真的有效,这只是我在思考问题时想到的事情。它可以节省您创建从CentOS派生的完整自定义发行版的工作,这是我可以想到的实现您想要的唯一方法。

答案 2 :(得分:0)

我的解决方案并没有完全解决您要求的问题(“我如何永远删除默认存储库配置文件?”),但它确实稳定了您的配置更改。如果您将文件归零而不是删除它们,那么系统更新将使您的“编辑过的”版本保持不变。

我确实觉得这是一个“黑客”,留下了命名的幽灵文件,但我可以忍受它。无需禁用或自定义 redhat-release 或 system-release。

我的问题与您的略有不同 - 我为不同情况的相同存储库维护了不同的配置,由文件名指示。更新时,原始文件会返回,给我留下冗余和不正确的定义。现在他们没有。