同步仓库 'updates' 缓存失败解决方案

Fedora 默认提供了两种软件源配置方式,分别是 metalinkbaseurl。前者一直是 Fedora 默认的配置方式,它提供了一个软件源列表,当你有需要的时候,dnf 就会从这个软件源列表里面选取一个速度快的软件源。然而,在很多时候,它所选取的软件源并不一定是最快的,于是就有了 baseurl 这种方式。它允许你指定一个软件源进行软件包的获取。

问题描述

在这些情况下:

  • 使用老版本的 Fedora,注释了 metalink 并启用了 baseurl,并试图通过 sudo dnf system-upgrade download --releasever=28 升级到 Fedora 28;
  • 升级到 Fedora 28 后用 /etc/yum.repos.d/fedora-updates.repo.rpmnew 覆盖 /etc/yum.repos.d/fedora-updates.repo,注释了 metalink 并启用了 baseurl,并试图使用 dnf makecache
  • 全新安装 Fedora 28,注释了 metalink 并启用了 baseurl,并试图使用 dnf makecache

你可能会得到这样一条类似于这样的消息:

1
错误:同步仓库 'updates' 缓存失败

原因

在排查网络连接问题后,检查 /etc/yum.repos.d/fedora-updates.repo。发现 baseurl 这行存在问题。在将 28 代入 $releaseverx86_64 代入 $basearch 后访问对应网址返回 404。

逐级目录往上翻查发现目录结构有所调整:

  • Fedora 引入了 Modular 软件源,传统的软件包升级源被整体移到了 Everything 目录;
  • 为了使更新源和发行源目录结构相对一致,部分目录作了调整,然而这个调整不并不完整。

说人话

Emmm… 自己看吧:

  • Fedora 27 下的正确配置方式:

    1
    baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
  • Fedora 28 下的正确配置方式:

    1
    baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/
  • Fedora 28 官方提供的默认配置文件:

    1
    baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/os/

解决方案

中科大软件源 为例,编辑 /etc/yum.repos.d/fedora-updates.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
baseurl=https://mirrors.ustc.edu.cn/fedora/updates/$releasever/Everything/$basearch/
#metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=1
repo_gpgcheck=0
type=rpm
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/debug/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&arch=$basearch
enabled=0
repo_gpgcheck=0
type=rpm
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates-source]
name=Fedora $releasever - Updates Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f$releasever&arch=$basearch
enabled=0
repo_gpgcheck=0
type=rpm
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False


追踪

0%