recovery from "rm -rf /var/lib/dpkg/info" ?

Aaron Haviland orion at parsed.net
Wed Aug 22 20:16:48 BST 2007


Kristian Erik Hermansen wrote, on Aug 22, 2007 at 13:37 EDT:
> Hey guys,
> 
> I did something dumb.  I was playing around with some debs and hacking
> some control files, when I accidentally removed /var/lib/dpkg/info !!!
>  Now, if I even try to do 'aptitude reinstall ~i', I am greeted with
> "Writing extended state information... Error!".  dpkg --list still
> shows all the currently installed packages, but I am unable to
> reinstall.  Does anyone have a good idea on how to recover from
> this???  Ideally, I think it would be easiest to reinstall all the
> packages, since they are all from the repositories and none are
> non-standard.
> 
> Let me just state that I do not want to do any file recovery, even
> though I know quite well how to do that.  This should be able to be
> reversed with some apt/dpkg kung-fu...

Should be able to be reversed quite easily, in fact, except that you'll
need to re-download the debs.

the stuff in /v/l/d/info/ is just control info from the debs, nothing
specific to your system.

here's some psdeudo script (i'm getting ready for work, can't spend time
perfecting it)

for i in $INSTALLED_PACKAGE_LIST (think dpkg --list | grep ^ii); do
   #fetch .deb
   apt-get -d install --reinstall $i
   DEBNAME="/var/cache/apt/archives/$i_*deb"
   dpkg-deb -e $DEBNAME $TMPDIR
   # extracts .control, .md5sums, .post and .pre inst/rm scripts
   
   #dpkg doesn't keep control
   rm $TMPDIR/control
   
   #now we just need the .list
   dpkg-deb --contents $DEBNAME | cut -f2- -d'.' | while read i; do echo "${i%*/}"; done > $TMPDIR/list
   # that bashism wipes the rootdir line, but every package contains it,
   # so put it back. It was in the wrong format before, anyway: "./"
   echo "/." >> $TMPDIR/list
   
   for j in $(cd $TMPDIR && *); do
   	mv $TMPDIR/$j /var/lib/dpkg/info/$i.$j
	# $i.$j = packagename.postinst, for example
   done

   # wipe the fetched deb. save space
   apt-get clean
done


err... something like that. throw in a bunch of echos and test things
first! :)
   
-- 
Aaron Haviland
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : https://lists.ubuntu.com/archives/ubuntu-us-ma/attachments/20070822/ee788742/attachment.pgp 


More information about the Ubuntu-us-ma mailing list