Warum benötigen Paketmanager Sperrdateien?

10

dpkgverwendet bei Verwendung eine Sperrdatei ( /var/lib/dpkg/lock).

  • Warum werden diese Sperrdateien benötigt?
  • Warum sind mehrere Instanzen nicht möglich?
acisoal
quelle
Dpkg führt Installationen durch. Dies ist ein Sicherheitsmodus, um Konflikte zu vermeiden. Nur eine Installation gleichzeitig.
Albfan

Antworten:

15

Dies ist kein dpkgspezifisches Problem (wie der Titel meiner Bearbeitung andeutet). Dies ist vielmehr etwas, was jeder Paketmanager (von dem ich weiß) tut; und das aus gutem Grund. Ich verstehe jedoch, warum es verwirrend sein könnte.

Paketmanager verlassen sich auf Datenbanken, um die Informationen für installierte Pakete zu verfolgen. Wenn mehrere Benutzer gleichzeitig versuchen, in eine Datenbank zu schreiben, besteht eine hohe Wahrscheinlichkeit, dass Daten beschädigt werden (was das System wirklich beeinträchtigen würde).

Infolgedessen verlassen sich viele (alle?) Paketmanager auf eine Sperrdatei, um zu signalisieren, dass in die Datenbank geschrieben wird. Daher sollte dies einem anderen Client nicht gestattet sein.


Beachten Sie, dass intelligente Paketmanager möglicherweise feststellen können, wann eine Anforderung schreibgeschützt ist, und die Datenbank möglicherweise nicht sperren müssen. Als Ergebnis; Es ist möglich, dass einige Aktionen gleichzeitig ausgeführt werden können, wo andere nicht ausgeführt werden.

HalosGhost
quelle
2
Ich denke, Portage und Paludis (Gentoos Paketmanager) können parallel arbeiten. Wenn überhaupt Sperren verwendet werden, geschieht dies nur kurz, wenn Pakete zur installierten Liste hinzugefügt werden.
Vality
Ich werde einen Blick auf die Paketmanager von Gentoo werfen und meine Antwort in Kürze aktualisieren.
HalosGhost
Ich kann hierzu keine aktuellen Informationen finden. Aber zumindest für eine Weile verwendeten sowohl Paludis als auch Portage Sperrdateien. Beachten Sie, dass dies eine so verbreitete Strategie ist, da dies eine der wenigen sicheren Möglichkeiten ist, um Datenkorruption zu verhindern. Ich wäre überrascht, wenn Portage oder Paludis eine solche Methode noch nicht anwenden würden.
HalosGhost
1
Ah, es scheint, dass Sie richtig sind, aber der Umfang dieser Sperren ist unterschiedlich. Sie werden nur verwendet, wenn der Paketindex aktualisiert wird (der Verlust verfügbarer Pakete). Die Installation von Paketen ist schreibgeschützt und ruft die Sperre daher nicht auf. Ja, ich verstehe, was Sie meinen. Es macht Sinn, dass die Strategie so verbreitet ist.
Vality
9

Die Sperrdatei wird verwendet, um die parallele Ausführung mehrerer Instanzen zu verhindern .

Warum ist das für einen Paketmanager wichtig?

Ein Paketmanager - aus einer übergeordneten Sicht - ist ein Programm, das komplexe Änderungen auf die Festplatte anwendet .

Die Änderungen können nicht in einem Schritt ("atomar") vorgenommen werden, daher gibt es mehrere Schritte. Viele der Schritte hängen vom Ergebnis früherer Schritte ab.

Daher muss der Paketmanager entweder die Festplatte analysieren, bevor er jeden Schritt ausführt, oder sie einfach einmal analysieren und die Änderungen verfolgen, die sie selbst anwendet. Die erste Option ist extrem langsam. Die zweite erfordert, dass keine andere Instanz Änderungen vornimmt.

Es gibt viele andere Probleme, die auftreten können.

Es ist nicht unmöglich , einen Paketmanager zu implementieren, der parallel arbeiten kann, aber es ist zu kompliziert, um es wert zu sein . Sie können sich nicht vorstellen, wie kompliziert. Ja wirklich.

Volker Siegel
quelle
2

dkpg(und rpmdie meisten anderen traditionellen Paketmanager) der Arbeit von Paketen in einem globalen Raum zu installieren, was bedeutet , dass Pakete miteinander in Konflikt geraten können (zB Aund Bkönnen nicht gleichzeitig installiert werden, da sie installieren beide /usr/lib/libfoo.so). Paketmanager müssen solche Konflikte erkennen und solche Installationsanforderungen ablehnen, um das System in einem konsistenten Zustand zu halten. Es wäre sehr kompliziert und fehleranfällig, wenn mehrere Instanzen des Paketmanagers gleichzeitig ausgeführt würden.

Konfliktfreie Paketmanager (z. B. http://0install.net ) können und ermöglichen die parallele Installation mehrerer Pakete¹ und benötigen keine Sperrdateien ( A/libfoo.sound B/libfoo.sowerden in verschiedenen Verzeichnissen gespeichert ).


1 Parallel sowohl im Sinne der gleichzeitigen Anwesenheit und Verfügbarkeit auf dem System als auch im Sinne des gleichzeitigen Herunterladens und Hinzufügens zum System.

Thomas Leonard
quelle