CentOS通过虚拟机 - mirrorlist中没有URL

62

我正试图通过VirtualBox(6.1.30)(Vagrant)运行CentOS 8服务器。昨天,这对我来说运作得非常好,但今天我尝试运行sudo yum update时出现了以下错误。

[vagrant@192.168.38.4] ~  >> sudo yum update
CentOS Linux 8 - AppStream                       71  B/s |  38  B     00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

我已经尝试更改/etc/resolve.conf上的命名空间,删除DNF文件夹等。在其他电脑上,这个方法很有效,所以我认为问题出在我的主机上。我还尝试重置网络设置(我使用的是Windows 10),但也没有成功。这不是DNS问题,DNS可以正常工作。

在我重新安装Windows后,在我的VM中仍然存在相同的错误。

文件dnf.log

2022-01-31T15:28:03+0000 INFO --- logging initialized ---
2022-01-31T15:28:03+0000 DDEBUG timer: config: 2 ms
2022-01-31T15:28:03+0000 DEBUG Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, groups-manager, needs-restarting, playground, repoclosure, repodiff, repograph, repomanage, reposync
2022-01-31T15:28:03+0000 DEBUG YUM version: 4.4.2
2022-01-31T15:28:03+0000 DDEBUG Command: yum update
2022-01-31T15:28:03+0000 DDEBUG Installroot: /
2022-01-31T15:28:03+0000 DDEBUG Releasever: 8
2022-01-31T15:28:03+0000 DEBUG cachedir: /var/cache/dnf
2022-01-31T15:28:03+0000 DDEBUG Base command: update
2022-01-31T15:28:03+0000 DDEBUG Extra commands: ['update']
2022-01-31T15:28:03+0000 DEBUG User-Agent: constructed: 'libdnf (CentOS Linux 8; generic; Linux.x86_64)'
2022-01-31T15:28:05+0000 DDEBUG Cleaning up.
2022-01-31T15:28:05+0000 SUBDEBUG
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/dnf/repo.py", line 574, in load
    ret = self._repo.load()
  File "/usr/lib64/python3.6/site-packages/libdnf/repo.py", line 397, in load
    return _repo.Repo_load(self)
libdnf._error.Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/dnf/cli/main.py", line 67, in main
    return _main(base, args, cli_class, option_parser_class)
  File "/usr/lib/python3.6/site-packages/dnf/cli/main.py", line 106, in _main
    return cli_run(cli, base)
  File "/usr/lib/python3.6/site-packages/dnf/cli/main.py", line 122, in cli_run
    cli.run()
  File "/usr/lib/python3.6/site-packages/dnf/cli/cli.py", line 1050, in run
    self._process_demands()
  File "/usr/lib/python3.6/site-packages/dnf/cli/cli.py", line 740, in _process_demands
    load_available_repos=self.demands.available_repos)
  File "/usr/lib/python3.6/site-packages/dnf/base.py", line 394, in fill_sack
    self._add_repo_to_sack(r)
  File "/usr/lib/python3.6/site-packages/dnf/base.py", line 137, in _add_repo_to_sack
    repo.load()
  File "/usr/lib/python3.6/site-packages/dnf/repo.py", line 581, in load
    raise dnf.exceptions.RepoError(str(e))
dnf.exceptions.RepoError: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
2022-01-31T15:28:05+0000 CRITICAL Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

这里的答案直接编辑了仓库文件,你应该能够简单地使用 dnf 来更新镜像列表 - Hashbrown
4
考虑到这个问题在 Stack Overflow 上被认为是离题的,这有点令人沮丧。 - Jayan
1
截至2022年3月26日,这个问题在所有Stack Overflow问题中,以浏览率计算,在两年内(700天)发布的问题中排名前十。 - Peter Mortensen
这个回答是否解决了你的问题? - stackprotector
2个回答

134

看看这篇文章:CentOS Linux EOL

以下命令对我有帮助:

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

这样做将使DNF工作,但您将不再收到任何更新。

升级到CentOS 8流:

sudo dnf install centos-release-stream -y
sudo dnf swap centos-{linux,stream}-repos -y
sudo dnf distro-sync -y

如果您的内核已更新,可以选择重新启动(容器中不需要)。


8
这里是一个更好的方法来保持文件整洁("mirrorlist"出现在其他地方): sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-Linux-*注意:此命令用于 CentOS Linux 系统中的 yum 软件包管理器。 - Pavel Tankov
1
在某些情况下,您可能也想更改$contentdir。例如,对于我们来说,我们使用旧版的ansible,我不得不解决$contentdir的问题。对于任何需要它的人(结合上面的命令): sudo sed -i -e“s | mirrorlist = |#mirrorlist = | g” -e“s |#baseurl = http://mirror.centos.org | baseurl = http://vault.centos.org | g” -e“s | \ $ contentdir | centos | g” / etc / yum.repos.d / CentOS-Linux- * - MrVentzi
7
将CentOS Linux 8转换为CentOS Stream 8是“官方”过程(参见https://centos.org/centos-stream/#centos-stream-8):`yum --disablerepo '*' --enablerepo extras swap centos-linux-repos centos-stream-repos,然后执行yum clean allyum makecache,最后执行yum distro-sync(在最后一步中可能需要使用--allowerasing`参数)。 - scrutari
由于某些原因,我使用http无法正常工作,但只有https可以(也许yum不遵循重定向?) - Ezra Steinmetz

15

CentOS 8在2021年底已经到达了终止支持(EOL)的阶段。一个长期的解决方案是迁移到其他操作系统,例如Rocky Linux


1
...或者CentOS Stream 8或CentOS 9。 - scrutari
5
你指的是CentOS Stream 9,没有CentOS 9。很多人对在生产服务器上使用滚动更新持怀疑态度... - Markus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接