.. _upgrade_fedora_lastest_version:
===========================
升级Fedora最新发行版本
===========================
.. note::
Fedora 支持从不同低版本( :strike:`34/33` ,最多支持两代跨越,也就是最多支持 35 或 36) 直接升级到最新的 Fedora 37
我最初安装部署的 ``z-dev`` 版本是 Fedora 35,Fedora 37正式发布时做一次全面的版本升级,以体验最新的Linux技术
升级需要较大的磁盘空间,我在最初构建虚拟机时候采用了非常小的初始磁盘。所以升级过程中DNF提示磁盘空间不足,采用 :ref:`libvirt_lvm_pool_resize_vm_disk` 将磁盘扩展到 :strike:`32G` 42G
- 更新所有系统已经安装的软件包:
.. literalinclude:: upgrade_fedora_lastest_version/dnf_refresh_upgrade
:language: bash
:caption: 更新操作系统的所有软件包
- 重启操作系统
- 安装/升级 ``dnf-plugin-system-upgrade`` 软件包:
.. literalinclude:: upgrade_fedora_lastest_version/install_dnf-plugin-system-upgrade
:language: bash
:caption: 安装 dnf-plugin-system-upgrade
- 下载更新软件包:
.. literalinclude:: upgrade_fedora_lastest_version/download_releasever_37
:language: bash
:caption: 下载Fedora 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'.
- 开始升级:
.. literalinclude:: upgrade_fedora_lastest_version/system-upgrade_reboot
:language: bash
:caption: 执行升级重启
升级完成后操作
================
大多数配置文件存放在 ``/etc`` 目录。如果修改过默认配置,则RPM安装会创建一个 ``.rpmnew`` 文件(也就是新版本的默认配置)或者 ``.rpmsave`` (旧的配置文件备份)。可以搜索这些文件,或使用 ``rpmconf`` 工具来处理::
sudo dnf install rpmconf
然后执行::
sudo rpmconf -a
.. note::
对于使用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
参考
========
- `Upgrade to Fedora 37 from Fedora 36 using DNF `_
- `DNF System Upgrade `_ 官方文档