首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新后不要重新创建存储库。

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

Stack Overflow用户
提问于 2019-03-09 15:05:45
回答 3查看 1.7K关注 0票数 1

我们管理系统,从而管理存储库。我们删除不在/etc/yum.repos.d/<file>中使用的存储库

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-18 12:07:19

这些存储库是由某个人创建的,操作系统不会重新创建它们。

它们要么是通过更新RPM包(如centos-release )来恢复的,要么是通过安装/运行的自动脚本(ansible?)来恢复的。

我不知道有一种自动删除回购的方法;我看到了几种解决方案:

  1. 从可升级包中排除centos-release,方法是添加 exclude=centos-release/etc/yum.conf (空格分隔列表),但这可能会中断一些更新;
  2. 禁用它们:yum-config-manager-禁用基本功能、更新、附加程序、centosplus、epel等等(这可以很容易地编写脚本并放入一个cron或您的ansible剧本中)。
  3. 编写一个小脚本并将其放入/etc/cron.hourly/中,例如/etc/cron.hourly/wipe_repos,包含: #!/usr/bin/env -f /etc/yum.pos.d/CentOSBase.repo 或者,更好的: #!/usr/bin/env bash yum-config-manager -禁用基础、更新、附加、centosplus、epel等

我建议使用解决方案2,因为回购文件不会被更新覆盖,但是新版本放在.rpmnew文件中的旧版本中。

这由centos-release源rpm中的标志centos-release保证,该标志应用于/etc/yum.repos.d/中的所有文件。您可以通过下载.src.rpm并打开centos-release.spec文件来检查这一点。

代码语言:javascript
运行
复制
$ mkdir test && cd test
$ yumdownloader --source centos-release
$ rpm2cpio centos-release*.rpm | cpio -idmv
$ cat centos-release.spec

(或在线搜索包裹并下载src.rpm)

然后向下滚动到%files部分,您会注意到:

代码语言:javascript
运行
复制
%config(noreplace) /etc/yum.repos.d/*

%config(noreplace)意味着所有这些文件都不会被更新后的新文件替换,但是来自新rpm的文件将被保存为扩展名.rpmnew,因此您将拥有:

代码语言:javascript
运行
复制
$ 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

有关参考,请参见config.htmlhttps://serverfault.com/a/48819/

票数 1
EN

Stack Overflow用户

发布于 2019-03-18 12:05:43

正如我在下面的问题注释中已经说过的,更新后这些存储库不断出现的原因非常简单:定义系统存储库的文件属于包centos-release,而且每当这个包被更新或重新安装时,存储库就会重新出现。

centos-release是一个非常基本的包,它提供了redhat-releasesystem-release的功能,许多其他的基本包依赖于它。

代码语言:javascript
运行
复制
[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

要想摆脱这种局面,没有容易的办法。

但是,一个可能的解决方案可能是创建一个自定义的RPM包来取代centos-release。它应该包含指向您自己的存储库的指针,当然还需要提供功能redhat-releasesystem-release

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

票数 0
EN

Stack Overflow用户

发布于 2021-04-28 00:37:59

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

我确实觉得这是一个‘黑客’,留下了命名的鬼文件,但这是一个我可以接受的。不需要禁用或自定义红帽释放或系统释放。

我的问题与你的略有不同--我对不同情况下相同的存储库保持了不同的信任,文件名表示了这一点。在更新时,原始文件将返回,给我留下了冗余和不正确的定义。现在他们不知道了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55078670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档