强制删除不需要的 linux-image-extra* 包

Giu*_*ppe 7 apt dpkg kernel openvz 14.04

为了使一个漫长的故事短,我坚持不想要的,一半的映像文件包,我试图摆脱了一把:

$ dpkg -l |grep linux-im
iF  linux-image-3.13.0-100-generic       3.13.0-100.147 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-101-generic       3.13.0-101.148 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-92-generic        3.13.0-92.139  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-93-generic        3.13.0-93.140  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-96-generic        3.13.0-96.143  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-100-generic 3.13.0-100.147 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-101-generic 3.13.0-101.148 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-92-generic  3.13.0-92.139  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-93-generic  3.13.0-93.140  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-96-generic  3.13.0-96.143  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
Run Code Online (Sandbox Code Playgroud)

这些镜像实际上是无用的,因为我的 32 位 14.04 系统位于一个 OpenVZ 容器中,它只负责内核。如您所见,一个更古老的:

$ uname -r
2.6.32-042stab116.2
Run Code Online (Sandbox Code Playgroud)

因此,与关注如何在例行升级后删除内核映像的大多数类似问题不同,我在这里尝试做的是完全清除所有这些 3.13 包,这首先不应该存在。


这是我迄今为止尝试的总结。

由于明显的恶性循环,尝试以通常的方式(apt-getaptaptitude,没关系)删除/清除包似乎不起作用。

sudo apt-get purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic
Run Code Online (Sandbox Code Playgroud)

输出中可以看出,实际上没有删除任何内容。另一方面,aptitude设法更进一步:

sudo aptitude purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic
Run Code Online (Sandbox Code Playgroud)

此过程结束时,*image-3.13*s 以及通常在/boot和 中找到的匹配文件和文件夹都消失了,/lib/modulesimage-extra仍报告 s 已安装到一半(即使它们似乎不包含任何文件,经验证dpkg -L... )

此外,依赖关系现在打破,因为在这个阶段重复吹扫导致容易抱怨丢失的文件/文件夹 /boot并在/lib/modules。我试图按照此处的建议将虚拟文件放置在预期的位置,但最后我遇到了原始错误。我认为以下是关键的摘录:

[...]
Removing linux-image-extra-3.13.0-101-generic (3.13.0-101.148) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-101-generic
E: /usr/share/initramfs-tools/hooks/fixrtc failed with return 1.
update-initramfs: failed for /boot/initrd.img-3.13.0-101-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-101-generic (--purge):
subprocess installed post-removal script returned error exit status 1
[...]
Run Code Online (Sandbox Code Playgroud)

在尝试失败后,一个所谓的核选项

sudo dpkg --remove --force-remove-reinstreq package_name
Run Code Online (Sandbox Code Playgroud)

我的想法用完了。

Giu*_*ppe 3

鉴于:

  • linux-image-3.13.0-XXX-generic成功清除
  • 仍报告linux-image-extra-3.13.0-XXX-generic为半安装
  • image-extra当前安装的软件包不依赖于这些
  • 首先这些镜像都不应该存在(因为 2.6 内核是由主机 OpenVZ 容器提供的)
  • 传统的尝试都未能成功清理系统

那么一种可能的方法是从dpkg数据库中强制清除这些悬空条目,如此处建议的那样

请注意:这是一种黑客行为、低级且有潜在危险的操作。

  • 查找属于您要删除的包的任何文件(尝试$ dpkg -L linux-image-extra-3.13.0-XXX-generic)并删除它们
  • 打开文件/var/lib/dpkg/status,找到并删除描述您希望 dpkg 忘记的包的文本块
  • 要格外小心地保留包描述符之间的空白行、行开头的空格等。他们说 apt 数据库不会容忍拼写错误。
  • 保存状态文件后,dpkg以及所有apt相关程序应该恢复正常