Что означает «зависит» и «предварительно зависит», а также разница между этими двумя типами требований к пакетам при установке чего-либо в 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 завершить установку ранее указанных пакетов даже начиная установку пакета, который объявляет предварительную зависимость , это работает так, когда пакет, объявляющий предварительную зависимость, собирается распаковать, предварительная зависимость может быть удовлетворена, если зависимый пакет либо полностью сконфигурирован, или даже если зависимый (-ые) пакет (-ы) только распакован или находится в состоянии «Полуконфигурировано», при условии, что они были правильно сконфигурированы в некоторый момент в прошлом (и не были удалены или частично удалены с тех пор).
В этом случае как предварительно сконфигурированные, так и распакованные в настоящее время или «полуконфигурированные» версии должны удовлетворять любому предложению версии в поле «Предварительно зависит». Когда пакет, объявляющий предварительную зависимость, собирается быть настроенным, предварительная зависимость будет рассматриваться как обычная Зависит от зависимостей. Он будет считаться удовлетворенным, только если зависимый пакет был правильно настроен. Однако, в отличие от Depends, Pre-Depends не позволяет нарушать циклические зависимости. Если при попытке выполнить предварительную проверку будет обнаружена циклическая зависимость, установка будет прервана.
Предварительные зависимости также требуются, если сценарий preinst зависит от именованного пакета. Лучше избегать этой ситуации, если это возможно. Предварительно зависящие компоненты следует использовать с осторожностью, предпочтительно только теми пакетами, преждевременное обновление или установка которых может помешать системе продолжить выполнение любого возможного обновления.
Меньшая версия:
Термин "зависимость" может быть использован широко для затрагивания, "Зависит" и "Предварительно зависит" отношения (и иногда даже другой, более слабые отношения), или это может использоваться узко в качестве синонима "Depends".
Различие между "Зависит" и "Предварительно зависит", отношения пакета - то, что, если X зависит от Y, то Y должен быть полностью настроен прежде X, настроен. (Конфигурация является действием по установке, где пакет, после того как его файлы распакованы к надлежащим местоположениям - т.е. когда-то "установлены" - имеет то, что другие необходимые изменения, внесенные так, чтобы было возможно на самом деле использовать программное обеспечение, которое это предоставляет. Например, конфигурация сервера HTTP могла бы включить проверку, что существует a www
пользователь с надлежащими способностями и a /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
должен использоваться экономно, предпочтительно только пакетами, преждевременное обновление которых или установка препятствовали бы способности системы продолжить любое обновление, которое могло бы произойти.Вы не должны указывать a
Pre-Depends
запись для пакета, прежде чем это было обсуждено наdebian-devel
список рассылки и согласие о выполнении, которое было достигнуто. Посмотрите Зависимости, Раздел 3.5.