一、背景介绍

2024 年 7 月 1 日,在编译基于 CentOS 7.6.1810 镜像的 Dockerfile 过程中,执行 yum install 指令时,遇到了错误:Could not resolve host: mirrorlist.centos.org; Unknown error

特别指出: 编译 Dockerfile 并执行其中的 yum install 指令时,所使用的是正在编译的镜像中的 yum 仓库,非编译机上的。

二、原因分析

2024 年 7 月 1 日 官方停止维护 CentOS 7。该系统内置的 yum.repo 所使用的域名 mirrorlist.centos.org 已不再提供 A 记录。如下所示:

root@93b1bbdc2e60:/home/# dig mirrorlist.centos.org +trace

; <<>> DiG 9.16.1-Ubuntu <<>> mirrorlist.centos.org +trace
;; global options: +cmd
. 0 IN NS c.root-servers.net.
. 0 IN NS i.root-servers.net. ## 省略:根和顶级域名服务器的相关解析 centos.org. 3600 IN NS ns1.centos.org.
centos.org. 3600 IN NS ns2.centos.org.
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A GDTREA8KMJ2RNEQEN4M2OGJ26KFSUKJ7 NS SOA RRSIG DNSKEY NSEC3PARAM
qeunu2n7u9cespp9113b9aougs8bsje9.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A QEUO6270NIE81LB4QN59HMMDKF8L01MV NS DS RRSIG
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN RRSIG NSEC3 8 2 3600 20240730022208 20240709012208 36783 org. SJRvhqxd780LYLBKJvh+HK1XHVN4Jm3FReq030r3Aewe0Sus1xpbl7L9 xOJOudja1lZoBdgfVXFBQT4Ev9M6XSG6c9qYJvDT9Q9U8PQyG+KDGGTy zTNgK1QFgFM7Sq1DPiqeUc5Jc/mmD7H26TV2qrCem4Fz8/TYYlK9CirT VKU=
qeunu2n7u9cespp9113b9aougs8bsje9.org. 3600 IN RRSIG NSEC3 8 2 3600 20240722152150 20240701142150 36783 org. wq21TFtc5dCtXghEDYN+dJLnZUiJzzcoVLIWQ2aA5FCIV/pHKfUPg7Mn jXjOGMK5Xx8lu7gBjdKvu7yQaVrlEJXC0wo8QqzlrB/yL6EcBhypBfNk b+vH7RCfrfOsIqwMKCv82wF91/S4/3uVijxeD2F+nEjvPLJheRQcxQR1 r/g=
;; Received 619 bytes from 199.249.120.1#53(b2.org.afilias-nst.org) in 179 ms centos.org. 3600 IN SOA ns1.centos.org. hostmaster.centos.org. 2024070401 28800 7200 2400000 3600
;; Received 129 bytes from 38.145.60.38#53(ns2.centos.org) in 269 ms

dig 命令详解,可参阅我的文章:DNS 简介及 dig 命令详解

三、解决方案

1. 最佳方案 - 更新及启用 CentOS-Vault.repo 存档仓库

(1)背景介绍

CentOS-Vault.repo 是 CentOS 发行版中自带的一个 YUM 软件仓库。它定义了一系列旧版本的软件包和更新,这些软件包和更新不再由 CentOS 项目的主要仓库维护。当 CentOS 发布新的版本(例如,从 CentOS 7.4 升级到 CentOS 7.5)时,旧版本的软件包通常会被移动到 Vault 仓库中。vault.centos.org 是 CentOS-Vault.repo 关联的仓库站点,主要功能包括:

  1. 保存旧版本的 CentOS 系统包:当 CentOS 发布新的主版本或更新时,旧版本的 ISO 映像文件、软件包和源代码会被移动到这个存档站点。

  2. 保存历史软件包:用户可以浏览和下载旧版本 CentOS 中的软件包,这对于运行旧软件或维护遗留系统可能非常有用。

因此,启用 CentOS-Vault.repo 并将仓库站点配置为 vault.centos.org 是 CentOS 内置的处理预案及最佳方案。

(2)配置操作

在 CentOS-Vault.repo 添加如下配置,以启用 CentOS 7 的存档仓库,添加配置如下:

# 文件路径 /etc/yum.repos.d/CentOS-Vault.repo
# Vault
[Vault-base]
name=Vault - CentOS-$releasever - Base
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever [Vault-updates]
name=Vault - CentOS-$releasever - Updates
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever [Vault-extras]
name=Vault - CentOS-$releasever - Extras
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

使用 enabled=0 禁用 CentOS-Base.repo 中的所有仓库,修改后配置如下:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 下同

特别说明: CentOS 7 各子版本中,$releasever 值都为 7。具体原因请看:releaseve 变量详解

清除 YUM 缓存,如有需要可再生成新的缓存

yum clean all ; yum makecache

(3)验证方法

首先,使用 yum repolist 验证可用仓库,结果如下:

[root@93b1bbdc2e60 /]# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
repo id repo name status
!Vault-base/7/x86_64 Vault - CentOS-7 - Base 10,072
!Vault-extras/7/x86_64 Vault - CentOS-7 - Extras 526
!Vault-updates/7/x86_64 Vault - CentOS-7 - Updates 6,173
repolist: 16,771

验证结果说明:

(1)repolist: 16,771 表示当前所有已启用的仓库中,总共有 16,771 个可用的软件包,各仓库的 status 表示其仓库可用包的数量。

(2)repo id 添加 !前缀表示该仓库的元数据已经被成功下载并缓存到本地(执行了yum makecache)。这个标记意味着 YUM 已经有了这个仓库的所有必要信息,可以进行包的安装、更新和依赖性解析等操作。

其次,要求安装包正常,如执行 yum install lrzsz -y 正常。

2. 临时方案一 - 更新 CentOS 仓库配置

(1)配置操作

启用 *.repo 中的 baseurl,注释 mirrorlist,将 baseurl 仓库地址替换为 vault.centos.org 存档站点。具体操作如下:

sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo
sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo

清除 YUM 缓存,如有需要可再生成新的缓存

yum clean all ; yum makecache

(2)验证方法

最佳方案-更新及启用 CentOS-Vault.repo 存档仓库 ->(3) 验证方法 。

3. 临时方案二 - 基础仓库替换为阿里云仓库

将 CentOS 7 基础仓库修改为阿里云仓库,具体操作如下:

(1)首先,备份 CentOS 7 基础仓库配置文件

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

(2)然后,下载阿里云仓库配置文件,并替换系统内置基础仓库(CentOS-Base.repo)配置文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-7.repo

(3)清除 YUM 缓存,如有需要可再生成新的缓存

yum clean all ; yum makecache

(4)验证方法

最佳方案-更新及启用 CentOS-Vault.repo 存档仓库 ->(3) 验证方法 。

四、背景知识

1. 简介 CentOS 7 内置的各类仓库

CentOS-Base.repo:这是 CentOS 的基础仓库,包含了大部分用户安装软件时需要的包。

CentOS-CR.repo:CR 仓库包含了新的 CentOS 点版本发布后,下一个版本在发布前的一些新的更新和改进。

CentOS-Debuginfo.repo:这个仓库包含了用于调试的包,一般用户不会使用到。

CentOS-fasttrack.repo:FastTrack 仓库包含了一些新的,可能不完全稳定的包。这些包是为了提供一些新功能而提前发布的。

CentOS-Media.repo:这个仓库是用于从 CD 或者 DVD 安装包的。

CentOS-Sources.repo:这个仓库包含了一些软件的源码包。

CentOS-Vault.repo:Vault 仓库包含了旧的,不再被维护的版本的包。

默认情况下,仅启用 CentOS-Base.repo 中的 base、updates 和 extras 仓库,可以通过 yum repolist 查看

2. *.repo 文件中各变量说明

在 repo 文件中,$releasever$basearch$infra 是预定义的变量,在解析 repo 文件时被替换为具体的值。

(1)$releasever:代表你的系统版本。

[root@774ea9a9b006 yum.repos.d]# rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)
7

(2)$basearch:代表你的系统架构。

[root@774ea9a9b006 yum.repos.d]# arch
x86_64
# 或
[root@774ea9a9b006 yum.repos.d]# uname -i
x86_64

(3)$infra:代表你的系统基础架构,如虚拟机或物理机。这个变量通常在 /etc/yum/vars/infra 文件中定义,但并非所有系统都有这个文件。你可以通过查看这个文件获取,如果文件不存在,那么 $infra 可能会被替换为默认值或空字符串。

[root@774ea9a9b006 yum.repos.d]# cat /etc/yum/vars/infra
container

3. $releaseve 变量详解

$releasever 是 CentOS 中的一个变量,它的值来自 /etc/yum.conf 文件中的 distroverpkg 参数。默认情况下,distroverpkg 的值是 centos-release,这是一个包含有关 CentOS 发行版的信息的包。

当你运行 yum 命令时,yum 会查找 distroverpkg 包并从中提取发行版号。在 CentOS 7 中,centos-release 包的版本号是 7.x.y,但 yum 只提取主版本号,也就是 7,因此 $releasever 的值是 7

这是因为 CentOS 的软件源是按主版本号组织的,所有 7.x.y 的版本都使用相同的软件源,所以 $releasever 只需要主版本号。

4. *.repo 配置文件中的参数 mirrorlist 与 baseurl 的区别

在 CentOS 的 YUM 仓库配置文件中,mirrorlistbaseurl 是两个常见的参数,它们用于指定软件包仓库的位置。以下是它们的区别:

(1)mirrorlist

定义mirrorlist 参数指定了一个 URL,该 URL 返回一个包含多个仓库站点的列表。

用途:YUM 客户端会从这个列表中选择一个可用、合适的仓库站点进行连接和下载软件包。

优点:提供了更高的可用性、高速度和负载均衡的仓库站点,如果一个仓库站点不可用,YUM 可以自动切换到另一个仓库站点。

示例

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

(2)baseurl

定义baseurl 参数直接指定了一个单一的仓库站点。

用途:YUM 客户端会直接连接到这个指定的 URL 进行软件包的下载。

优点:配置简单,适用于有特定需求的场景,比如内部私有仓库。

示例

baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

(3)总结

mirrorlist 提供了一个镜像列表,YUM 会自动选择一个可用的仓库站点进行包的下载,适用于希望自动负载均衡、高性能和高可用性的场景。

baseurl 直接指定了一个固定的仓库站点,适用于需要特定仓库的场景。

五、引文

(1)mirrorlist.centos.org no longer resolve?

如何解决 CentOS 7 官方 yum 仓库无法使用的问题的更多相关文章

  1. [转]如何从MySQL官方Yum仓库安装MySQL5.6

    参考博文: 如何从MySQL官方Yum仓库安装MySQL5.6 Centos 升级Mysql版本或者Yum安装Mysql5.6 2013年10月,MySQL开发团队正式宣布支持Yum仓库,这就意味着我 ...

  2. 如何从MYSQL官方YUM仓库安装MYSQL5.x 原理一样只要获取对的仓库依赖安装对的仓库依赖就ok了,我就是用这种安装的5.7

    如何从MYSQL官方YUM仓库安装MYSQL5.6 2013年10月,MySQL开发团队正式宣布支持Yum仓库,这就意味着我们现在可以从这个Yum库中获得最新和最优版的MySQL安装包.本文将在一台全 ...

  3. 如何从MySQL官方Yum仓库安装MySQL5.6

    (一),2013年10月,MySQL开发团队正式宣布支持Yum仓库,这就意味着我们现在可以从这个Yum库中获得最新和最优版的MySQL安装包.本文将在一台全新安装的CentOS6上安装MySQL5.6 ...

  4. centos创建本地yum仓库

    怎样发布自己软件的安装和更新YUM源 在创建之前,我们先了解些相关的内容: yum仓库可以支持三种途径提供给yum在安装的时候下载rpm包 第一种:  ftp服务  ftp:// 第二种:  http ...

  5. centos 5的yum源无法使用的解决方法( 转载)

    由于centos 5 已经停更.于是导致yum源也不能用了. 例如安装screen的时候提示 Determining fastest mirrors* base: denver.gaminghost. ...

  6. 解决centos yum安装"No package nginx available."问题

    问题原因: nginx位于第三方的yum源里面,而不在centos官方yum源里面 解决方法: 安装epel(Extra Packages for Enterprise Linux) a.去epel网 ...

  7. CentOS 5 yum源无法使用

    在新装的CentOS 5.7系统中,由于CentOS 5.7版本比较旧,yum源无法使用. 尝试多种方法,最终从http://blog.csdn.net/zhuix7788/article/detai ...

  8. CentOS 6.5本地yum源、局域网离线yum仓库(断网情况下轻松安装各种依赖包)

    在工作中, 公司的服务器大部分都禁止连接外网的,初始化系统,测试某些产品时,往往缺一些软件或依赖包,一个个上传到机器,如此浪费时间,浪费金钱,en...yum能够自动查找并解决rpm包之间的依赖关系, ...

  9. Linux centos yum仓库 自制

    内网下Yum仓库搭建配置 1.实验环境 虚拟机环境: VMware 12 版本虚拟机 网络环境: 内网 IP 段:172.16.1.0 外网 iP 段(模拟):10.0.0.0 实验基础:(能够上网, ...

  10. RedHat使用Centos的yum仓库

    RedHat使用Centos的yum仓库 卸载红帽yum源 [root@zhouwanchun ~]# rpm -qa | grep yum [root@zhouwanchun ~]# rpm -e ...

随机推荐

  1. MySQL查看实时执行的SQL语句

    MySQL默认不能实时查看执行的SQL语句,因为这会消耗一定的资源. 要开启这个功能,稍微配置一下,打开这个LOG记录就可以了. 1 查看LOG功能 首先,查看是否已经开启实时SQL语句记录. mys ...

  2. 继承,super,重写,多态,抽象,接口

    继承,super,重写,多态,抽象,接口 继承 extends 用于表示两个类之间的继承关系,继承是OOP的四大特性之一,他允许一个类(称之为子类或派送类) 继承另一个类(称之为父类或基类)的变量和方 ...

  3. 7.16考试总结(NOIP模拟17)[世界线·时间机器·weight]

    车如流水马如龙,花月正春风 前言 其实,一开始 T1 是看错了题的,我以为是无向图来着,就想直接搞到每一个联通块的完全图,然后减去总边数就好了. 发现错误之后,码了个暴力,想得 40pts 来着,没想 ...

  4. 开源一站式敏捷测试管理平台 itest(爱测试) 6.6.1 发布,安全升级及新增强

    (一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行 ...

  5. MySQL创建表的时候建立联合索引的方法

    1.MySQL创建表建立联合索引的步骤 在MySQL中,联合索引(也称为复合索引或多列索引)是基于表中的多个列创建的索引.这种索引可以提高多列查询的性能,特别是当查询条件涉及这些列时.下面是一个详细的 ...

  6. 程序员面试金典-面试题 01.03. URL化

    题目: URL化.编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度.(注:用Java实现的话,请使用字符数组实 ...

  7. win10无线网卡不会自动连接

    usb接口的网卡.win10无线网卡不会自动连接. 解决方法: 第一步:在控制面板\网络和 Internet\网络连接中,禁用再启用一次无线网络. 第二步:在 控制面板\硬件和声音\电源选项\选择电源 ...

  8. VictoriaLogs 要凭什么革了各家日志存储的命

    如果大家对时序指标的存储方案有些了解,那大概率会听过 VictoriaMetrics,VictoriaMetrics 号称 Prometheus 的升级版,在性能和成本方面也确实做得很好,如果是夜莺新 ...

  9. AWS Ubuntu22.04安装Mysql及配置远程连接、SCP上传文件

    一.升级apt资源包 sudo apt update 二.安装MySQL sudo apt install mysql-server 三.启动MySQL服务 sudo service mysql st ...

  10. 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除

    警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除 import org.apache.commons.codec.binary.Base64; public class ...