CentOS 8 yum 安装错误:无法下载 appstream 仓库元数据
在使用 CentOS 8 系统时,你可能会遇到以下错误信息:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
这个问题通常出现在尝试使用 yum
或 dnf
安装软件包时,特别是在 Docker 容器或 AWS EC2 实例中。
问题原因
重要说明
CentOS 8 已于 2021 年 12 月 31 日停止维护(EOL),官方镜像仓库已经迁移。原来的镜像链接不再可用,导致 yum
无法找到可用的镜像源。
当你看到这个错误时,意味着系统无法从标准的 CentOS 镜像服务器获取软件包信息,需要调整仓库配置以使用存档镜像或迁移到 CentOS Stream。
解决方案
方法一:修改仓库配置指向存档镜像(推荐快速修复)
这是最常见的解决方法,适用于需要快速恢复软件包安装功能的情况:
# 进入 yum 仓库配置目录
cd /etc/yum.repos.d/
# 注释掉所有 mirrorlist 配置行
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# 启用 baseurl 并指向存档镜像服务器
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 更新系统(可选)
yum update -y
Dockerfile 中的用法
如果你在 Dockerfile 中遇到此问题,可以这样处理:
FROM centos:8
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum -y install java
CMD /bin/bash
方法二:迁移到 CentOS Stream(官方推荐)
CentOS 官方推荐将 CentOS Linux 8 迁移到 CentOS Stream 8:
# 安装必要的 GPG 密钥(如果尚未安装)
wget 'http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-3.el8.noarch.rpm'
rpm -i 'centos-gpg-keys-8-3.el8.noarch.rpm'
# 迁移到 CentOS Stream
dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos
# 同步系统软件包
dnf distro-sync
CentOS Stream 说明
CentOS Stream 是一个滚动发布的发行版,位于 RHEL 上游。迁移到 CentOS Stream 可以获得持续更新和支持。
方法三:手动编辑仓库文件
如果需要更精细的控制,可以手动编辑仓库配置文件:
进入配置目录:
bashcd /etc/yum.repos.d/
编辑相关的
.repo
文件(如CentOS-Linux-BaseOS.repo
):bashvi CentOS-Linux-BaseOS.repo
注释掉
mirrorlist
行:ini#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS
取消注释并修改
baseurl
:inibaseurl=http://vault.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
对其他仓库文件重复相同操作。
总结
CentOS 8 停止维护后,原有的镜像源不再可用,导致出现 "No URLs in mirrorlist" 错误。你可以:
- 临时解决方案:修改仓库配置指向
vault.centos.org
存档镜像 - 长期解决方案:迁移到 CentOS Stream 8 获取持续更新
- 手动配置:根据需要精细调整各个仓库配置
注意事项
- 修改镜像源后,建议运行
yum makecache
刷新缓存 - 在生产环境中,考虑迁移到仍在维护的发行版,如 CentOS Stream、AlmaLinux 或 Rocky Linux
- Docker 用户应考虑使用更新的基础镜像,避免依赖已停止维护的系统版本
根据你的具体需求选择最适合的解决方案,确保系统的稳定性和安全性。