我有许多 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 输出格式。此外,如果更新需要从不同的存储库安装另一个包,并且有一个损坏的存储库,那么它无论如何都会失败 — 但我想这种情况并不常见。