Wo speichert Debian die Liste der installierten Pakete?

Wo speichert Debian die Liste der installierten Pakete?

Ich muss eine Liste der Pakete finden, die auf einem Debian-Server (Armbian) installiert waren, bevor dieser abgestürzt ist. Da er offline ist, kann ich weder aptoder dpkg(oder einen anderen Befehl) verwenden. Ich muss wissenwelche Datei(en)enthalten die Liste (auch wenn sie binär sind). Ich habe versucht zu suchen, aber überall steht nur, dass die oben genannten Befehle ausgeführt werden sollen, was keine Option ist.

Antwort1

Wie kann man „dpkg --get-selections“ aus einem Backup von /etc und /var approximieren?geht auf Ihr zugrunde liegendes Anliegen ein.

Die Liste der installierten Pakete ist in gespeichert /var/lib/dpkg/status. Suchen Sie nach Status: install ok installedZeilen – diese zeigen an, dass das Paket korrekt installiert ist.

Der folgende AWK-Aufruf extrahiert die installierten Paketnamen aus einer statusDatei:

awk '/^Package:/ { package = $2 }
     /^Status: install ok installed/ { print package }' /path/to/status

Wenn das System mehrere Architekturen unterstützt, müssen Sie dies ebenfalls im Auge behalten:

awk '/^Package:/ { p = $2; i = 0 }
     /^Status: install ok installed/ { i = 1 }
     i && /^Architecture: all/ { print p; next }
     i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status

Eine weitere interessante Datei ist /var/lib/apt/extended_statesdie, die das Flag „Automatische Installation“ für installierte Pakete aufzeichnet. Sie können die Flags wiederherstellen, indem Sie etwas wie Folgendes ausführen:

awk '/^Package:/ { p = $2 }
     /^Architecture/ { a = $2 }
     /^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto

Sie können beide Dateien kombinieren, um die manuell installierten Pakete aufzulisten und sich bei der Installation der automatisch installierten Pakete auf die Abhängigkeitsverwaltung verlassen (obwohl dies nicht unbedingt dazu führt, dass derselbe Satz Pakete installiert wird):

awk 'FNR == NR && /^Package:/ { p = $2 }
     /^Status: install ok installed/ { i = 1 }
     FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
     FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
     FNR != NR && /^Package:/ { p = $2 }
     FNR != NR && /^Architecture:/ { a = $2 }
     /^Auto-Installed: 1/ { delete ps[p ":" a] }
     END { for (p in ps) print p }' /path/to/status /path/to/extended_states

Siehe den Abschnitt „DATEIEN“ inman dpkg:

/var/lib/dpkg/status
Status verfügbarer Pakete. Diese Datei enthält Informationen darüber, ob ein Paket zum Entfernen markiert ist oder nicht, ob es installiert ist oder nicht usw.

verwandte Informationen