Fixing /var/lib/dpkg/status corruption

Apt and dpkg are wonderful tools when they work. However, like most tools, if you chuck rubbish at them, they’ll stop working. Here’s a quick guide to overcoming the most common break in /var/lib/dpkg/status.

Published 2011-01-30. Read 1,381 times. 0 Comments. Tagged: dpkg

If you’ve ever gone to apt-get remove something with tab-completion and it baulks out with:

grep-status: /var/lib/dpkg/status:26787: expected a colon

… you’re suffering from some corruption. Opening the file at the given line rarely shows the right error because formatting issues in the file causes a cascade error and it only detects a break much further on.

The required formatting in this file is truly bizarre.

Package: a-package-name
Status: install ok installed
Other-Fields: blah
Description: The description may have many lines
 but double-breaks need a full-stop.
 Like that.

Package: a-bad-package
Status: install ok installed
Other-Fields: blah
Description: Some packages aren't well formed.

 And break the rules. This is an example of a bad description

And there’s a blank newline between packages. So if a package gets inserted into the local database and it doesn’t follow these guidelines, dpkg breaks. In my case it has only ever broken the remove-tab-completion (as provided by grep-status) but I’ve always found it very hard to fix… Until now.

What we need is a tool that can search for multiple newlines where the first thing on the next line isn’t Package:. grep can’t do multi-line so we have to turn to pcregrep. It’s as simple as this:

sudo apt-get install pcregrep
pcregrep -nM '\n\s*\n[^P]+' /var/lib/dpkg/status

This will return a block of text and a line number like so:

oli@bert:~$ pcregrep -nM '\n\s*\n[^P]+' /var/lib/dpkg/status
25643:             The program uses to TRIM disks.

    is part of the open source project hdparm
             and can be obtained from the hdparm web page.


Then we just nano into the file (using the plus-argument to go straight to the right place):

sudo nano +25643 /var/lib/dpkg/status

And edit the description so any blank lines just start with a .. Save it and run a sudo apt-get update and you’ll find that apt-get remove tab-completion works!

About Oli: I’m a Django and Python programmer, occasional designer, Ubuntu member, Ask Ubuntu moderator and technical blogger. I occasionally like to rant about subjects I should probably learn more about but I usually mean well.

Stay updated: Subscribe by RSS or Subscribe by Email.