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

推荐订阅源

Y
Y Combinator Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
博客园 - 【当耐特】
AWS News Blog
AWS News Blog
U
Unit 42
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Recorded Future
Recorded Future
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
Latest news
Latest news
GbyAI
GbyAI
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Hacker News: Ask HN
Hacker News: Ask HN
美团技术团队
N
News | PayPal Newsroom
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Hacker News
The Hacker News
The GitHub Blog
The GitHub Blog
V
V2EX
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Security Latest
Security Latest
博客园 - 叶小钗
P
Palo Alto Networks Blog

魔帆博客

Python包管理的血泪史:从混乱到秩序的漫长征 | 魔帆博客 Mac mini + iPad 随航梦幻联动!零显示器配置指南,iPad 秒变 Mac 主屏幕 | 魔帆博客 日文中的衬线、非衬线混排 | 魔帆博客 使用 GNU/Linux 搭建多出口软路由 | 魔帆博客 网页排版中的字体衬线 | 魔帆博客 配置和使用 Windows Dev Drive 开发驱动器 | 魔帆博客 解锁iOS侧载自由:使用sideStore轻松搞定ipa签名 | 魔帆博客 Git配置:如何优雅的配置多用户并使用 ssh 密钥验证 | 魔帆博客 Windows 注册表编辑或清除多显示器配置 | 魔帆博客 Git 合并本地两个不同的 Repo 仓库 | 魔帆博客 【记录】使用Golang开发腾讯云函数踩的坑 | 魔帆博客 Git 提示 fatal: unsafe repository is owned by someone else 错误 | 魔帆博客 【笔记】Hydro二次开发总结 前端篇(一) | 魔帆博客 C/C++ 二叉树 | 魔帆博客 Linux 报错Certificate verification failed: The certificate is NOT trusted. | 魔帆博客 Python 数字大小写转换 | 魔帆博客 安装有 RootMagiskXposedPlay 的 WSA 安卓子系统 | 魔帆博客 教程:如何更新安装 docker-compose V2 和使用 docker switch | 魔帆博客 Windows10 系统盘开启 Bitlocker | 魔帆博客
Fedora 系统升级 32->34 跨版本升级 | 魔帆博客
野小新 · 2022-03-02 · via 魔帆博客

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