Відповіді:
Це не dpkg
специфічне питання (як підказує назва моєї редакції). Швидше, це те, що робить кожен менеджер пакунків (про що я знаю); і з поважних причин. Хоча я розумію, чому це може бути заплутано.
Менеджери пакетів покладаються на бази даних для відстеження інформації про встановлені пакети. Якщо декілька користувачів одночасно намагаються записати в базу даних, у неї є велика ймовірність пошкодження даних (що справді перетворюється на систему).
Як результат, багато (усі?) Менеджери пакетів покладаються на файл блокування, щоб сигналізувати про те, що в базу даних записується, тому інший клієнт не повинен це робити.
Зауважте, що інтелектуальні менеджери пакетів можуть визначати, коли запит доступно лише для читання, і можливо, не потрібно буде блокувати базу даних. В результаті; можливо, що деякі дії можна буде одночасно виконувати там, де інших не буде.
Файл блокування використовується для запобігання паралельного виконання декількох екземплярів.
Чому це важливо для менеджерів пакетів?
Менеджер пакунків - з виду високого рівня - це програма, яка застосовує складні зміни на жорсткому диску.
Зміни не можна здійснити за один крок («атомний»), тому є кілька кроків; багато кроків залежать від результату попередніх кроків.
Отже, менеджеру пакунків потрібно або проаналізувати жорсткий диск перед виконанням кожного кроку, або просто проаналізувати його один раз і відслідковувати зміни, які він застосовує сам. Перший варіант надзвичайно повільний. Другий вимагає, щоб жоден інший екземпляр не вносив змін.
Є багато інших проблем, які можуть з’явитися.
Це не неможливо реалізувати менеджер пакетів , який може працювати паралельно, але це занадто складно , щоб бути варто . Як і в, ви не можете собі уявити, як складно. Дійсно.
dkpg
(і rpm
більшість інших традиційних менеджерів пакетів) працюють, встановлюючи пакети в глобальний простір, а це означає, що пакети можуть конфліктувати між собою (наприклад, A
і B
не можуть бути встановлені одночасно, оскільки вони обидва встановлюються /usr/lib/libfoo.so
). Менеджери пакунків повинні виявляти подібні конфлікти та відхиляти такі запити встановлення, щоб підтримувати систему в послідовному стані. Наявність декількох примірників запуску менеджера пакунків одночасно було б дуже складним і схильним до помилок.
Безконфліктні менеджери пакунків (наприклад, http://0install.net ) можуть і дозволяють паралельно встановлювати декілька пакунків¹, і не потребують файлів блокування ( A/libfoo.so
і B/libfoo.so
будуть йти в різні каталоги).
1 Паралельно як у сенсі присутності та доступності в системі одночасно, так і в сенсі завантаження та додавання до системи одночасно.