如何让 yum 容忍损坏的 repo URL

如何让 yum 容忍损坏的 repo URL

我有许多 CentOS 实例,其中一些已被开发人员使用,并启用了第三方存储库(有时是他们自己的存储库)。但是从管理的角度来看,能够强制通过脚本中的更新而无需弄乱本地 yum.conf,或解析输出或 yum.repos.d 以查看哪个是有问题的损坏存储库,这很方便。

看起来开发人员已经注意到了这个选项;

-t, --tolerant

但显然这比他们预想的更具挑战性,因为在手册页中;

              This option currently does nothing.

显然,当我手动执行此操作时,我可以使用以下方法解决问题;

yum --disablerepo=broken-repo  deplist mypackage

为了使脚本更新更加健壮,我可以使用(至少肯定会安装发行版更新)

yum -y --disablerepo=* --enablerepo=updates update

但这并没有捕捉到存在 EPEL、rpmforge、rbel 或某些软件包分发商的情况,我必须首先解析 yum.repos.d 文件。

答案1

这个脚本可以起到一定帮助作用:

LC_ALL=C yum repolist 2>/dev/null \
| awk '/^repo id/ {A=1; next} /^[a-zA-Z0-9_-]+ / {if(A) print $1}' \
| xargs -i yum -y --disablerepo=* --enablerepo={} update
# Some packages may need packages from other repository
yum -y update

它的工作原理是使用 获取存储库列表yum repolist,使用从输出中选择存储库名称awk,然后尝试一次更新所有存储库。

它不是 100% 可靠的,因为它依赖于不变的 yum 输出格式。此外,如果更新需要从不同的存储库安装另一个包,并且有一个损坏的存储库,那么它无论如何都会失败 — 但我想这种情况并不常见。

相关内容