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 也出现在了错误里

  • 目的:解决上文提到的问题并执行系统的升级

过程

思路

  1. 整理报错

    该报错意思为在系统升级过程中想要删除一些包,但是有些包被保护了,不允许被删除,因为不能被删除,所以也无法进行升级

  2. 这个命令在做什么?

    参考官方文档 以及system-upgrade的man手册 dnf system-upgrade 这个命令用于升级系统,这是官方所推荐的版本升级方法,download 用于下载主版本更新的所有内容, --releaserver=39 用于指定更新的版本

  3. 这个命令与 dnf upgrade && dnf update 有什么区别?

    dnf upgradednf update 在通常意义上来讲只是别名上的区别而已,在不涉及重大版本更新下想用哪个就用哪个

    硬要说区别的话参考这两篇文章dnf update vs upgradetechnical differences between "upgrade" and "update",这两篇文章总结起来就是 dnf upgrade 会删除一些旧的不需要的包,比 dnf update 行为上会更激进一些

    参考dnf 的man手册,我们可以知道我上面说的都是扯淡,其实两者之间并没有什么区别 ( ゚∀。)7"

    dnf system-upgrade 与上面的两个命令有所不同,这使用的是 dnf 的额外插件,专用于系统进行跨版本升级,在我所遇到的使用场景下确实是需要使用 dnf system-grade

  4. 通常进行系统升级会使用到哪些方法, dnf system-upgrade 是否唯一可行的办法?

    首先是在 nobara 的官方文档中推荐了这个方法,那么这个方法理论上是首选的,其次参考官方文档,在跨两个版本(如37->40)以上的更新时候,可以通过上文方法进行处理,但是在本次遇到的情况中官方并不推荐这种办法,所以只能硬着头皮去解决文章前言中所遇到的问题

  5. 什么情况会导致前言中的 --skip-broken 以及 --allowerasing 情况出现?

    在上文提到的官方文档中,告诉我们,如果有一些包依赖是不安全的,那么 system-upgrade 插件就会终止更新,在使用第三方库更新大版本的时候通常会出现类似的问题.你可以使用 --allowerasing 直接卸载掉这些内容.

    同样参考 dnf man文档 使用 --skip-broken 会跳过所有没用的包以及 dnf 安装报错的包 ( 」゚Д゚)」<安装不上的话跳过就好了

    出现这种情况我觉得与我使用的是nobara有关,可能没什么人去维护? ( ゚∀。)7"

  6. 为什么在使用使用了 --skip-broken 以及 --allowerasing 后仍然解决不了相关的问题?

    根据报错, kernel-core 被保护了,根据dnf 官方配置文档protected_packages 选项所描述,有一些包是 dnf 不会进行移除的,具体的目录存放于 /etc/dnf/protected.d/*.conf 中,除了这个目录下的包之外,还有一些 kernel 类的包同样不会被移除

  7. 与这个问题类似的社区解决方法有无?

    进行了一番搜索,有以下问题与我的情况比较类似

    我这个问题应该是一个共性问题

  8. 总结

    至此可以总结为:

    • 对现有 nobara 系统的升级思路是没有错误的
    • 没有别的办法可以绕过 dnf system-upgrade 实现 nobara 的大版本升级
    • dnf system-upgrade 命令中所出现的报错可以确认为是 kernel 共同造成的问题
    • 类似的问题社区有较多解决方法,也就是我现在手头上的问题是可以解决的

    下一步实施的方法主要围绕 kernel 进行处理

实施步骤

  1. 查询 kernel 是否在 protected_package

    查询dnf配置文档,开头明确提出 dnf 配置文件在 /etc/dnf/dnf.conf 中,查看被保护包也在该路径之下

dnf配置文件

打开目录查看里面的内容

相关文件

可以看到 `kernel` 并没有出现在 `protected.d` 文件夹中,由此可以判断该问题是由 linux 核心受保护而引起的
  1. 卸载不需要以及保留系统现使用的 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
...
  1. 更改 dnf 配置并执行升级操作
$> echo install_limit = 0 > /etc/dnf/dnf.conf # 确保 dnf  在更新过程中不会删除任何核心
$> sudo dnf system-upgrade download --releasever=39 -y # 更新操作顺利执行
....
  1. 顺利解决问题
posted @ 2024-09-05 17:23  五花肉炒河粉  阅读(113)  评论(0)    收藏  举报