
Ich habe versehentlich ausgeführt apt install '*'
. Obwohl aufgrund von Konflikten (z. B. mehrere Versionen des Editors) nichts installiert wurde vim
, haben alle installierten Pakete ihre „automatische“ Eigenschaft verloren, was bedeutet, dass ich die automatische Abhängigkeitsprüfung von APT nicht mehr nutzen kann. Das heißt, wenn ich entferne vim
, fordert mich apt nicht mehr dazu auf, zu entfernen vim-runtime
. Ich verwende eine abgespeckte Version von Advanced Packaging Tool, daher apt-mark
ist es nicht verfügbar. Wie kann ich die automatic
Eigenschaft für diejenigen wiederherstellen, die von einem anderen abhängig sind?
Hinweis: Ich habe apt
, apt-get
, apt-cache
, apt-config
und apt-key
verfügbar.
Antwort1
Unter Debian und Derivaten werden die Informationen zur manuellen vs. automatischen Installation in gespeichert /var/lib/apt/extended_states
. Es gibt keine automatischen Backups und keine Protokolle. Wenn Sie ein Backup dieser Datei haben, stellen Sie es wieder her.
Wenn Sie kein Backup haben, erstellen Sie zunächst eines für den Fall, dass Sie es nachholen. Ändern Sie dann für jedes Paket die Zeile in , Auto-Installed: 0
um Auto-Installed: 1
das Paket als manuell installiert zu kennzeichnen.
APT selbst verfolgt die Abhängigkeiten installierter Pakete nicht, das erledigt dpkg. Die Informationen sind /var/lib/dpkg/status
bei Debian vorhanden. Aptitude hat eine erweiterte Suchfunktion, die Abhängigkeiten verarbeiten kann, aber nicht apt. Sie können eine Ad-hoc-Analyse durchführen /var/lib/dpkg/status
. Das folgende Skript (minimal getestet) generiert eine Liste von Paketen, von denen einige installierte Pakete abhängen:
</var/lib/dpkg/status awk '
/^Package:/ {package=$2}
/^Status:/ && $4 != "installed" {package=""}
/^(Depends|Pre-Depends|Recommends|Suggests):/ && package != "" {
sub(/^[^:]*: */, "");
gsub(/ (\([^()]*\))/, "");
split($0, dependencies, /[|, ]+/);
for (d in dependencies) print dependencies[d]}
' | sort -u >dependencies.txt
Überprüfen Sie diese Liste und entfernen Sie eventuell einige Zeilen, bei denen es sich um Pakete handelt, die Abhängigkeiten darstellen, die Sie aber trotzdem behalten möchten. Verwenden Sie dann Folgendes zum Optimieren /var/lib/apt/extended_states
:
</var/lib/apt/extended_states awk '
BEGIN {
while (getline <"dependencies.txt") auto[$0]=1;
RS="";
}
$2 in auto {sub(/\nAuto-Installed: 0/, "\nAuto-Installed: 1")}
{print $0 "\n"}
' >extended_states.new
Überprüfen Sie die Ausgabedatei und verschieben Sie sie an die richtige Stelle, wenn Sie zufrieden sind.