由于不可恢复的致命错误 /var/lib/dpkg/diversions,无法安装任何软件包

由于不可恢复的致命错误 /var/lib/dpkg/diversions,无法安装任何软件包

我目前无法安装任何软件包。我收到以下错误:

 dpkg: unrecoverable fatal error, aborting:
 too-long line or missing newline in `/var/lib/dpkg/diversions

我尝试过各种方法:

sudo dpkg --configure -a   
sudo apt-get clean
sudo dpkg-divert --list 
sudo apt-get check  
sudo apt-get install -f

等等,但都无济于事。输出显然是正常的,或者抛出了上述错误。

我不知道该怎么做,如果能得到帮助,我将不胜感激。如果需要更多信息,请直接询问。


谢谢您的回复。我按照建议操作,但现在出现了另一个错误:

(正在读取数据库... 50%dpkg:无法恢复的致命错误,中止:包“libksane0”的文件列表文件缺少最后的换行符 E:子进程 /usr/bin/dpkg 返回错误代码(2)

以下是当前改道的链接:http://paste.ubuntu.com/823500/ 还有那旧的、破烂的:http://paste.ubuntu.com/823502/

我尝试重新安装libksane0但出现同样的错误。

答案1

首先,备份 /var/lib/dpkg/diversions 和 /var/lib/dpkg/diversions-old,以防万一。

接下来,尝试将 /var/lib/dpkg/diversions-old 复制到 /var/lib/dpkg/diversions 之上:

cd /var/lib/dpkg
mv diversions diversions.broken
cp diversions-old diversions

现在 dpkg 应该可以再次工作了,但它的 diversions 数据库可能不完整。重新安装 ( apt-get install --reinstall packagename) 受影响的软件包可能是恢复的好方法;问题是:您如何确定哪些软件包受到了影响?比较 diversions.broken 和 diversions-old ( diff -u diversions-old diversions.broken) 的内容是一种方法;在 /var/log/dpkg.log 中查找最近更新的软件包列表并重新安装它们以防万一是另一种方法。使用稍微过时的 diversions 数据库也可能不会发生任何不好的事情;这完全取决于这些文件中的具体内容。

答案2

我知道这已经很晚了,但其他人可能会发现这仍然有用。Kali(Debian-Variant)上弹出了相同的错误消息,但文件不同,我发现的最佳解决方案是从仍在运行的 Kali 副本中复制错误文件。问题解决了。

相关内容