В чем разница между зависимостями и пре-зависимостями?

Что означает «зависит» и «предварительно зависит», а также разница между этими двумя типами требований к пакетам при установке чего-либо в Ubuntu?

12
задан 26 August 2017 в 09:56

2 ответа

Как взято по этой ссылке: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Существует 5 типов зависимостей:

Значение пяти полей зависимостей следующее:

Зависит

  • Это объявляет абсолютную зависимость. Пакет не будет настроен, если все пакеты, перечисленные в его поле Зависит, не были правильно настроены. Поле Depends должно использоваться, если зависимый пакет требуется для зависимого пакета, чтобы обеспечить значительный объем функциональности. Поле Depends также следует использовать, если сценарии postinst или prerm требуют, чтобы зависимый пакет был распакован или настроен для запуска. В случае настройки postinst зависимые пакеты будут сначала распакованы и настроены.

  • В случае действий prerm или других postinst зависимости пакета, как правило, будут по меньшей мере распакованы, но они могут быть «наполовину установлены», если предыдущее обновление зависимости не удалось , Наконец, поле Depends должно использоваться, если зависимый пакет необходим сценарию postrm для полной очистки после удаления пакета. Нет гарантии, что зависимости пакета будут доступны при запуске postrm, но более вероятно, что зависимый пакет будет доступен, если пакет объявит зависимость (особенно в случае удаления postrm). Скрипт postrm должен изящно пропускать действия, требующие зависимости, если эта зависимость недоступна.

Рекомендует

  • Это объявляет сильную, но не абсолютную зависимость. Поле Recommended должно содержать список пакетов, которые будут найдены вместе с этим во всех случаях, кроме необычных установок.

Предлагает

  • Это используется, чтобы объявить, что один пакет может быть более полезным с одним или несколькими другими. Использование этого поля сообщает системе упаковки и пользователю, что перечисленные пакеты относятся к этому и, возможно, могут повысить его полезность, но установка этого пакета без них вполне оправдана.

Улучшает

  • Это поле аналогично предложению, но работает в противоположном направлении. Он используется для объявления того, что пакет может расширять функциональность другого пакета.

Pre-Depends

  • Это поле похоже на Зависит, за исключением того, что оно также заставляет dpkg завершить установку ранее указанных пакетов даже начиная установку пакета, который объявляет предварительную зависимость , это работает так, когда пакет, объявляющий предварительную зависимость, собирается распаковать, предварительная зависимость может быть удовлетворена, если зависимый пакет либо полностью сконфигурирован, или даже если зависимый (-ые) пакет (-ы) только распакован или находится в состоянии «Полуконфигурировано», при условии, что они были правильно сконфигурированы в некоторый момент в прошлом (и не были удалены или частично удалены с тех пор).

  • В этом случае как предварительно сконфигурированные, так и распакованные в настоящее время или «полуконфигурированные» версии должны удовлетворять любому предложению версии в поле «Предварительно зависит». Когда пакет, объявляющий предварительную зависимость, собирается быть настроенным, предварительная зависимость будет рассматриваться как обычная Зависит от зависимостей. Он будет считаться удовлетворенным, только если зависимый пакет был правильно настроен. Однако, в отличие от Depends, Pre-Depends не позволяет нарушать циклические зависимости. Если при попытке выполнить предварительную проверку будет обнаружена циклическая зависимость, установка будет прервана.

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

Меньшая версия:

  • И зависит , и предварительно зависит упоминание зависимостей, в которых нуждается пакет перед установкой, но предварительная зависимость вынуждает устанавливать и настраивать пакеты зависимостей еще до запуска с пакетом, который нуждается в зависимостях. dpkg не будет даже распаковывать основной пакет, пока не будут обработаны все предварительно зависимые пакеты. С зависимости, порядок пакетов зависимостей и основного не важен. В случае предварительной зависимости это учитывается, а также проверяется, конфигурируются ли предварительно установленные пакеты и установлены ли они. Без этого основной пакет даже не будет распакован, настроен или установлен. Вы должны либо установить зависимости, прежде чем начинать процесс работы с основным пакетом. Если нет, их необходимо загрузить / настроить / установить, прежде чем продолжить. Предварительные зависимости обычно используются в тех случаях, когда важна стабильность пакета, и это не повлияет на систему или программу очень плохо, но этого можно избежать, используя несколько норм, также упомянутых в ссылке выше.
0
ответ дан 26 August 2017 в 09:56

Термин "зависимость" может быть использован широко для затрагивания, "Зависит" и "Предварительно зависит" отношения (и иногда даже другой, более слабые отношения), или это может использоваться узко в качестве синонима "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.

3
ответ дан 26 August 2017 в 09:56

Другие вопросы по тегам:

Похожие вопросы: