LINUX.ORG.RU

Файлы блокировки — зачем?

 , , , ,


0

2

Здравствуйте. Я сейчас буду говорить о файлах блокировки пакетных менеджеров.

Все, кто используют(-али) Debian и дистрибутивы, на нем основанные, встречали ответ APT/DPKG про то, что DPKG не может получить доступ к файлу блокировки. В таких случаях я удаляю файлы блокировки, но вам так делать не советую, так как говорят, что это рисково. Но я не про это.

Сегодня, удаляя файл блокировки, я подумал: а чего в нем хорошего? Ответа я на этот вопрос не нашёл. За время использования APT/DPKG я находил только плохое — невозможность запуска установки нескольких программ сразу. Нет, я не говорю про случаи, когда все через APT, я говорю про тот случай, когда устанавливается что нибудь в APT и что нибудь в DPKG. Или DPKG+DPKG.

Я слышал, что в Gentoo их пакетный менеджер Portage позволяет устанавливать много программ сразу. Уважаемые гентушники, есть ли у вас файл блокировки Portage?

И какие функции файл блокировки на себя берет, кроме невозможности запустить две копии DPKG параллельно?

невозможность запуска установки нескольких программ сразу

это фича, а не баг.

apt - обёртка над dpkg. Больше расстраивает, что во время установки пакетов даже поиском средствами apt пользоваться нельзя

в Gentoo их пакетный менеджер Portage позволяет устанавливать много программ сразу

Позволяет, но файл блокировки на определённых этапах установки пакета всё равно есть. Просто emerge ждёт (и сообщает об этом) пока блокировка снимется в промежутках между фазами установки разных пакетов, например, при установке файлов непосредственно в систему. Дальше параллельно отрабатывает.

grem ★★★★★ ()
Ответ на: комментарий от anonymous

В Gentoo можно только собирать параллельно

А ещё чтобы оно вдруг не начало собирать один пакет несколькими билдерами одновременно, превращая workdir в кашу.

mord0d ★★★★ ()

Я слышал, что в Gentoo их пакетный менеджер Portage позволяет устанавливать много программ сразу.

Собирать можно в несколько потоков, устанавливается так же по очереди и с файлом блокировки.

Zhbert ★★★★★ ()
Ответ на: комментарий от mord0d

mord0d said:

Читай про concurrency.

Прочитал и не понял, на каком уровне это связано с файлом блокировки и разносом бд.

Как она может ращнестись, объясните, пожалуйста, понятным языком.

zagatov_lev ()
Ответ на: комментарий от grem

Не, это понятно, но тут просто файлик с пакетами. Файлик, живущий в хрен знает какой папке собственной жизнью, и к нему иногда обращаются. Только чтобы скачать пакет, я так понимаю

zagatov_lev ()
Ответ на: комментарий от zagatov_lev

понятным языком

Два человека заливают в одно ведро каждый своё, игнорируя присутствие друг друга. Один льёт селитру, второый сыпет марганец.

Или один пытается высушить тряпку, второй её постирать.

mord0d ★★★★ ()
Ответ на: комментарий от zagatov_lev

Только чтобы скачать пакет, я так понимаю

даже если так. Тебя не смущает, что несколько процессов dpkg могут ставить одинаковые пакеты, выполнять различные скрипты (pre/post) одновременно? Один распаковал и начал обработку дальше, а второй в это время потер работу первого.

xgatron ()
Ответ на: комментарий от grem

Больше расстраивает, что во время установки пакетов даже поиском средствами apt пользоваться нельзя

Эм, что? Вот сейчас специально проверил: что apt list, что apt search прекрасно работают во всех трёх стадиях: при показе сводки и запросе подтверждения; при скачивании пакетов; при установке пакетов.

Rootlexx ★★ ()
Ответ на: комментарий от zagatov_lev

Как она может ращнестись, объясните, пожалуйста, понятным языком.


Вася и Петя открыли файл на запись одновременно
Вася хочет записать «Status: install ok installed»
Петя хочет записать «Status: deinstall ok config-files»

Что они запишут на самом деле?

«StaStattuuss: : indeinstallstall ookk iconsntfif-files

alled
»

slowpony ★★★ ()
Ответ на: комментарий от anonymous

В Gentoo можно только собирать параллельно, устанавливать же он будет точно также, с блокировкой.

Ну вот. А в Debian не так.

И если ты поставил установку пакета, который очень медленно скачивается с одного репозитория (что-то Virtualbox вспомнился), то всё…

Неважно, что можешь успеть десять раз поставить крошечный git.

fornlr ★★★★★ ()
Последнее исправление: fornlr (всего исправлений: 1)

эта блокировка действительно говно. защищает она от одновременной установки и удаления одного и того же пакета, или установки 2х конфликтующих пакетов. Хотя по хорошему атомарными должны быть операции над каждым отдельно взятым пакетом, а не над всем процессом установки. Упомянутый emerge, а так же nix в этом плане хороши, но подойдут не всем

SR_team ★★★★ ()
Ответ на: комментарий от Radjah

когда юзал дебиан, качал он последовательно, и был баш-скрипт apt-fast, который как раз и умел качать параллельно

SR_team ★★★★ ()
Последнее исправление: SR_team (всего исправлений: 2)

потому что всем влом распилить систему установки на более мелкие атомарные фнкции и правильно продумать алгоритмы их взаимодействия. это надо думать писать лишний код и допиливать его до рабтоспособного состояния.
учитывая что одновременный запуск нескольких установок явление достаточно редкое.
предложи реализацию и пропихни в продакшен.

pfg ★★★★ ()
Ответ на: комментарий от pfg

потому что всем влом распилить систему установки на более мелкие атомарные фнкции и правильно продумать алгоритмы их взаимодействия. это надо думать писать лишний код и допиливать его до рабтоспособного состояния.

А еще надо придумать адекватное обоснование зачем это может быть нужно. Установка и обновление у тебя идет не 24/7, так что смысла делать бесполезную работу просто нет. И так сойдет.

Polugnom ★★★★★ ()
Ответ на: комментарий от SR_team

Уважаемый, когда я вызываю # apt-fast install transmission, пока выполняется установка uGet, он отвечает:

apt-fast already running!
Verify that all apt-fast processes are finished then remove /tmp/apt-fast.lock and try again.
, то есть это не решение проблемы

zagatov_lev ()
Ответ на: комментарий от gremlin_the_red

Ну, если человек сам не знает, чего он хочет установить, а чего нет, то современная медицина тут бессильна. Разве что, кроме всесильного врача-эвтаназиолога

Ну не знаю. Допустим, один пакет DPKG требует другой пакет. Его нет в репах. Он тянет другие зависимости...
их тоже ет в репах. И нужно это установить.

zagatov_lev ()
Ответ на: комментарий от fornlr

И если ты поставил установку пакета, который очень медленно скачивается с одного репозитория (что-то Virtualbox вспомнился), то всё…

Неважно, что можешь успеть десять раз поставить крошечный git.

Это выглядит просто, когда наборы пакетов в двух экземплярах не пересекаются. А если второй apt удалит пакет, нужный первому apt, пока тот скачивает?

Нет, технически это можно реализовать – но это сильно усложнит такую важную программу с минимальным profit.

Rootlexx ★★ ()
Ответ на: комментарий от SR_team

Хотя по хорошему атомарными должны быть операции над каждым отдельно взятым пакетом, а не над всем процессом установки.

Это если бы не было зависимостей. А поскольку они есть, атомарной должна быть операция над всем набором пакетов, а не только над отдельными.

Rootlexx ★★ ()

Представь, что ты пытаешься налить питьевой воды и одновременно писаешь сквозь поток этой воды. Ты вроде и воды налил, и поссал, но что в итоге получил… Так выглядит работа пакетного менеджера без лока.

anonymous ()
Ответ на: комментарий от zagatov_lev

то есть это не решение проблемы

И не должно. Будьте внимательнее:

когда юзал дебиан, качал он последовательно, и был баш-скрипт apt-fast, который как раз и умел качать параллельно

был ответом на:

Ну качаются они всё же параллельно.

Т.е. речь шла о том, что в рамках одного процесса apt может качать пакеты параллельно

SR_team ★★★★ ()
Ответ на: комментарий от Rootlexx

Это если бы не было зависимостей. А поскольку они есть, атомарной должна быть операция над всем набором пакетов, а не только над отдельными.

Это если бы все пакеты зависили от всех пакетов, а так атомарной должна быть обработка дерева зависимых пакетов

SR_team ★★★★ ()
Ответ на: комментарий от SR_team

Это если бы все пакеты зависили от всех пакетов, а так атомарной должна быть обработка дерева зависимых пакетов

Под «набором пакетов» и подразумевался подграф (в общем случае не дерево) пакетов, над которым производится операция.

Rootlexx ★★ ()
Ответ на: комментарий от SR_team

когда юзал дебиан, качал он последовательно, и был баш-скрипт apt-fast, который как раз и умел качать параллельно

apt умеет качать параллельно, и пакеты из разных источников и разных серверов так и скачиваются (часто можно наблюдать, как пакеты из репозитория обновлений безопасности скачиваются одновременно с пакетами из основного репозитория) – но см. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=500653#20.

Rootlexx ★★ ()
Последнее исправление: Rootlexx (всего исправлений: 1)