nobara(fedora) 更新过程中问题处理
nobara(fedora) 更新过程中问题处理
前言
- 前提:参考本人nobara系统搭建过程,距离那篇记录已经有接近一年的时间了,在这一年里nobara也更新了两个大版本,从38走到了40,遂想进行更新.
- 问题:根据官方文档给出的做法进行升级,在下面的步骤中出现了错误
$> sudo dnf system-upgrade download --releasever=39 -y
.....
Problem: The operation would result in removing the following protected packages: kernel-core,systemd,grub2-efi-ia32....
(try to add '--skip-broken' to skip uninstallable packages)
-
我所遇到的问题与这个问题类似,但是比这个还要复杂一些,在这个帖子里只是出现了kernel-core的问题,在我的实践中除了kernel-core还有包括但不限于
systemd,grub2-efi-ia32也出现在了错误里 -
目的:解决上文提到的问题并执行系统的升级
过程
思路
-
整理报错
该报错意思为在系统升级过程中想要删除一些包,但是有些包被保护了,不允许被删除,因为不能被删除,所以也无法进行升级
-
这个命令在做什么?
参考官方文档 以及system-upgrade的man手册
dnf system-upgrade这个命令用于升级系统,这是官方所推荐的版本升级方法,download用于下载主版本更新的所有内容,--releaserver=39用于指定更新的版本 -
这个命令与
dnf upgrade&&dnf update有什么区别?dnf upgrade与dnf update在通常意义上来讲只是别名上的区别而已,在不涉及重大版本更新下想用哪个就用哪个硬要说区别的话参考这两篇文章dnf update vs upgrade和technical differences between "upgrade" and "update",这两篇文章总结起来就是
dnf upgrade会删除一些旧的不需要的包,比dnf update行为上会更激进一些参考dnf 的man手册,我们可以知道我上面说的都是扯淡,其实两者之间并没有什么区别 ( ゚∀。)7"而
dnf system-upgrade与上面的两个命令有所不同,这使用的是dnf的额外插件,专用于系统进行跨版本升级,在我所遇到的使用场景下确实是需要使用dnf system-grade -
通常进行系统升级会使用到哪些方法,
dnf system-upgrade是否唯一可行的办法?首先是在 nobara 的官方文档中推荐了这个方法,那么这个方法理论上是首选的,其次参考官方文档,在跨两个版本(如37->40)以上的更新时候,可以通过上文方法进行处理,但是在本次遇到的情况中官方并不推荐这种办法,所以只能硬着头皮去解决文章前言中所遇到的问题
-
什么情况会导致前言中的
--skip-broken以及--allowerasing情况出现?在上文提到的官方文档中,告诉我们,如果有一些包依赖是不安全的,那么
system-upgrade插件就会终止更新,在使用第三方库更新大版本的时候通常会出现类似的问题.你可以使用--allowerasing直接卸载掉这些内容.同样参考 dnf man文档 使用
--skip-broken会跳过所有没用的包以及 dnf 安装报错的包( 」゚Д゚)」<安装不上的话跳过就好了出现这种情况我觉得与我使用的是nobara有关,可能没什么人去维护? ( ゚∀。)7" -
为什么在使用使用了
--skip-broken以及--allowerasing后仍然解决不了相关的问题?根据报错,
kernel-core被保护了,根据dnf 官方配置文档的protected_packages选项所描述,有一些包是 dnf 不会进行移除的,具体的目录存放于/etc/dnf/protected.d/*.conf中,除了这个目录下的包之外,还有一些kernel类的包同样不会被移除 -
与这个问题类似的社区解决方法有无?
进行了一番搜索,有以下问题与我的情况比较类似
- 1741381 – DNF wants to remove kernel-core
- CentOS 8 upgrade error kernel-core
- Fedora 36 upgrade fails due to attempting to remove protected kernel-core
- 1442954 - Can no longer update - "The operation would result in removing the following protected packages: kernel"
我这个问题应该是一个共性问题
-
总结
至此可以总结为:
- 对现有 nobara 系统的升级思路是没有错误的
- 没有别的办法可以绕过
dnf system-upgrade实现 nobara 的大版本升级 - 在
dnf system-upgrade命令中所出现的报错可以确认为是 kernel 共同造成的问题 - 类似的问题社区有较多解决方法,也就是我现在手头上的问题是可以解决的
下一步实施的方法主要围绕 kernel 进行处理
实施步骤
-
查询
kernel是否在protected_package中查询dnf配置文档,开头明确提出 dnf 配置文件在
/etc/dnf/dnf.conf中,查看被保护包也在该路径之下

打开目录查看里面的内容

可以看到 `kernel` 并没有出现在 `protected.d` 文件夹中,由此可以判断该问题是由 linux 核心受保护而引起的
-
卸载不需要以及保留系统现使用的
kernel查看本机使用内核及所安装内核
$> uname -r #本机使用内核
6.10.6-200.fsync.fc40.x86_64
$> dnf repoquery --installed 'kernel*' #本机所安装内核
kernel-0:6.10.6-200.fsync.fc40.x86_64
kernel-0:6.6.8-200.fsync.fc38.x86_64
kernel-0:6.8.12-200.fsync.fc39.x86_64
kernel-core-0:6.10.6-200.fsync.fc40.x86_64
kernel-core-0:6.6.8-200.fsync.fc38.x86_64
kernel-core-0:6.8.12-200.fsync.fc39.x86_64
kernel-devel-0:6.10.6-200.fsync.fc40.x86_64
kernel-devel-0:6.6.8-200.fsync.fc38.x86_64
kernel-devel-0:6.8.12-200.fsync.fc39.x86_64
kernel-devel-matched-0:6.10.6-200.fsync.fc40.x86_64
kernel-headers-0:6.10.6-200.fsync.fc40.x86_64
kernel-modules-0:6.10.6-200.fsync.fc40.x86_64
kernel-modules-0:6.6.8-200.fsync.fc38.x86_64
kernel-modules-0:6.8.12-200.fsync.fc39.x86_64
kernel-modules-core-0:6.10.6-200.fsync.fc40.x86_64
kernel-modules-core-0:6.6.8-200.fsync.fc38.x86_64
kernel-modules-core-0:6.8.12-200.fsync.fc39.x86_64
kernel-modules-extra-0:6.10.6-200.fsync.fc40.x86_64
kernel-modules-extra-0:6.6.8-200.fsync.fc38.x86_64
kernel-modules-extra-0:6.8.12-200.fsync.fc39.x86_64
kernel-srpm-macros-0:1.0-23.fc40.noarch
$> sudo dnf mark install kernel-core #将kernel-core标记为用户安装包,其效果是在执行 autoremove 操作时不删除相关的包
...
$> sudo dnf autoremove
...
- 更改 dnf 配置并执行升级操作
$> echo install_limit = 0 > /etc/dnf/dnf.conf # 确保 dnf 在更新过程中不会删除任何核心
$> sudo dnf system-upgrade download --releasever=39 -y # 更新操作顺利执行
....
- 顺利解决问题

浙公网安备 33010602011771号