MorFans Dev
折腾 - 开发 - 分享

Fedora 系统升级 32->34 跨版本升级

Fedora 系统升级 32->34 跨版本升级

Fedora 提供了一个DNF包管理的插件 dnf-plugin-system-upgrade,用于大版本的系统更新(release of Fedora)

通过这个插件实现:

  • 在系统正常运行时下载新版本的软件包
  • 系统重启进入一个特殊环境(以systemd目标的形式实现)
  • 系统更新
  • 完成后,系统重启进入新的 Fedora 版本

一定要备份数据,系统级别的更新一定是存在风险的

进行系统更新

先看看当前系统的版本号:

系统更新最多只能跨两个版本号

cat /etc/redhat-release
---
Fedora release 32 (Thirty Two)

我们系统是 Fedora 32,所以我们能更新到 Fedora 33、Fedora 34。这里我选择更新到 Fedora 34,因为它比较新 🤣

更新之前先进行软件更新,确保系统里的软件,依赖等都为最新版本:

dnf upgrade --refresh

更新完成之后,我们就可以进行系统更新了,如果没有安装更新插件,输入如下命令安装:

dnf install dnf-plugin-system-upgrade

安装完插件后,就可以使用插件来下载更新包了,--releasever= 后面改成你需要的 Fedora 版本号,里面我想更新到 34,所以我填入了 34。

系统更新最多只能跨两个版本号

dnf system-upgrade download --releasever=34
---

Before you continue ensure that your system is fully upgraded by running "dnf --refresh upgrade". Do you want to continue [y/N]: y

有GPGkey提示,导入即可:

warning: /var/lib/dnf/system-upgrade/updates-1eb77e9f45b4391a/packages/adwaita-cursor-theme-40.1.1-1.fc34.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 45719a39: NOKEY
Fedora 34 - x86_64 - Updates                                                            1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x45719A39:
 Userid     : "Fedora (34) <fedora-34-primary@fedoraproject.org>"
 Fingerprint: 8C5B A699 0BDB 26E1 9F2A 1A80 1161 AE69 4571 9A39
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-34-x86_64
Is this ok [y/N]: y

看到如下内容就代表下载完成

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 进入更新,注意:

  • 重启不会有任何提示、确认或等待,直接重启。有什么工作要保存的请先干完。
dnf system-upgrade reboot

系统更新后可能要干的事情

更新系统配置文件

大部分配置文件是保存在 /etc 目录下,如果你修改了其中的一些配置文件,更新后 RPM 会创建 .rpmnew 结尾的新配置文件(最新的),或者是以 .rpmsave 结尾的旧配置文件(你的),可以手动搜索处理它们。

但是博主懒,因为有工具,直接用 rpmconf 工具简化这个过程。

  • 一定要看字,选择(diff)对比一下配置文件,然后选择覆盖或合并(merge)

安装 rpmconf

dnf install rpmconf

使用 rpmconf

rpmconf -a

# 如果喜欢用其它 merge 工具,比如调用 vimdiff (merge的时候):
rpmconf -a -fvimdiff

使用后建议验证一下配置文件是否符合预期,如果 sshd 之前你是否开的密钥验证,端口号是否是你之前配置的等等

  • /etc/ssh/sshd_config
  • /etc/nsswitch.conf
  • /etc/ntp.conf

其他的也要看看

清理旧的包

一些包在系统更新后,依赖关系会被破坏,可以用下面第一条命令过滤出来。

一般列表都会是空的,如果不是空的考虑移除它们,因为它们不大可能正常工作了 🥲

# 列出

# packages with broken dependencies
dnf repoquery --unsatisfied

# 还有些多版本的包,用下面命令查看,然后决定是否要留
# duplicate packages (packages with multiple versions installed)
dnf repoquery --duplicates

来自官方的 repo 的软件都会是最新的,但是其他 repo 的则不一定,建议检查一下:

  • 如果明确知道不需要的包建议直接移除
dnf list extras

清理旧的内核

旧内核在执行 dnf autoremove 后并不会被删除,这是有意设计的,防止误删。

当启动到新的内核,如果一切正常可以删除以前旧的内核来节省空间

过滤出旧的内核:

dnf repoquery --installonly --latest-limit=-1

使用 dnf remove xxx 移除它们

或者使用如下脚本(效果一样的):

#!/usr/bin/env bash

old_kernels=($(dnf repoquery --installonly --latest-limit=-1 -q))
if [ "${#old_kernels[@]}" -eq 0 ]; then
    echo "No old kernels found"
    exit 0
fi

if ! dnf remove "${old_kernels[@]}"; then
    echo "Failed to remove old kernels"
    exit 1
fi

echo "Removed old kernels"
exit 0

清理旧的符号链接

如果没有 symlinks 先安装:

dnf install symlinks

在大升级后,系统文件可能存在很多悬空(dangling)的符号链接,使用这个工具能把它们筛选和删除

递归(-r)检索并过滤出来看看:

symlinks -r /usr | grep dangling

删除(-d)它们:

symlinks -r -d /usr

🎉 Fedora 34 升级完成

至此,Fedora 就升级完成了,如果没有出什么问题赶快庆祝一下吧!出了其他问题也别慌,冷静分析,面向搜索引擎【

赞赏
魔帆博客,版权所有 | 如未注明,均为原创
本站均采用 BY-NC-ND 协议 (署名-非商业性使用-禁止演绎) 进行授权。
转载请注明来自本站文章:Fedora 系统升级 32->34 跨版本升级(https://www.morfans.cn/archives/3278)

野小新

文章作者

野小新很野~

发表回复

textsms
account_circle
email

Fedora 系统升级 32->34 跨版本升级
Fedora 提供了一个DNF包管理的插件 dnf-plugin-system-upgrade,用于大版本的系统更新(release of Fedora) 通过这个插件实现: 在系统正常运行时下载新版本的软件包系统重启进入…
扫描二维码继续阅读
2022-03-02