我正在尝试使用 构建自定义映像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-cleanup
、yum
或rpm
以某种方式删除旧内核包吗?(理想情况下package-cleanup
,因为它已经包含动态确定要保留/删除哪些内核的逻辑。)
(当您知道自己在做什么时,那些试图保护您免于做错事的工具实际上应该允许您覆盖它们。此外,包管理工具不应该引用当前运行的环境,因为这可能不是最终的目标。)