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

12

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

Бруно Перейра
источник

Ответы:

20

Как взято из этой ссылки: 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 завершить установку названных пакетов перед тем, как даже начать установку пакета, который объявляет предварительную зависимость. Это работает так, когда пакет, объявляющий предварительную зависимость, собирается при распаковке предварительная зависимость может быть удовлетворена, если зависимый пакет либо полностью сконфигурирован, либо даже если зависимый пакет (ы) только распакован или находится в состоянии «полуконфигурированный», при условии, что он был сконфигурирован правильно в некоторый момент в прошлом (и не удалены или частично удалены с тех пор).

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

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

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

  • И зависит, и предварительно зависитупомяните зависимости, в которых нуждается пакет перед установкой, но предварительная зависимость заставляет устанавливать и настраивать пакеты зависимостей, прежде чем даже начинать с пакета, который нуждается в зависимостях. dpkg не будет даже распаковывать основной пакет, пока не будут обработаны все предварительно зависимые пакеты. С зависимости порядок пакетов зависимостей и основного пакета не имеет значения. В случае предварительной зависимости это учитывается, а также проверяется, конфигурируются ли предварительно установленные пакеты и установлены ли они. Без этого основной пакет даже не будет распакован, настроен или установлен. Вы должны либо установить зависимости перед запуском процесса работы с основным пакетом. Если нет, их необходимо сначала загрузить / настроить / установить, прежде чем продолжить.
Луис Альварадо
источник
2
Обратите внимание, что существуют также анти-зависимости, такие как конфликты и разрывы. И строить зависимости, такие как Build-Depends.
Алексис Вилке
3

Термин «зависимость» может широко использоваться, чтобы охватить отношения «Зависит» и «Предварительно зависит» (а иногда даже другие, более слабые отношения), или он может использоваться узко как синоним «Зависит».

Разница между отношениями пакетов «Зависит» и «Предварительно зависит» состоит в том, что если 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 .

Элия ​​Каган
источник