由于内核包问题,无法 apt 升级

由于内核包问题,无法 apt 升级

这里有一位 Ubuntu 14.04 LTS 用户。

基本上我在跑步时遇到了问题

sudo apt-get update
sudo apt-get upgrade

dpkg 返回错误代码,因为 Linux 内核包 3.13.0.57 被标记为“未完全安装”:

Errors were encountered while processing:
 linux-image-3.13.0.57-generic
 linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

我输入uname -r为了查看我的系统内核的当前版本,令人惊讶的是3.13.0.57之后我重启系统并进入 grub 列出所有已安装的 linux 内核,发现3.8.0-35-通用因此我启动它来尝试重新安装 3.13.0.57 版本。我不知道为什么在 3.8.0-35 可用的情况下 Ubuntu 14.04 默认使用 3.13.0.57 启动。

在我成功启动后3.8.0我再次使用 dpkg 列出了我拥有的所有内核,以确保3.13.0-57存在。

sudo dpkg --list | grep linux-image
sudo apt-get purge linux-image-3.13.0.57-generic
sudo apt-get purge linux-image-extra-3.13.0-57-generic

但额外的镜像包无法删除,而纯Linux镜像可以:

Errors were encountered while processing:
 linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

有什么办法可以解决这个问题吗?我搜索了一下,发现启动分区上可能没有足够的空间会导致此类问题,但我认为我的情况不同。我设法手动清除了 4-5 个旧内核,以确保我在启动分区上释放了足够的空间。

编辑1:我看到 Ubuntu 14.04.2 附带 Linux 内核 3.16.x,但我没有。我拥有的最新版本是 3.8.0-35,然后是 3.13.0-57。

编辑2:运行sudo apt-get autoremovesudo apt-get dist-upgrade没有帮助。似乎我无法运行任何升级。以下是日志sudo apt-get autoremove

    $ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-image-extra-3.13.0-57-generic
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 152 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 747752 files and directories currently installed.)
Removing linux-image-extra-3.13.0-57-generic (3.13.0-57.95) ...
depmod: FATAL: could not load /boot/System.map-3.13.0-57-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-57-generic
grep: /boot/config-3.13.0-57-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/zz-runlilo 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
Fatal: open /boot/vmlinuz-3.13.0-46-generic.efi.signed: No such file or directory
run-parts: /etc/kernel/postinst.d/zz-runlilo exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-57-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

我不知道这Fatal: open /boot/vmlinuz-3.13.0-46-generic.efi.signed: No such file or directory与删除 3.13.0-57 有什么关系。

答案1

我设法找到了解决问题的方法。不过,我决定将其发布为答案,以防有人遇到同样的问题。

问题原因:

我检查了软件包的 dpkg 状态:

dpkg --status linux-image-3.13.0.57-generic
dpkg --status linux-image-extra-3.13.0-57-generic

输出清楚地表明软件包状态不好。正如我在上面的问题中所写,它们“未完全安装”。

解决方案:

必须从状态文件中删除这些包的条目dpkg才能apt-get正常运行。步骤如下:

  1. 如果出现问题,请务必备份状态文件。

    sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.backup

  2. 使用您喜欢的文本编辑器打开/var/lib/dpkg/status并搜索并删除仅有的破损包裹的参考信息。您不得删除任何其他内容!

  3. 运行sudo apt-get upgrade以确保一切都已修复。

答案2

wajig remove linux-headers-3.13.0-57-generic对我有用。

我重新启动并进入3.13.0-57-generic内核。

但要小心!备份你的数据。

答案3

如果你想升级到新内核版本,你可以通过“linux-image-lts...”包或通过“apt-get dist-upgrade”手动安装它

这些故障经常发生在完整的 luks 加密卷中,因为这些设置中的 /boot 太小。

也许“apt-get autoremove”也有帮助......

相关内容