惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

Linux – 魔帆博客

Git配置:如何优雅的配置多用户并使用 ssh 密钥验证 | 魔帆博客 Git 提示 fatal: unsafe repository is owned by someone else 错误 | 魔帆博客 Linux 报错Certificate verification failed: The certificate is NOT trusted. | 魔帆博客 教程:如何更新安装 docker-compose V2 和使用 docker switch | 魔帆博客 Docker WSL1/2 迁移 Linux 发行版目录 | 魔帆博客 双重验证 Authy 导出所有 TOTP token 和 golang 配置 GOPROXY 解决网络问题 | 魔帆博客 Linux 教程:Linux 初学者必了解的概念 | 魔帆博客 创建支持安全启动(Secure Boot)的 Arch Linux ISO 安装镜像 | 魔帆博客 使用 Aria2 搭建离线下载服务器 | 魔帆博客 【记录】Deepin 桌面无限转圈(风火轮) | 魔帆博客 梅林固件KoolProxy插件崩溃连接ssh卸载指南(北) | 魔帆博客 [Linux] dconf 系统配置编辑器——我的系统我做主 | 魔帆博客 Arch Linux 通过 xdg-mime 设置默认文件管理器解决总是用 Visual Studio Code 打开文件夹的问题 | 魔帆博客
Fedora 系统升级 32->34 跨版本升级 | 魔帆博客
野小新 · 2022-03-02 · via Linux – 魔帆博客

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