dpkg
führt permanent Buch über alle Pakete auf einem Debian-System. Es
merkt sich in seiner Paketstatusdatenbank den Zustand jedes einzelnen
deb
-Pakets, welches es jemals in den Fingern hatte (siehe dazu auch
Abschnitt 8.4, „Paketstatus erfragen“ und
Abschnitt 8.5, „Liste der installierten Pakete anzeigen und deuten“). Die
Paketstatusdatenbank befindet sich in der Datei
/var/lib/dpkg/status
.
Daraus ersehen Sie ganz eindeutig, ob ein Paket schon einmal installiert
war, ob alle notwendigen Schritte vollständig und fehlerfrei abgelaufen
sind, ob das Paket auf hold
gesetzt wurde, ob es wieder entfernt wurde
und ob bspw. noch Reste aus dem Paket auf ihrem System verblieben sind.
Zu letzterem zählen z.B. die Konfigurationsdateien eines Pakets.
Die Einträge in der Paketstatusdatenbank sind 7-Bit-Werte, d.h. das
achte Bit ist nicht gesetzt. Mittlerweile ist dpkg
recht robust gegen
unbekannte Felder, auch wenn diese 8-Bit-Werte enthalten. Trotzdem
funktioniert vieles nicht mehr, wenn die Paketstatusdatenbank außerhalb
des Formates gemäß der Spezifikation nach RFC 822 vorliegt [RFC822].
Die Ursache für dieses gedrehte Bit kann sowohl ein Hardware-Crash sein,
während dpkg
werkelte, als auch ein Bit-Dreher auf dem Speichermedium
selbst. Das nachfolgende Beispiel demonstriert das anhand des Eintrags
zum Paket geekcode. In Zeile 10 liegt ein solcher Bitfehler vor – das
achte Bit für den Doppelpunkt :
ist hier gesetzt.
Bit-Dreher in der Datei /var/lib/dpkg/status
für das Paket geekcode (Ausschnitt).
Package: geekcode Status: install ok installed Priority: optional Section: games Installed-Size: 166 Maintainer: Eric Dorland <eric@debian.org> Architecture: amd64 Multi-Arch: foreign Version: 1.7.3-6 Depends° libc6 (>= 2.7) Description: Program for generating geekcode This is a program for generating the geekcode. See http://www.geekcode.com for more info and for discovering if you need the geekcode. Homepage: http://sourceforge.net/projects/geekcode/
Verarbeitet dpkg
diese Daten, kann es mit diesem Wert nichts anfangen
und bringt seine Verärgerung darüber mit einer deutlichen Fehlermeldung
zum Ausdruck. Dieser Fall ist noch vergleichsweise leicht zu reparieren,
indem Sie das ISO-Latin-1-Zeichen º
mit Hilfe ihres Texteditors wieder
durch einen Doppelpunkt ersetzen. Daraufhin ist dpkg
wieder glücklich.
dpkg
bricht nach einem Bit-Dreher in der Statusdatenbank ab.
# dpkg --configure --pending dpkg: error: parsing file '/var/lib/dpkg/status' near line 9 package 'geekcode': field name `Dependsº' must be followed by colon
Anspruchsvoller wird es jedoch bspw. dann, wenn mehr als nur ein einzelnes Bit oder Byte kaputt ging, plötzlich ganze Blöcke fehlen, oder sich diese nach einer Reparatur des Dateisystems in ganz anderen Formaten in dieser Datei wiederfinden. Dann hilft meist nur noch ein Wiederherstellen der Paketstatusdatenbank aus ihrem Backup.
Zum Glück gibt es auf einem Debian-System mehrere Backups der
Paketstatusdatenbank. Ging die Datei erst gerade eben kaputt, so ist die
Chance sehr hoch, dass die vorhergehende Sicherheitskopie namens
/var/lib/dpkg/status-old
noch intakt ist. Dieses Backup
entspricht dem Zustand der Paketstatusdatenbank vor der letzten
Änderung und hinkt somit nur um eine einzige Aktion hinterher. Kopieren
Sie diese zurück nach /var/lib/dpkg/status
, so fehlt dpkg
nur das Wissen über die letzte Installation oder Deinstallation eines
Pakets. Führen Sie diese letzte Aktion erneut durch, ist alles gerettet.
Ist hingegen auch /var/lib/dpkg/status-old
defekt, so gibt es
unter /var/backups/dpkg.status.*
tlw. komprimierte
Schnappschüsse der Paketstatusdatenbank. Diese beziehen sich auf die
letzten sieben Tage, an denen ihr Rechnersystem eingeschaltet war.
Ersetzen Sie die aktuelle Paketstatusdatenbank durch eine ältere
Version, so weiß dpkg
nichts mehr von sämtlichen Aktionen, die Sie
seitdem durchgeführt haben. Insbesondere denkt es, ein Paket sei noch
installiert, wenn es seit dem Backup der Datei deinstalliert wurde. In
diesem Fall führen Sie die Entfernung des entsprechenden Pakets nochmals
durch. Schlägt diese Aktion fehl, weil die dazu erwarteten Dateien
bereits nicht mehr da sind, so kann es helfen, das entsprechende Paket
mittels dpkg -i
vorher nochmals zu installieren, um wieder einen
konsistenten Zustand zu erreichen.
Auch APT und aptitude
führen eigene Archive über ihre Aktionen, zu
denen ebenfalls unter /var/backups/
tägliche Schnappschüsse
existieren. Allerdings ist ein Verlust dieser Statusdatenbanken weniger
kritisch, da die meisten Informationen darin durch ein apt-get update
bzw. aptitude update
schnell wiederherstellbar sind. Grundlage dafür
sind jedoch die Daten aus der Paketstatusdatenbank von dpkg
.
Das einzige, was auf diese Art und Weise nicht wiederhergestellt werden
kann, sind APT- und aptitude
-spezifische Informationen. Dazu zählen
bspw. die Markierungen automatisch installiert sowie die Vormerkungen
und User-Tags von aptitude
(siehe Kapitel 11, Mit aptitude
Vormerkungen machen).