现象:
CentOS Linux 8 - AppStream 0.0 B/s | 0 B 00:00
Errors during downloading metadata for repository 'appstream':
- Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock [Could not resolve host: mirrorlist.centos.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock [Could not resolve host: mirrorlist.centos.org]
原因:CentOSLinux 8已于 2021年12月31日停止更新和维护,由于CentOS 团队从官方镜像中移除CentOS 8的所有包,所以在使用yum源安装或更新会报上述失败错误。
1. 进入 YUM 仓库的配置目录:
cd /etc/yum.repos.d/
解释:
-
cd
命令用于更改当前工作目录。在这里,切换到/etc/yum.repos.d/
目录下,这是 CentOS 系统中 YUM 仓库配置文件的存放位置。每个.repo
文件都是一个 YUM 源配置文件,系统通过这些文件知道从哪里获取软件包。用途:通过访问该目录,用户可以修改 YUM 源的配置文件,比如更换镜像地址、启用或禁用仓库等。
2. 修改镜像源的配置:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
解释:
-
sed
是一个流编辑器,可以用于对文本进行搜索、替换、插入、删除等操作。 -
-i
选项表示直接编辑文件并保存修改结果("in-place")。 -
s/mirrorlist/#mirrorlist/g
是替换命令:它会查找文件中所有的mirrorlist
字段,将其替换为#mirrorlist
,从而注释掉这些行(注释行的作用是让 YUM 忽略该行的配置)。 -
/etc/yum.repos.d/CentOS-*
表示修改以CentOS-
开头的所有 YUM 源配置文件。用途:通常,
mirrorlist
是一个可以动态选择最佳镜像的 URL 连接。将其注释掉后,YUM 将不再使用镜像列表,而是使用静态的baseurl
作为下载源。
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
解释:
-
这条命令同样使用
sed
来进行文本替换。 -
s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g
:它会将原本被注释掉的baseurl
(#baseurl
),改为新的 CentOS 历史版本库vault.centos.org
,并取消注释(移除#
)。 -
mirror.centos.org
是 CentOS 官方的镜像站点,而vault.centos.org
是 CentOS 归档库,专门存放不再维护的旧版本。用途:在某些情况下,官方的
mirror.centos.org
镜像站点不再提供旧版本的包或链接不可用,所以需要使用vault.centos.org
来获取老版本的包。
3. 清理缓存并重新生成缓存:
yum clean all && yum makecache
解释:
-
yum clean all
:清除 YUM 的缓存文件,包括软件包缓存和元数据缓存。这个命令可以确保在重新下载包或元数据时不会使用过时的缓存数据。 -
yum makecache
:重新生成 YUM 的包索引缓存。这个操作会从配置的镜像源下载最新的包信息,方便后续的包安装或更新。用途:在修改 YUM 源配置后,执行
yum clean all
和yum makecache
可以确保系统使用最新的仓库元数据,从新的源中获取可用的软件包。
总结:
这些步骤的总体目的就是修改 CentOS 的 YUM 仓库配置,将镜像源切换为 vault.centos.org
,这是 CentOS 的历史版本库。当系统无法从默认镜像源获取软件包时,使用 vault.centos.org
是一种解决方案。