马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、报错现场长什么样
在 CentOS 7 上执行 yum 相关操作时,控制台会甩出一段很长的信息,核心只有一句:
One of the configured repositories failed (未知), and yum doesn't have enough cached data to continue.
后面通常还会跟着 yum 自己给出的四条"补救建议":联系上游修复、重新配置 baseurl 指向可用地址、把这个仓库禁用掉,或者给它加上 skip_if_unavailable=true。很多人看到这段就懵了,其实翻译过来就是一句话:某个仓库访问不通,而本地缓存里又没有足够的包数据,yum 不敢继续,只能失败。
真正的根因是:CentOS 官方已经停止维护,官方源里旧版本(尤其是 7)的 many 目录被清理掉了,系统原来指向官方的地址自然就打不开。
二、第一条思路:换一个还在维护的 base 源
最省事的做法是把 CentOS-Base.repo 换成国内还在维护的镜像。操作前先备份,别直接覆盖:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
然后下载新版 base 源:以 CentOS 7 为例:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
如果你的系统是 6 或 5,把后缀换成对应的 Centos-6.repo、Centos-5.repo。执行完再跑 yum 命令,一般就正常了。
三、wget 不存在怎么办
精简安装的系统里可能连 wget 都没有,这时候会报 command not found。两种解法:
- 装一个:
yum install -y wget;
- 或者干脆不下载,手工把
CentOS-Base.repo 的内容整段替换掉(下面第四节给完整模板)。
这里有个实操经验:用 echo/cat 追加的方式写 repo 文件经常不生效,一是转义问题,二是 easy 容易写错路径。最稳的办法是先进 vi,把下面这段整段粘贴进去,再 :wq 保存。
四、手工替换:一份可用的 CentOS-Base.repo 模板
# CentOS-Base.repo
[base]
name=CentOS-$releasever-Base-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# released updates
[updates]
name=CentOS-$releasever-Updates-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# additional packages that may be useful
[extras]
name=CentOS-$releasever-Extras-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
上面只是 base、updates、extras 三个最常用的段。centosplus、contrib 这类段一般 enabled=0 关着就可以,不写进模板反而少几个可能失败的源。
五、收尾:清缓存并重建元数据
换源之后必须做这一步,否则 yum 还在用旧索引:
yum clean all
yum makecache
yum clean all 清掉旧的缓存数据,yum makecache 重新把各仓库的包列表拉到本地。跑完这两条再执行任意 yum 命令,速度也会明显变快。
六、如果换完源还是报错
那基本是 repo 目录里还残留着别的文件在抢。先列一遍都装了哪些源:
ls -l /etc/yum.repos.d
常见的还有 CentOS7-Base-163.repo、CentOS-Debuginfo.repo、CentOS-Sources.repo、CentOS-Vault.repo、CentOS-CR.repo 等,其中 Debuginfo 和 Sources 默认大多关着,真正会挡路的是那些仍指向官方或已经下线的第三方源。确认没用之后直接删掉:
rm -rf /etc/yum.repos.d/CentOS7-Base-163.repo
删完再 yum clean all + yum makecache 重来一遍。
七、判断到底是哪一条在失败
与其猜,不如让 yum 自己把索引打出来看:
yum repolist -v
yum repolist all | grep -i disabled
repolist -v 会列出每个仓库状态、启用没启用、baseurl 是什么。看到哪一条状态异常,直接定位到那个文件改。yum --debuglevel=1 ... 还能把请求过程打出来,网络不通的报错会更直白。
八、小结
这套报错的成因很单一:老系统的官方源已下线。处理流程就是——备份旧 repo → 换成国内镜像(或手贴模板)→ yum clean all + yum makecache → 还不行就清掉目录里其他失效源,再用 yum repolist -v 精确定位。真正要养成的习惯是换源前先备份、换完必清缓存,这两步省一次就能少排半小时的错。
qidao123.com企服评测-应用市场 编辑提示 |