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
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 wiper.sh to TRIM disks. wiper.sh is part of the open source project hdparm and can be obtained from the hdparm web page. https://sourceforge.net/projects/hdparm/ Homepage: http://disktrim.sourceforge.net
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.