Wie kann ich die Installation von apt-get sicher abbrechen?

44

Ich habe einen apt-get installProzess, der bei dem processing triggers for python-supportSchritt hoffnungslos eingeklemmt zu sein scheint .

Ich neige dazu kill, aber in der Vergangenheit hat es mir schon viel Leid bereitet, killeinen apt-get installProzess einfach so zu machen . (IIRC-sortierte Sperrdateien bleiben zurück usw.)

Gibt es einen sichereren Weg, um diesen Prozess zu stoppen?

kjo
quelle

Antworten:

44

Prozesse beenden

Im Allgemeinen gibt es für das Beenden eines Prozesses keinen sichereren Weg, einen Prozess zu beenden als mit einem regulären Kill (SIGTERM). Wenn es sich um einen interaktiven Vorgang handelt, können Sie ihn in der Regel noch sicherer stoppen, indem Sie ein SIGINT-Signal senden, das in der Regel durch Drücken von Ctrl+ gesendet wird C. Dieses Signal wird vom Prozess selbst abgefangen und kann es abhören - und normalerweise elegant stoppen. ( Danke Eliah )

DPKG-Datenbank

In Bezug auf die Paketverwaltung handelt es sich um eine Art Sonderfall. Die DPKG-Datenbank, die die APT-Befehle unter Wasser verwenden, kann immer erkennen, ob eine Operation noch nicht abgeschlossen ist. Jedes Paket hat einen aktuellen Status, der markiert ist, sowie einen aktuellen Status, z. B. entpackt, konfiguriert usw. Durch das Beenden des APT-Frontends befindet sich die Datenbank in einem fehlerhaften, aber bekannten Status. Die Sperrdateien werden erst freigegeben, wenn alles wieder sauber ist. Dies sollte behoben werden, bis neue Vorgänge möglich sind.

Die Lösung besteht darin, einen Prozess auszulösen, um alle Pakete in den konfigurierten Zustand zu versetzen. Wenn Sie einen apt-getVorgang unterbrochen haben, können Sie ihn praktisch später mit beenden

sudo dpkg --configure -a

Es weiß, wie es aus dem defekten Zustand in einen vollständig konfigurierten Zustand zurückkehrt und in diesem Sinne einfach dort fortfährt, wo es unterbrochen wurde. Die Sperrdateien werden dort belassen, bis Sie damit fertig sind, und das hat einen Grund - um neue Vorgänge mit der DPKG-Datenbank in einem unsauberen Zustand zu verhindern.

Über Sigkill (9)

Das Senden eines SIGKILL (Dezimaldarstellung 9) ist sehr unsicher. Dieses Signal wird vom Prozess nicht abgefangen, aber der gesamte Prozess wird vom Betriebssystem (Kernel) bereinigt, unabhängig davon, ob es dem Prozess gefällt oder nicht. Der Status der Dateien im Dateisystem kann beschädigt bleiben. Senden Sie diese Signale niemals, es sei denn, Sie hören andere, elegantere Signale nicht mehr.

gertvdijk
quelle
2
Wenn eine Anwendung eine Möglichkeit zum Beenden bietet, ist dies in der Regel noch sicherer als SIGTERM. Beispielsweise speichern die meisten (wenn nicht alle) Texteditoren, Textverarbeitungsprogramme, Grafikprogramme, Webbrowser und andere textbasierte oder grafische Apps, in denen ein Benutzer wahrscheinlich Inhalte erstellt, die nicht verloren gehen sollten, diese nicht automatisch vor dem Beenden, wenn sie SIGTERM erhalten. Beachten Sie auch, dass SIGINT manchmal sicherer ist als SIGTERM (sollte aber im Allgemeinen nicht gesendet werden, es sei denn, dass ausdrücklich das gleiche Ergebnis wie Strg + C gewünscht wird).
Eliah Kagan
16

Wenn ich mit apt-get auf einen Fehler stoße, tue ich Folgendes (als root, dh sudovor allen Befehlen):

  1. Beende den Prozess namens apt-get:

    killall -9 apt-get
  2. Dpkg neu konfigurieren:

    dpkg --configure -a
  3. Aktualisiere apt-get:

    apt-get update
  4. Aktualisierungspakete, einschließlich derer, die nicht ordnungsgemäß installiert wurden:

    Apt-Get-Upgrade

Das habe ich irgendwo gelernt, aber ich kann mich leider nicht genau erinnern, wo.

Carnendil
quelle
6
Bitte senden Sie niemals ein Signal 9 (SIGKILL), es sei denn, Sie haben einen sehr guten Grund, dies zu tun. Siehe meine aktualisierte Antwort.
Gertvdijk
3
sudo dpkg -r <package name>

In meinem Fall hatte ich Probleme mit Java 8 auf Ubuntu 12.04, also ...

sudo dpkg -r oracle-java8-installer
Funmungus
quelle
1

Linux und andere Unix-Systeme sind von der Kommandozeile aus sehr mächtig, aber nach dem Start eines Prozesses sehr nachtragend. Wenn Sie einen Prozess mit dem Kill-Signal senden, wird der laufende Prozess mit Sicherheit abgebrochen. Beachten Sie jedoch, dass Sie eine Datenbank in einem instabilen Zustand belassen. Der letzte Datensatz wird möglicherweise nicht ordnungsgemäß geschlossen, sodass Sie möglicherweise eine Datenbank reparieren müssen. Nicht nur bei apt, sondern bei jeder Anwendung.

Versuchen Sie immer, die Anwendung auf normale Weise zu beenden, und beenden Sie nur Prozesse, bei denen es sich um nicht verfügbare Anwendungen handelt.

Steve Sauls
quelle
0

Hier ist, wie ich es mache, Ctrl+ CAber bedenke, dass es sicher ist, solange sich apt-get in der Download-Phase befindet oder den Cache aktualisiert. Ansonsten kann ich mir keinen sichereren Weg vorstellen. Lass es einfach zu Ende gehen und mach die Änderungen rückgängig, indem du es deinstallierst oder irgendwie herunterrüstest. Die heruntergeladenen Dateien können mit bereinigt werdensudo apt-get autoclean

Stefano Mtangoo
quelle