Wie erstelle ich /var/lib/dpkg/status neu?

Wie erstelle ich /var/lib/dpkg/status neu?

Ich habe einige Dateien gelöscht /var/lib/dpkg/, und zwar:

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*

Ich verstehe, dass Debian diese Dateien verwendet, um Informationen über installierte Pakete zu speichern. Wenn ich das jetzt tue apt-get update, erhalte ich folgenden Fehler:

Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open 
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.

So wie ich das verstehe,FHS, die darin befindlichen Dateien /varsollten nicht systemkritisch sein. Vielmehr sollten es temporäre Dateien, Logs, Caches und ähnliches sein.

Gibt es daher eine Möglichkeit, die gelöschten Dateien wiederherzustellen?

Antwort1

Wenn Sie sich dieZweck von /var gemäß Filesystem Hierarchy Standard, es sagt:

/varenthält Dateien mit variablen Daten. Dazu gehören Spool-Verzeichnisse und -Dateien, Verwaltungs- und Protokolldaten sowie flüchtige und temporäre Dateien.

Beachten Sie, dass „vorübergehende und temporäre“ Dateien nureinsder darin enthaltenen Dinge. Es enthält auch „Spool-Verzeichnisse und -Dateien“ sowie „Verwaltungs- und Protokolldaten“. Sie haben kritische „Verwaltungsdaten“ gelöscht.

Weiter wird erklärt, warum /vares Folgendes gibt:

/varwird hier angegeben, um das Mounten /usrnur lesend zu ermöglichen. Alles, was einmal dort hineinging und /usrwährend des Systembetriebs (im Gegensatz zur Installation und Softwarewartung) beschrieben wird, muss in stehen /var.

Das ist das Entscheidende an /var: Die darin enthaltenen Daten ändern sich, im Gegensatz zu /usr(das sich nur ändert, wenn Sie Software hinzufügen/entfernen/aktualisieren).

In weiteren Abschnitten werden die verschiedenen Unterverzeichnisse von erläutert /var. Beispielsweise /var/libenthält (wo sich die von Ihnen gelöschten Dateien befanden) „Statusinformationen zu einer Anwendung oder dem System“, definiert als „Daten, die von Programmen während der Ausführung geändert werden und die sich auf einen bestimmten Host beziehen“.

DuWirklichSie sollten keine Dateien löschen, ohne zu wissen, wofür die jeweilige Datei gedacht ist. Wenn Sie keine Sicherungskopie der gelöschten Dateien haben, bleibt Ihnen meiner Meinung nach nur noch die Möglichkeit, eine Sicherungskopie von usw. zu erstellen /homeund /etcdie Installation erneut durchzuführen. Bis Sie dies tun, können Sie dpkg(und APT usw.) nicht verwenden. Ansonsten sollte das System weiterhin funktionieren.

Antwort2

Dateien in /varsind sehr systemkritisch. Beispielsweise enthält /var/mailoder /var/spool/maildie E-Mail-Adresse des Benutzers. Sie würden das genauso wenig löschen, wie Sie das Postfach Ihres Nachbarn anzünden würden. Nur Dateien in bestimmten Unterverzeichnissen von /varenthalten Dateien, die mehr oder weniger flüchtig sind: Protokolldateien in /var/log, Caches, die normalerweise in neu erstellt werden können /var/cache, temporäre Dateien (die Sie nicht löschen sollten, während sie verwendet werden!) in /var/tmp.

Daten in /var/libkönnen ziemlich kritisch sein. MySQL ist beispielsweise normalerweise so konfiguriert, dass seine Datenbanken /var/lib/mysqlstandardmäßig in gespeichert werden: Wenn Sie das löschen, werden Ihre Datenbanken gelöscht. Dpkg speichert seine eigenen Datenbanken /var/libebenfalls unter; /var/lib/dpkg/statusist ein Beispiel.

/var/lib/dpkg/statusenthält Informationen zu installierten Paketen. Wenn Sie diese gelöscht haben, sollten Sie sie aus einer Sicherungskopie wiederherstellen. Wenn Ihre Sicherungskopie nicht ganz auf dem neuesten Stand ist, überprüfen Sie die Protokolle der letzten Paketmanipulationen unter /var/log/aptund in /var/log/dpkg.log. Sie müssen diese Datei erstellen, bevor dpkges funktioniert.

/var/lib/dpkg/availablewird aus aus dem Internet heruntergeladenen Daten erstellt. apt-get updatesollte es neu erstellen.

/var/lib/dpkg/infoenthält Dateien, die mit Debian-Paketen geliefert werden. Sie können diese Dateien einfach wiederherstellen, indem Sie die Pakete neu installieren. Natürlich benötigen Sie dazu eine Liste der installierten Pakete. Wenn Sie wiederhergestellt haben /var/lib/dpkg/status, können Sie die Paketliste von dort extrahieren.

apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')

Wenn Sie verloren haben /var/lib/dpkg/status, können Sie es möglicherweise neu erstellen, indem Sie eine leere Datei erstellen und dann apt-get install --reinstalldie Paketliste ausführen. Ein Ort, an dem die Paketliste auch gespeichert ist, ist /var/lib/apt/extended_states, zumindest wenn Sie APT immer nur zum Installieren von Paketen verwendet haben (und nicht dpkgdirekt) – verwenden Sie diese Datei anstelle von /var/lib/dpkg/statusint im obigen Befehl. Wenn Sie das auch gelöscht haben, können Sie mit eine ungefähre Paketliste neu erstellen $(cd /usr/share/doc && ls), da die meisten Pakete einen Eintrag in erstellen /usr/share/doc. Es gibt wahrscheinlich ein paar Ausnahmen.

Bitten Sie nicht um Hilfe bei der Paketverwaltung auf diesem System. Die Wiederherstellung nach dem Löschen systemkritischer Dateien ist keine exakte Wissenschaft. Wenn Sie keine Wiederherstellung aus Backups durchführen können, sollten Sie so schnell wie möglich ein neues, sauberes System installieren.

Antwort3

Sie können nicht „neu erstellen“, /var/lib/dpkg/statusindem Sie einfach einen Befehl ausführen und die Datei wie von Zauberhand erscheint. Nein. Sie müssen eine Sicherungskopie der Datei erstellen und lernen, niemals Dinge aus dem /var/libVerzeichnis zu löschen:

sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status

Dadurch erhalten Sie den Paketstatus vom Vortag. Beten Sie, dass nichts anderes kaputt gegangen ist.

Antwort4

Wenn jemand "/var/lib/dpkg" zerstört:

sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch

sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.

verwandte Informationen