dpkg
использует файл блокировки ( /var/lib/dpkg/lock
), когда используется.
- Зачем нужны эти файлы?
- Почему несколько экземпляров невозможно?
dpkg
lock
concurrency
acisoal
источник
источник
Ответы:
Это не
dpkg
специфическая проблема (как подсказывает название моего редактирования). Скорее, это то, что делает каждый менеджер пакетов (о котором я знаю); и не зря. Хотя я понимаю, почему это может сбивать с толку.Менеджеры пакетов используют базы данных для отслеживания информации об установленных пакетах. Если несколько пользователей пытаются одновременно выполнить запись в базу данных, у нее есть высокая вероятность повреждения данных (что может привести к повреждению системы).
В результате многие (все?) Менеджеры пакетов полагаются на файл блокировки, чтобы сигнализировать о том, что в базу данных выполняется запись , поэтому другому клиенту нельзя разрешать это делать.
Обратите внимание, что интеллектуальные менеджеры пакетов могут определить, когда запрос доступен только для чтения, и, возможно, нет необходимости блокировать базу данных. В результате; некоторые действия могут выполняться одновременно там, где других не будет.
источник
Файл блокировки используется для предотвращения параллельного выполнения нескольких экземпляров.
Почему это важно для менеджеров пакетов?
Менеджер пакетов - с точки зрения высокого уровня - это программа, которая применяет сложные изменения к жесткому диску.
Изменения не могут быть сделаны за один шаг («атомарный»), поэтому существует несколько шагов; многие из шагов зависят от результата предыдущих шагов.
Таким образом, менеджер пакетов должен либо проанализировать жесткий диск перед выполнением каждого шага, либо просто проанализировать его один раз и отследить изменения, которые он применяет сам. Первый вариант крайне медленный. Второй требует, чтобы никакой другой экземпляр не вносил изменений.
Есть много других проблем, которые могут появиться.
Это не невозможно реализовать менеджер пакетов , который может работать параллельно, но это слишком сложно , чтобы быть стоит . Например, Вы не можете себе представить, насколько это сложно. В самом деле.
источник
dkpg
(и, какrpm
и большинство других традиционных менеджеров пакетов), работают путем установки пакетов в глобальном пространстве, что означает, что пакеты могут конфликтовать друг с другом (например,A
иB
не могут быть установлены одновременно, поскольку они оба устанавливаются/usr/lib/libfoo.so
). Менеджеры пакетов должны обнаруживать такие конфликты и отклонять такие запросы на установку, чтобы поддерживать систему в согласованном состоянии. Наличие нескольких экземпляров диспетчера пакетов, работающих одновременно, было бы очень сложным и подверженным ошибкам.Бесконфликтные менеджеры пакетов (например, http://0install.net ) могут и разрешать параллельную установку нескольких пакетов¹ и не нуждаются в блокировке файлов (
A/libfoo.so
и ониB/libfoo.so
будут находиться в разных каталогах).1 Параллельно как в смысле присутствия и доступности в системе одновременно, так и в смысле одновременной загрузки и добавления в систему.
источник