我如何重建损坏的 dpkg 状态文件?

我如何重建损坏的 dpkg 状态文件?

每当我输入sudo apt-get remove然后按下Tab自动完成键时,我都会收到以下消息:

grep-status: /var/lib/dpkg/status:15945: expected a colon
.

在状态文件的第 15945 行,我没有看到任何特别奇怪的东西。它是 Mono 库包描述字段中的一个点字符,插入冒号没有帮助。删除包含点的行也不起作用。用 status-old 覆盖文件会导致同样的消息。

有什么方法可以重建状态文件吗?

答案1

您应该能够使用之前已知的良好状态文件并从那里进行更新。每次进行安装或更新时,状态文件都会保存到 gzip 压缩的备份中/var/备份. 做一个ls -l dpkg* 目录上显示:

-rw-r--r-- 1 root root   2266732 2010-09-30 08:35 dpkg.status.0
-rw-r--r-- 1 root root    624182 2010-09-29 08:49 dpkg.status.1.gz
-rw-r--r-- 1 root root    623844 2010-09-28 08:55 dpkg.status.2.gz
-rw-r--r-- 1 root root    620358 2010-09-24 11:04 dpkg.status.3.gz
-rw-r--r-- 1 root root    619021 2010-09-23 15:34 dpkg.status.4.gz
-rw-r--r-- 1 root root    619013 2010-09-23 08:03 dpkg.status.5.gz
-rw-r--r-- 1 root root    618968 2010-09-21 08:33 dpkg.status.6.gz

在 /var/lib/dpkg/ 目录中还创建了一个名为 status-old 的文件备份。执行ls -l 状态* 目录上显示:

-rw-r--r-- 1 root root 2266732 2010-09-30 08:35 status
-rw-r--r-- 1 root root 2267191 2010-09-30 08:35 status-old

因此,要从损坏中恢复,您应该能够执行以下操作:

1. 备份损坏的状态文件

mv /var/lib/dpkg/status /var/lib/dpkg/status_bkup

2. 从上述任一来源复制最新的 dpkg 状态文件到位:

任何一个

cp /var/lib/dpkg/status-old /var/lib/dpkg/status

或者

cp /var/backups/dpkg.status.#.gz /var/lib/dpkg/
gunzip -d /var/lib/dpkg/dpkg.status.#.gz 
mv /var/lib/dpkg/dpkg.status.# /var/lib/dpkg/status

3.然后运行apt-get update:

sudo apt-get update

那就可以了。

答案2

我终于修复了系统问题。恢复状态文件备份没有用,因为这个问题已经存在很长时间了,我的所有备份中都有这个问题。

修复方法包括查找实际的格式中断并手动修复。这并不像听起来那么难。

http://thepcspy.com/read/fixing-dpkg-status-corruption/

答案3

尝试对有问题的软件包执行“dpkg -P”。这将从本地存储库中清除它,删除所有痕迹。在我的系统上,这是针对已删除(但尚未清除)的软件包(产生该错误)的修复方法。

答案4

在这种情况下,我会备份损坏的/var/lib/dpkg/status文件,然后使用以下信息手动更正它(大约在 1888 和 9550 行):

apt-cache show libssl0.9.8
apt-cache show udev

相关内容