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 就升级完成了,如果没有出什么问题赶快庆祝一下吧!出了其他问题也别慌,冷静分析,面向搜索引擎【
发表回复