dpkg
verwendet bei Verwendung eine Sperrdatei ( /var/lib/dpkg/lock
).
- Warum werden diese Sperrdateien benötigt?
- Warum sind mehrere Instanzen nicht möglich?
dpkg
verwendet bei Verwendung eine Sperrdatei ( /var/lib/dpkg/lock
).
Antworten:
Dies ist kein dpkg
spezifisches 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.
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.
dkpg
(und rpm
die 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 A
und B
kö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.so
und B/libfoo.so
werden 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.