Dlaczego menedżerowie pakietów potrzebują plików blokujących?


10

dpkgużywa pliku blokady ( /var/lib/dpkg/lock), gdy jest używany.

  • Dlaczego te pliki blokujące są potrzebne?
  • Dlaczego wiele wystąpień nie jest możliwych?

Dpkg wykonuje instalacje. Jest to tryb bezpieczeństwa, aby uniknąć konfliktów. Tylko jedna instalacja w tym samym czasie.
albfan

Odpowiedzi:


15

To nie jest dpkgspecyficzny problem (jak sugeruje tytuł mojej edycji). Raczej jest to coś, co robi każdy menedżer pakietów (o czym wiem); i nie bez powodu. Rozumiem jednak, dlaczego może to być mylące.

Menedżerowie pakietów polegają na bazach danych w celu śledzenia informacji o zainstalowanych pakietach. Jeśli wielu użytkowników próbuje jednocześnie zapisywać dane w bazie danych, ma dużą szansę na uszkodzenie danych (co naprawdę doprowadziłoby do awarii systemu).

W rezultacie wielu (wszystkich?) Menedżerów pakietów polega na pliku blokującym, aby zasygnalizować, że baza danych jest zapisywana, więc inny klient nie powinien mieć takiej możliwości.


Należy pamiętać, że inteligentni menedżerowie pakietów mogą być w stanie określić, kiedy żądanie jest tylko do odczytu i może nie wymagać blokowania bazy danych. W rezultacie; możliwe jest, że niektóre działania będą mogły być uruchamiane jednocześnie tam, gdzie inne nie będą.


2
Myślę, że portage i paludis (menadżerowie pakietów Gentoo) są w stanie pracować równolegle, jeśli w ogóle używa blokad, robi to tylko krótko podczas dodawania pakietów do zainstalowanej listy.
Rzeczywistość

Przyjrzę się menedżerom pakietów Gentoo i wkrótce zaktualizuję swoją odpowiedź.
HalosGhost

Nie mogę znaleźć aktualnych informacji na ten temat; ale przynajmniej przez jakiś czas zarówno paludis, jak i portage korzystały z plików blokujących. Uwaga: jest to tak powszechna strategia, ponieważ jest to jeden z bezpiecznych sposobów zapobiegania uszkodzeniu danych; Byłbym zaskoczony, gdyby portage lub paludis nadal nie stosowali takiej metody.
HalosGhost

1
Ach, wydaje się, że masz rację, jednak zakres tych blokad jest inny, są one używane tylko podczas aktualizacji indeksu pakietów (utrata dostępnych pakietów), w rzeczywistości instalowanie pakietów jest operacjami tylko do odczytu i dlatego nie wywołuje blokady. Jednak tak, rozumiem, co masz na myśli, ma to sens, że strategia jest tak powszechna.
Rzeczywistość

9

Plik blokady służy do zapobiegania równoległememu wykonywaniu wielu instancji.

Dlaczego jest to ważne dla menedżerów pakietów?

Menedżer pakietów - z wysokiego poziomu - to program, który wprowadza złożone zmiany na dysku twardym.

Zmian nie można dokonać w jednym kroku („atomowym”), więc istnieje wiele kroków; wiele kroków zależy od wyniku wcześniejszych kroków.

Dlatego menedżer pakietów musi albo przeanalizować dysk twardy przed wykonaniem każdego kroku, albo po prostu przeanalizować go raz i śledzić zmiany, które sam stosuje. Pierwsza opcja jest bardzo wolna. Drugi wymaga, aby żadna inna instancja nie wprowadzała zmian.

Istnieje wiele innych problemów, które mogą się pojawić.

Nie jest niemożliwe wdrożenie menedżera pakietów, który może działać równolegle, ale jest to zbyt skomplikowane, aby było tego warte . Na razie nie możesz sobie wyobrazić, jak skomplikowane. Naprawdę.


2

dkpg(i rpmwiększość innych tradycyjnych menedżerów pakietów) działa poprzez instalowanie pakietów w przestrzeni globalnej, co oznacza, że ​​pakiety mogą ze sobą kolidować (np. Ai Bnie mogą być instalowane w tym samym czasie, ponieważ oba instalują /usr/lib/libfoo.so). Menedżerowie pakietów muszą wykrywać takie konflikty i odrzucać takie żądania instalacji, aby utrzymać system w spójnym stanie. Posiadanie wielu instancji menedżera pakietów działających w tym samym czasie byłoby bardzo skomplikowane i podatne na błędy.

Bezkonfliktowi menedżerowie pakietów (np. Http://0install.net ) mogą i pozwalają na równoległe instalowanie wielu pakietów¹ i nie potrzebują plików blokujących ( A/libfoo.soi B/libfoo.sobędą przechodzić do różnych katalogów).


1 Równolegle zarówno pod względem obecności i dostępności w systemie w tym samym czasie, jak i jednoczesnego pobierania i dodawania do systemu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.