Fedora 默认提供了两种软件源配置方式,分别是 metalink
和 baseurl
。前者一直是 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
。
你可能会得到这样一条类似于这样的消息:
错误:同步仓库 'updates' 缓存失败
原因
在排查网络连接问题后,检查 /etc/yum.repos.d/fedora-updates.repo
。发现 baseurl
这行存在问题。在将 28
代入 $releasever
,x86_64
代入 $basearch
后访问对应网址返回 404。
逐级目录往上翻查发现目录结构有所调整:
- Fedora 引入了 Modular 软件源,传统的软件包升级源被整体移到了 Everything 目录;
- 为了使更新源和发行源目录结构相对一致,部分目录作了调整,然而这个调整不并不完整。
说人话
Emmm… 自己看吧:
- Fedora 27 下的正确配置方式:
baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
- Fedora 28 下的正确配置方式:
baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/
- Fedora 28 官方提供的默认配置文件:
baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/os/
解决方案
以 中科大软件源 为例,编辑 /etc/yum.repos.d/fedora-updates.repo
:
[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