Чому менеджерам пакунків потрібні файли блокування?


10

dpkgпід час використання використовується файл блокування ( /var/lib/dpkg/lock).

  • Для чого потрібні ці фіксатори?
  • Чому кілька випадків неможливі?

Dpkg робить установки. Це безпечний режим, щоб уникнути конфліктів. Просто одна установка одночасно.
albfan

Відповіді:


15

Це не dpkgспецифічне питання (як підказує назва моєї редакції). Швидше, це те, що робить кожен менеджер пакунків (про що я знаю); і з поважних причин. Хоча я розумію, чому це може бути заплутано.

Менеджери пакетів покладаються на бази даних для відстеження інформації про встановлені пакети. Якщо декілька користувачів одночасно намагаються записати в базу даних, у неї є велика ймовірність пошкодження даних (що справді перетворюється на систему).

Як результат, багато (усі?) Менеджери пакетів покладаються на файл блокування, щоб сигналізувати про те, що в базу даних записується, тому інший клієнт не повинен це робити.


Зауважте, що інтелектуальні менеджери пакетів можуть визначати, коли запит доступно лише для читання, і можливо, не потрібно буде блокувати базу даних. В результаті; можливо, що деякі дії можна буде одночасно виконувати там, де інших не буде.


2
Я думаю, що portage та paludis (менеджери пакетів Gentoo) можуть працювати паралельно, якщо він взагалі використовує блокування, це робиться лише коротко, додаючи пакунки до встановленого списку.
Vality

Я погляну на менеджерів пакетів Gentoo і незабаром оновлю свою відповідь.
HalosGhost

Я не можу знайти актуальну інформацію про це; але принаймні на деякий час і paludis, і portage використовували файли блокування. Зауважте, це така поширена стратегія, оскільки це один з єдиних безпечних способів запобігти корупції даних; Я був би здивований, якби жодна порція або палудіс ще не використовували такий метод.
HalosGhost

1
А, здається, ви правильні, однак сфера застосування цих блокувань різна, вони використовуються лише при оновленні індексу пакунків (втрачені пакети доступні), фактично встановлення пакетів - це лише операції з читанням і тому не викликає блокування. Однак так, я розумію, що ви маєте на увазі, має сенс стратегія настільки поширена.
Vality

9

Файл блокування використовується для запобігання паралельного виконання декількох екземплярів.

Чому це важливо для менеджерів пакетів?

Менеджер пакунків - з виду високого рівня - це програма, яка застосовує складні зміни на жорсткому диску.

Зміни не можна здійснити за один крок («атомний»), тому є кілька кроків; багато кроків залежать від результату попередніх кроків.

Отже, менеджеру пакунків потрібно або проаналізувати жорсткий диск перед виконанням кожного кроку, або просто проаналізувати його один раз і відслідковувати зміни, які він застосовує сам. Перший варіант надзвичайно повільний. Другий вимагає, щоб жоден інший екземпляр не вносив змін.

Є багато інших проблем, які можуть з’явитися.

Це не неможливо реалізувати менеджер пакетів , який може працювати паралельно, але це занадто складно , щоб бути варто . Як і в, ви не можете собі уявити, як складно. Дійсно.


2

dkpgrpmбільшість інших традиційних менеджерів пакетів) працюють, встановлюючи пакети в глобальний простір, а це означає, що пакети можуть конфліктувати між собою (наприклад, Aі Bне можуть бути встановлені одночасно, оскільки вони обидва встановлюються /usr/lib/libfoo.so). Менеджери пакунків повинні виявляти подібні конфлікти та відхиляти такі запити встановлення, щоб підтримувати систему в послідовному стані. Наявність декількох примірників запуску менеджера пакунків одночасно було б дуже складним і схильним до помилок.

Безконфліктні менеджери пакунків (наприклад, http://0install.net ) можуть і дозволяють паралельно встановлювати декілька пакунків¹, і не потребують файлів блокування ( A/libfoo.soі B/libfoo.soбудуть йти в різні каталоги).


1 Паралельно як у сенсі присутності та доступності в системі одночасно, так і в сенсі завантаження та додавання до системи одночасно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.