升级Fedora最新发行版本¶
备注
Fedora 支持从不同低版本( 34/33 ,最多支持两代跨越,也就是最多支持 35 或 36) 直接升级到最新的 Fedora 37
我最初安装部署的 z-dev
版本是 Fedora 35,Fedora 37正式发布时做一次全面的版本升级,以体验最新的Linux技术
升级需要较大的磁盘空间,我在最初构建虚拟机时候采用了非常小的初始磁盘。所以升级过程中DNF提示磁盘空间不足,采用 在libvirt LVM卷管理存储池中扩展虚拟机磁盘 将磁盘扩展到 32G 42G
更新所有系统已经安装的软件包:
dnf --refresh upgrade
重启操作系统
安装/升级
dnf-plugin-system-upgrade
软件包:
dnf install dnf-plugin-system-upgrade --best
下载更新软件包:
dnf system-upgrade download --releasever=37
如果一切检查正常,提示信息类似:
...
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Complete!
Transaction saved to /var/lib/dnf/system-upgrade/system-upgrade-transaction.json.
Download complete! Use 'dnf system-upgrade reboot' to start the upgrade.
To remove cached metadata and transaction use 'dnf system-upgrade clean'
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
开始升级:
dnf system-upgrade reboot
升级完成后操作¶
大多数配置文件存放在 /etc
目录。如果修改过默认配置,则RPM安装会创建一个 .rpmnew
文件(也就是新版本的默认配置)或者 .rpmsave
(旧的配置文件备份)。可以搜索这些文件,或使用 rpmconf
工具来处理:
sudo dnf install rpmconf
然后执行:
sudo rpmconf -a
备注
对于使用BIOS的系统,会升级 GRUB
rpm,但是安装或内嵌的bootloader不会自动升级,所以建议在fedora升级后执行一次重新安装升级:
sudo mount | grep "/boot "
# 假设这里显示 /dev/sda4 on /boot type ext4 (rw,relatime,seclabel)
# 则执行
sudo grub2-install /dev/sda
清理无用软件包
一些旧版本的软件包在新版本中已经不不再升级,也不再使用,建议删除:
如果只跨了一个版本升级(从Fedora 36升级到37),则执行:
sudo dnf install remove-retired-packages
remove-retired-packages
如果跨2个版本升级(从Fedora 35升级到37),则执行:
sudo dnf install remove-retired-packages
remove-retired-packages 35
清理旧软件包
先查看已经没有依赖关系的孤儿包:
sudo dnf repoquery --unsatisfied
通过如下命令查看是否存在重复包(也就是安装了多个版本的软件包):
sudo dnf repoquery --duplicates
查看是否有不属于软件仓库的软件包:
sudo dnf list extraso
上述软件包可以通过以下命令清理:
sudo dnf remove $(sudo dnf repoquery --extras --exclude=kernel,kernel-\*)
清理不再使用的软件包:
sudo dnf autoremove
清理旧软连接:
# 检查 sudo symlinks -r /usr | grep dangling # 清理 sudo symlinks -r -d /usr
一些可能问题处理方法¶
如果出现一些RPM/DNF报错,可能是rpm数据库损坏,通过以下命令修复:
sudo rpm --rebuilddb
系统升级默认使用了
dnf distro-sync
,但是可能会遇到软件包依赖错误,尝试以下修复方法:sudo dnf distro-sync
对于一些不再安全的依赖,可以通过以下方式检查:
sudo dnf distro-sync --allowerasing
如果出现SELinux相关策略告警,可能是SELinux权限设置问题,执行:
sudo fixfiles -B onboot