Zwergenfestung startet während des Upgrades

322

Wenn ich apt-get upgradeauf meinem Ubuntu 17.04-Rechner arbeite, startet er manchmal die Zwergenfestung von selbst.

Es ist schon mindestens zweimal passiert, also war es wahrscheinlich nicht nur eine Art einmalige Sache. Außerdem apt-get upgradeschien die Ausführung von unterbrochen zu sein, bis ich die Zwergenfestung manuell verließ, sodass es höchstwahrscheinlich nicht auf etwas anderes zurückzuführen war, das in dieser Zeit lief.

Die Konsole sagte damals, Unpacking xxx.wo xxxetwas mit mysqlNamen sei. Ich weiß jedoch nicht genau, welches Paket wie heute apt-get upgradeviele mysql-bezogene Pakete aktualisiert hat.

Ich würde gerne wissen, was passiert und wie ich das verhindern kann. Vielen Dank für Ihre Ideen.

Adrijaned
quelle
Sie sagen also, dass jedes Mal, wenn Sie apt-get upgradeim Terminal gelaufen sind, die Spiele beginnen?
@MichaelBay nicht jedes Mal, nur wenn es etwas aktualisiert. Und ich kann nicht testen, ob dies immer der Fall ist, da derzeit keine zu aktualisierenden Pakete vorhanden sind.
Adrijaned
Dieser DF-Hack ist eine lange Lektüre und ich habe es aufgegeben, aber vielleicht wird es Ihnen nützlich sein.
WinEunuuchs2Unix

Antworten:

550

Bei einer so verrückten Frage ist es natürlich unmöglich, das mit Sicherheit zu sagen - aber ich esse meinen Hut, wenn meine erste Vermutung nicht stimmt. :)

Der einzige Weg, wie ich mir vorstellen kann, wie solche Dinge miteinander verbunden werden können, ist folgender: Nachdem Sie Dwarf Fortress installiert (und extrahiert) haben ./df, wollten Sie es ausführen können , anstatt jedes Mal in das Verzeichnis zu gehen und es damit auszuführen überall, wie jeder alte Befehl. Sie hinzugefügt , um die Dwarf Fortress Verzeichnis zu Ihrem $PATH, bevor den Systemverzeichnissen, vielleicht zufällig, vielleicht weil Sie bemerkte es nicht anders funktioniert, und Sie würden stattdessen nur Informationen über die Dateisysteme erhalten.

Die ausführbare Datei von Dwarf Fortress wird benannt df. Dies ist auch der Name eines Systemtools, mit dem der Speicherplatzbedarf Ihrer Dateisysteme angezeigt und eine Kollision verursacht wird. Indem wir es so , dass , wenn Sie schreiben df, Dwarf Fortress beginnt, können Sie das System - Tool beschattet haben, so dass , wenn ein Skript will - sagen wir - wenn Sie zum Entpacken eines Archivs über genügend freien Speicherplatz haben, statt den Aufruf df- das System - Tool - Stattdessen wird die Zwergenfestung gestartet. Und nachdem Sie die Zwergenfestung verlassen haben, wird das arme kleine Drehbuch sehr verwirrt sein, warum es nicht die angeforderten Datenträgernutzungsinformationen erhalten hat.

Wie auch immer, danke für das Lachen, dies muss eines der lustigsten Probleme sein, die ich je bei StackExchange gesehen habe. :)

Aleksi Torhamo
quelle
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Thomas Ward
64

Meine Vermutung ähnelt der von Aleksi , aber ich vermute, dass Sie die Zwergenfestung auf /usr/local/binoder verschoben haben /usr/bin(und hoffentlich nicht /bin).

Versuchen Sie, sudo which dfin Ihrem Terminal zu laufen . Wenn dies nicht der Fall ist /bin/df, verschieben Sie die in der whichAusgabe angegebene Datei in /usr/games/(Sie können das Spiel in Zukunft ausführen, indem Sie ausführen /usr/games/df). Apt sollte danach wieder funktionieren.

======

Versuchen Sie andernfalls in dem Szenario, in dem es sudo which dfheißt /bin/df, auszuführen /bin/df. Wenn dies mit dem Spiel überschrieben wurde, müssen Sie die Spiel-Binärdatei wie oben beschrieben verschieben sudo apt-get install --reinstall coreutils.

Wenn dies fehlschlägt, weil dfes fehlt, müssen Sie möglicherweise drastischere Maßnahmen ergreifen (z. B. ein falsches Skript erstellen, um df vorübergehend zu ersetzen, oder das Paket manuell herunterladen und die df-Binärdatei daraus extrahieren).

maccam94
quelle
7
Es ist ironisch, dass ein Kommentar des Fragestellers zu der akzeptierten Antwort bestätigt, dass der Fragesteller dies mit einem symbolischen Link getan hat, anstatt Änderungen PATHwie in dieser Antwort vorzunehmen.
JdeBP
1
@JdeBP: Nicht wirklich, der Hauptpunkt ist der Namenskonflikt - ich denke, wie das erreicht wurde, ist zweitrangig, auch wenn ich es selbst sage. Ich erwähnte dies auch in den Kommentaren der anderen Antwort, als Antwort auf einen Kommentar, der das Gleiche wie diese Antwort vorschlug, aber ich dachte ursprünglich darüber nach, dies als eine andere Möglichkeit zu erwähnen, bis mir klar wurde, dass das Verschieben / Kopieren der Binärdatei (im Gegensatz zu Symlinking, über das ich nicht nachgedacht habe, hätte aufgrund der Funktionsweise der Zwergenfestung nicht funktioniert. (Das heißt, es ist nur extrahiert, nicht installiert - es würde keine eigenen Datendateien finden, wenn es sich nicht in demselben Verzeichnis befindet)
Aleksi Torhamo
2
Ein besserer Befehl könnte darin bestehen sudo which -a df, alle dfim Pfad gefundenen Befehle anzuzeigen.
Doug Henderson
Warten Sie es ist 2017 und wir nutzen apt-getnoch?
EKons
@AleksiTorhamo Zur Verdeutlichung wird die PATH-Variable, die apt sehen würde, vom sudo-Befehl überschrieben ( /etc/sudoershat eine secure_pathVariable, um Sicherheitsprobleme bei Benutzern zu vermeiden, die ihren PATH ändern). Ich bin damit einverstanden, dass die Erkenntnis, dass die Zwergenfestungs-Binärdatei Vorrang in der PATH-Auflösung hat, die wichtigste Erkenntnis ist.
Maccam94