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

推荐订阅源

D
Docker
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
I
Intezer
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
L
Lohrmann on Cybersecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
LINUX DO - 热门话题
S
Secure Thoughts
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Latest news
Latest news
B
Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
L
LangChain Blog
GbyAI
GbyAI
Last Week in AI
Last Week in AI
S
Security Affairs
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
Security Latest
Security Latest
Vercel News
Vercel News
Y
Y Combinator Blog
G
GRAHAM CLULEY
S
Securelist
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
雷峰网
雷峰网

野小新 – 魔帆博客

Python包管理的血泪史:从混乱到秩序的漫长征 | 魔帆博客 Mac mini + iPad 随航梦幻联动!零显示器配置指南,iPad 秒变 Mac 主屏幕 | 魔帆博客 解锁iOS侧载自由:使用sideStore轻松搞定ipa签名 | 魔帆博客 Git配置:如何优雅的配置多用户并使用 ssh 密钥验证 | 魔帆博客 Git 合并本地两个不同的 Repo 仓库 | 魔帆博客 Git 提示 fatal: unsafe repository is owned by someone else 错误 | 魔帆博客 安装有 RootMagiskXposedPlay 的 WSA 安卓子系统 | 魔帆博客 教程:如何更新安装 docker-compose V2 和使用 docker switch | 魔帆博客 2022 年 Android 下的安卓浏览器使用指北-Firefox向 | 魔帆博客 Docker WSL1/2 迁移 Linux 发行版目录 | 魔帆博客 Spotify 主题 spicetify-fluent - 微软 win11 风格美化 | 魔帆博客 WSA 安卓子系统 adb 提示 cannot connect the target machine actively refused it 10061 | 魔帆博客 双重验证 Authy 导出所有 TOTP token 和 golang 配置 GOPROXY 解决网络问题 | 魔帆博客 powershll 像 bash 一样为单个命令设置临时环境变量 | 魔帆博客 Linux 教程:Linux 初学者必了解的概念 | 魔帆博客 安卓电池充电保护-智能充电/温控切断(Root方案) | 魔帆博客 备用机养成方案 - Tasker 安卓短信转发到 telegram | 魔帆博客 创建支持安全启动(Secure Boot)的 Arch Linux ISO 安装镜像 | 魔帆博客 MiBand小米手环2/3刷机刷固件刷表盘刷字体指南(iPhone iOS 也支持) | 魔帆博客
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 就升级完成了,如果没有出什么问题赶快庆祝一下吧!出了其他问题也别慌,冷静分析,面向搜索引擎【