Fedora 版本升级方法及注意事项

Table of Contents

1. 一些经验

  1. 尽量在网速较快的情况下做升级操作;
  2. 把系统语言先修改成英文的(可更改系统语言配置文件:/etc/locale.conf),以防出现因中文编码问题打断升级过程;
  3. 系统升级过程中不要中断,被中断可能会出现包冲突的情况,详细请见后面“处理包冲突”一节。
  4. 出现问题多看系统日志。

2. 过程

1、 先更新当前系统软件包到最新:

sudo dnf upgrade --refresh

2、下载新版本所需的软件包,–releasever 参数指定需要升级至的版本:

sudo dnf system-upgrade download --releasever=24

如果是第一次升级系统大版本,可能需要为 DNF 单独安装 system-upgrade 组件才能运行上面的命令:

sudo dnf install dnf-plugin-system-upgrade

3、重启,并进入系统升级阶段:

sudo dnf system-upgrade reboot

3. 常见问题处理

3.1. 包冲突

在重启后进入升级阶段时,谨记不要轻易中断升级过程,因为系统是先安装新版本软件,再去清理老版本软件,在清理老版本软件之前打断升级过程就会出现包冲突。比如当前系统是 Fedora 23,要升级到 Fedora 24,在更新 Fedora 24 软件包阶段时被中断,一些软件就会同时存在 Fedora23、24 两个版本的包,这种情况叫作包冲突。如果系统关键组件(比如 Grub、Systemd 等)出现包冲突,系统是无法正常启动的。

发生包冲突后再去重新升级系统,会提示“file [冲突的包] from install of [冲突的包] conflicts with file from package”错误。这种情况可用命令:

rpm -q [冲突的包]

去查看包是否冲突,如:

rpm -q grub2

如果一个包返回了两个已安装的版本,说明发生了冲突。可用命令:

sudo package-cleanup --dupes

扫描系统中所有存在包冲突的软件。

一些网友给的方法是通过以下命令删除老版本的包:

rpm -e [包名] --nodeps # 不删除依赖的情况下删除某个包

但往往出现冲突的包不止一个,手动处理比较繁琐,系统升级中遇到包冲突可直接用 DNF 将所有包升级到最新版本来解决:

sudo dnf --releaserver=24 distro-sync

3.2. 证书问题

升级时,Fedora 会对官方源的包进行签名认证,当出现以下类似错误时,表明本地没有公钥:

warning: **.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
...
GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64"

可以从官方导入该公钥:

$ sudo rpmkeys --import https://getfedora.org/static/F5282EE4.txt # 注意这里文件名就是提示中的 key ID,并且文件名大写

key ID 可以从官网获得:https://getfedora.org/verify