如果内核包是在我构建主机上运行的内核,我该如何从图像 chroot 中删除它?

如果内核包是在我构建主机上运行的内核,我该如何从图像 chroot 中删除它?

我正在尝试使用 构建自定义映像diskimage-builder,除其他功能外,该工具还会将映像中的所有软件包(包括内核)更新为最新版本。它还用于package-cleanup删除任何旧内核。

但是,package-cleanup有逻辑可以阻止您卸载当前内核;这在常规主机上是有意义的,但是当您在 chroot 内部操作以构建文件系统时,却没有意义。

暂时修补package-cleanup以禁用此逻辑表明yum具有相同的逻辑,我相信rpm也是如此!

相关发行版/软件包信息:

  • 主机:CentOS 7(基于 Minimal-1810 构建,并进行了一些更新)
    • 磁盘映像生成器-2.16.0-1
    • yum-utils-1.1.31-50
    • 内核-3.10.0-957.12.2
  • 图像:CentOS 7(GenericCloud-1905)
    • kernel-3.10.0-957.12.2(来自源图像)
    • kernel-3.10.0-957.27.2 (由 diskimage-builder 添加)

现在,显然,如果我将构建主机更新到最新的内核,这个问题就会消失......但直到主机和源映像中的内核版本再次相同,并且发布了更新的内核然后diskimage-builder添加。

更复杂的是,diskimage-builder安装较新的内核时,grubby会运行以构建相关的 grub 配置,但由于相关原因,此操作失败;它会关注当前正在运行的内核,即使这与当前运行的内核无关。这意味着不仅在新映像上保留了旧内核,而且它仍然是默认内核。碰巧的是,3.10.0-957.12.2 无法在我的目标系统 (VMware) 上启动,这就是为什么这对我来说是一个大问题。

这里有更好的解决方案吗?我可以强制package-cleanupyumrpm以某种方式删除旧内核包吗?(理想情况下package-cleanup,因为它已经包含动态确定要保留/删除哪些内核的逻辑。)

(当您知道自己在做什么时,那些试图保护您免于做错事的工具实际上应该允许您覆盖它们。此外,包管理工具不应该引用当前运行的环境,因为这可能不是最终的目标。)

相关内容