[vox-tech] Recovering Debian without /var/lib/dpkg...

Karsten M. Self vox-tech@lists.lugod.org
Wed, 22 Jan 2003 03:46:51 +0000


on Tue, Jan 21, 2003 at 11:30:28AM -0800, R. Douglas Barbieri (doug@dooglio.net) wrote:
> Here is a good article about recovering a Debian system without having a
> backup of /var/lib/dpkg...
> 
> http://www.linuxworld.com/2003/0113.petreley.html

Funny, I walked someone through that on irc.debian.org:#debian last
week.  This can be somewhat simplified from Nick's procedure.  Rather
than manually re-selecting packages in dselect, you would take advantage
of the fact that Debian policy requires all packages to create an entry
in /usr/share/doc, with the name of the package.

Procedure (in handy shell-script format).  Note that I *haven't* tried
this (suggestion:  someone with a faster box than I should try
installing Debian under UML and self-inflicting damage, then recovering,
and telling me what I got wrong).

(Aside to Nick:  this expands somewhat on my prior email.)


    #!/bin/sh
    export PATH=/usr/sbin:/usr/bin:/sbin:/bin

    # Let's be verbose....
    set -v

    # Create /var directory tree stubs
    mkdir /var/cache/apt/archives
    mkdir /var/cache/debconf
    mkdir /var/log
    mkdir -p /var/lib/dpkg/{info,parts,alternatives,methods,updates}

    # Create a rudimentary status file
    cat <<-EOF>/var/lib/dpkg/status
    Package: libc6
    Status: install ok installed
    Version: 2.3.1-9
    EOF

    # Update package cache
    apt-get update
    apt-get dist-upgrade

    # Register as installed crucial packages.
    dpkg --clear-avail
    apt-get update
    apt-get dist-upgrade
    cd /var/cache/apt/archives
    dpkg -i libncurses*
    dpkg -i perl-base*
    dpkg -i libstdc++*
    dpkg -i dselect*
    dpkg -i dpkg*

    # Reinstall libc to register it.
    apt-get install --reinstall libc6                                                             
    # Reinstall base packages.
    apt-get dist-upgrade

    # Generate list of installed packages to Re-register previously
    # installed packages as installed, using /usr/share/doc as a
    # fallback package registry.
    dpkg --get-selections $(
        ls /usr/share/doc | grep -v [A-Z] | awk '{print $1 " install"}'
    )

    # Re-register everything.
    apt-get dist-upgrade


Peace.

-- 
Karsten M. Self <kmself@ix.netcom.com>        http://kmself.home.netcom.com/
 What Part of "Gestalt" don't you understand?
   Geek for hire:  http://kmself.home.netcom.com/resume.html