我已经使用 Debian Wheezy 一年多了,一直没有出现问题,直到一周前。不知何故,系统突然认为 Linux 内核只配置了一半,我在网上找到的所有修复方法都不起作用。因此,apt
每次执行更新时都会尝试修复它,但失败了。
细节
症状
每次运行更新时,apt
都会在某个时候尝试修复内核,失败,并且更新过程将终止并显示错误建议,然后显示一条消息表明系统已更新。
任何更新活动都以apt
以下内容结束:
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/dkms 3.2.0-4-amd64 /boot/vmlinuz-3.2.0-4-amd64
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-4-amd64 /boot/vmlinuz-3.2.0-4-amd64
E: /usr/sbin/update-initramfs.orig.initramfs-tools - command not found
E: On Debian based systems, update-initramfs from initramfs-tools
E: can be installed with:
E: apt-get install initramfs-tools
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-4-amd64.postinst line 696.
dpkg: error processing linux-image-3.2.0-4-amd64 (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
linux-image-3.2.0-4-amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
内核
几乎同样的问题也出现在Ask Ubuntu 上的问题dpkg
。接受的答案指出了状态文件的问题。linux-image-3.2.0-4-amd64
说它已配置了一半。
作为第一步,我尝试了这个:
administrator@Kwheezy:~$ sudo dpkg-reconfigure linux-image-3.2.0-4-amd64
/usr/sbin/dpkg-reconfigure: linux-image-3.2.0-4-amd64 is broken or not fully installed
重新安装没有帮助,所以这表明它坏了。
Ask Ubuntu 的解决方案是从状态文件中删除该条目dpkg
,然后重新安装。就我而言,这也不起作用。当该过程完成时,dpkg
状态文件已将该条目替换为另一个条目,该条目仍显示配置了一半,系统行为相同。
恰当的输出
重点关注输出中的错误消息apt
。错误总是以以下内容开头:
/usr/sbin/update-initramfs.orig.initramfs-tools - command not found
果然,该文件不存在。有用的消息建议可以通过安装来安装initramfs-tools
。它已经安装,但我重新安装了它。结果发现它apt
已经自行安装了。所有错误消息都遵循安装指南initramfs-tools
是由该安装尝试生成的,它永远不会导致/usr/sbin/update-initramfs.orig.initramfs-tools
正在安装。
概括
- 我从 Wheezy 存储库中获得了最新的 Linux 内核。这是一个好的副本,满足所有依赖性,并且没有其他用户遇到问题的报告。
- 系统报告未完全配置。我找不到任何方法可以配置它,或者让系统不再认为它未完全配置。
答案1
解决
sudo apt-get remove live-tools
sudo apt-get install --reinstall initramfs-tools
sudo apt-get install -f
解释
在对 fixer1234 的系统有了更深入的了解后在聊天中,我确定安装的软件包live-tools
与有冲突initramfs-tools
。
live-tools
安装时,它会/usr/sbin/update-initramfs
用自己的脚本覆盖并将原始脚本放入/usr/sbin/update-initramfs.orig.initramfs-tools
。
live-tools
有一些健全性检查,用于检测它是否在实时系统上。如果它不在实时系统上,而是在已安装的系统上,它会尝试运行/usr/sbin/update-initramfs.orig.initramfs-tools
,这是更新 initramfs 的正确脚本。
在fixer1234的系统中,/usr/sbin/update-initramfs.orig.initramfs-tools
已被删除。
由于该系统是已安装的系统,live-tools
可能没有必要,这就是我建议将其删除的原因。
以下是上面“解决方案”部分中提出的每个步骤的工作原理:
sudo apt-get remove live-tools
删除live-tools
将尝试恢复/usr/sbin/update-initramfs.orig.initramfs-tools
到/usr/sbin/update-initramfs
,但由于/usr/sbin/update-initramfs.orig.initramfs-tools
不存在,因此会出现错误。
live-tools
仍将被删除,这才是最重要的。
我们仍然失踪/usr/sbin/update-initramfs
。
sudo apt-get install --reinstall initramfs-tools
为了恢复/usr/sbin/update-initramfs
,我们重新安装提供该文件的包。即initramfs-tools
。
sudo apt-get install -f
由于和的事故,您的内核安装不完整live-tools
,initramfs-tools
因此要完成安装并解决所有软件包问题,需要执行这最后一步。
现在,您应该拥有一个功能齐全的 Debian 系统。
(顺便说一句,这些步骤理论上适用于 Debian 8、Ubuntu 12.04、Ubuntu 14.04、Ubuntu 15.10、Ubuntu 16.04 和 Ubuntu 16.10。)