Что подразумевается под «зависит» и «предварительно зависит», а также от разницы между этими двумя типами требований к пакетам при установке чего-либо в Ubuntu?
Что подразумевается под «зависит» и «предварительно зависит», а также от разницы между этими двумя типами требований к пакетам при установке чего-либо в Ubuntu?
Ответы:
Как взято из этой ссылки: https://www.debian.org/doc/debian-policy/#document-ch-relationships
Существует 5 типов зависимостей:
Значение пяти полей зависимости выглядит следующим образом:
Это объявляет абсолютную зависимость. Пакет не будет настроен, если все пакеты, перечисленные в его поле «Зависит», не были правильно настроены. Поле Depends должно использоваться, если зависимый пакет требуется для зависимого пакета, чтобы обеспечить значительный объем функциональности. Поле Depends также следует использовать, если сценарии postinst или prerm требуют, чтобы зависимый пакет был распакован или настроен для запуска. В случае настройки postinst зависимые пакеты будут сначала распакованы и настроены.
В случае действий prerm или других действий postinst зависимости пакета, как правило, будут по меньшей мере распакованы, но они могут быть только «наполовину установлены», если предыдущее обновление зависимости не удалось. Наконец, поле Depends должно использоваться, если зависимый пакет необходим сценарию postrm для полной очистки после удаления пакета. Нет никакой гарантии, что зависимости пакета будут доступны при запуске postrm, но более вероятно, что зависимый пакет будет доступен, если пакет объявит зависимость (особенно в случае удаления postrm). Сценарий postrm должен корректно пропускать действия, которые требуют зависимости, если эта зависимость недоступна.
Это поле похоже на Зависит, за исключением того, что оно также вынуждает dpkg завершить установку названных пакетов перед тем, как даже начать установку пакета, который объявляет предварительную зависимость. Это работает так, когда пакет, объявляющий предварительную зависимость, собирается при распаковке предварительная зависимость может быть удовлетворена, если зависимый пакет либо полностью сконфигурирован, либо даже если зависимый пакет (ы) только распакован или находится в состоянии «полуконфигурированный», при условии, что он был сконфигурирован правильно в некоторый момент в прошлом (и не удалены или частично удалены с тех пор).
В этом случае как ранее сконфигурированные, так и распакованные в настоящее время или «полуконфигурированные» версии должны удовлетворять любому условию версии в поле «Pre-Depends». Когда пакет, объявляющий предварительную зависимость, собирается быть настроенным, предварительная зависимость будет рассматриваться как обычная Зависит от зависимостей. Он будет считаться удовлетворенным, только если зависимый пакет был правильно настроен. Однако, в отличие от Depends, Pre-Depends не позволяет нарушать циклические зависимости. Если при попытке выполнить предварительную проверку возникает циклическая зависимость, установка будет прервана.
Предварительные зависимости также требуются, если сценарий preinst зависит от именованного пакета. Лучше всего избегать этой ситуации, если это возможно. Предварительные зависимости следует использовать с осторожностью, предпочтительно только в тех пакетах, преждевременное обновление или установка которых может помешать системе продолжить выполнение любого обновления, которое может выполняться.
Меньшая версия:
Термин «зависимость» может широко использоваться, чтобы охватить отношения «Зависит» и «Предварительно зависит» (а иногда даже другие, более слабые отношения), или он может использоваться узко как синоним «Зависит».
Разница между отношениями пакетов «Зависит» и «Предварительно зависит» состоит в том, что если X зависит от Y, то Y должен быть полностью сконфигурирован, прежде чем X будет сконфигурирован. (Конфигурация - это этап установки, при котором пакет, после того как его файлы распакованы в правильные места - т.е. после «установки»), вносит любые другие необходимые изменения, чтобы можно было фактически использовать предоставленное им программное обеспечение. Например, конфигурация HTTP-сервера может включать в себя наличие www
пользователя с надлежащими способностями и /var/www
каталога с надлежащими разрешениями.) В отличие от этого, если X предварительно зависит от Y, тогда Y должен быть установлен и (обычно) полностью настроен до того, как X станет четным. установлен .
См. Раздел 7.2 Руководства по политике Debian для получения более подробной информации. Я привожу здесь два наиболее важных раздела, но в этом разделе (и в главе 7 в целом) есть другая информация, которая помогает осветить, как работают зависимости.
Depends
Это объявляет абсолютную зависимость. Пакет не будет настроен, если все пакеты, перечисленные в его
Depends
поле, не были правильно настроены (если нет циклической зависимости, как описано выше).
Depends
Поле должно быть использовано , если зависит от пакета-требуются для упаковки в зависимости , чтобы обеспечить значительное количество функциональных возможностей .
Depends
Поле также следует использовать , еслиpostinst
илиprerm
сценарии требуют зависит, на упаковке , чтобы быть распакованы или настроен для запуска. В случае настройки postinst зависимые пакеты будут сначала распакованы и настроены. (Если оба пакета участвуют в цикле зависимостей, это может работать не так, как ожидалось; см. Пояснение в нескольких параграфах назад.) В случаеprerm
или другихpostinst
действий зависимости пакетов обычно по меньшей мере распаковываются, но они могут быть только «Наполовину установлен», если предыдущее обновление зависимости не удалось.Наконец,
Depends
поле следует использовать, еслиpostrm
скрипт требует зависимого пакета для полной очистки после удаления пакета. Нет гарантии, что зависимости пакета будут доступны приpostrm
запуске, но более вероятно, что зависимый пакет будет доступен, если пакет объявит зависимость (особенно в случаеpostrm remove
).postrm
Скрипт должен корректно обработать действия , которые требуют зависимости , если эта зависимость отсутствует.
Pre-Depends
Это поле похоже на то
Depends
, за исключением того, что оно также вынуждаетdpkg
завершить установку названных пакетов, прежде чем даже начинать установку пакета, который объявляет предварительную зависимость, следующим образом:Когда пакет, объявляющий предварительную зависимость, должен быть распакован, предварительная зависимость может быть удовлетворена, если зависимый пакет либо полностью сконфигурирован, либо даже если зависимый пакет (ы) только распакован или находится в «половине». «Настроено», при условии, что они были правильно настроены в некоторый момент в прошлом (и не были удалены или частично удалены с тех пор). В этом случае как ранее сконфигурированные, так и распакованные в настоящее время или «полуконфигурированные» версии должны удовлетворять любому условию версии в
Pre-Depends
поле.Когда пакет, объявляющий предварительную зависимость, собирается быть настроенным , предварительная зависимость будет рассматриваться как нормальная
Depends
. Он будет считаться удовлетворенным, только если зависимый пакет был правильно настроен. Однако, в отличие отDepends
,Pre-Depends
не позволяет нарушать циклические зависимости. Если при попыткеPre-Depends
учесть циклическую зависимость , установка будет прервана.
Pre-Depends
также требуются, еслиpreinst
сценарий зависит от именованного пакета. Лучше всего избегать этой ситуации, если это возможно.
Pre-Depends
следует использовать с осторожностью, предпочтительно только в тех пакетах, преждевременное обновление или установка которых может помешать системе продолжить выполнение любого возможного обновления.Вы не должны указывать
Pre-Depends
запись для пакета до того, как это будет обсуждаться вdebian-devel
списке рассылки и достигнут консенсус в отношении этого. См. Зависимости, раздел 3.5 .