Що означає "залежно" та "попередньо залежить", і різниця між тими двома видами вимог до пакету, коли я щось встановлюю в Ubuntu?
Що означає "залежно" та "попередньо залежить", і різниця між тими двома видами вимог до пакету, коли я щось встановлюю в Ubuntu?
Відповіді:
За цим посиланням: https://www.debian.org/doc/debian-policy/#document-ch-relationships
Існує 5 типів залежностей:
Значення п'яти полів залежності полягає в наступному:
Це оголошує абсолютну залежність. Пакет не буде налаштований, якщо всі пакунки, перелічені в полі "Залежить", не були правильно налаштовані. Поле "залежно" має використовуватися, якщо залежний від пакета потрібен залежному пакету для забезпечення значної кількості функціональних можливостей. Поле "залежно" також слід використовувати, якщо для поштових скриптів після поштових повідомлень або передмірних програм потрібно розпакувати або налаштувати для того, щоб запустити. У випадку постінститутної конфігурації пакунки, що залежать від цього, будуть розпаковані та налаштовані спочатку.
У випадку передчасних або інших постінхронних залежностей залежність від пакету, як правило, буде щонайменше розпакована, але вони можуть бути лише "Напівінстальовані", якщо попереднє оновлення залежності не вдалося. Нарешті, поле Depends слід використовувати, якщо залежний від пакета потрібен сценарій postrm для повного очищення після видалення пакета. Немає гарантії, що залежність від пакета буде доступна, коли виконується пострм, але більш залежна залежність від пакету, якщо пакет оголошує залежність (особливо у випадку видалення після поштового зв'язку). Сценарій postrm повинен витончено пропускати дії, які потребують залежності, якщо ця залежність недоступна.
Це поле схоже на залежне, за винятком того, що воно також змушує dpkg завершити встановлення пакетів, названих до того, як навіть розпочати установку пакета, який оголошує попередню залежність. Це працює так, коли пакет, який оголошує попередню залежність, збирається Якщо розпаковано, залежність може бути задоволена, якщо залежний від пакета або повністю налаштований, або навіть якщо залежні пакети (-и) розпаковані лише в режимі "Напівконфігурований", за умови, що вони були налаштовані правильно в якийсь момент минулого (і з тих пір не видаляється або частково видаляється).
У цьому випадку як попередньо налаштована, так і наразі розпакована або "Напівконфігурована" версії повинні відповідати будь-якій версії положення в полі Попередньо залежно. Коли пакет, який оголошує попередню залежність, буде налаштований, попередня залежність буде розглядатися як нормальна залежна. Він вважатиметься задоволеним лише в тому випадку, якщо залежний від пакета був правильно налаштований. Однак, на відміну від Depends, Pre-Depends не дозволяє порушувати кругові залежності. Якщо під час спроби вшанувати функцію Pre-Independent виникає кругова залежність, установка буде перервана.
Попередня залежність також потрібна, якщо сценарій preinst залежить від названого пакету. Найкраще уникати такої ситуації, якщо це можливо. Попередньо залежно слід використовувати ощадливо, бажано лише пакети, передчасне оновлення чи встановлення яких перешкоджатиме можливості системи продовжувати будь-яке оновлення, яке може тривати.
Менша версія:
Термін "залежність" може широко використовуватися для охоплення відносин "залежно" та "попередньо залежно" (а іноді навіть інших, слабкіших стосунків), або він може використовуватися вузько як синонім "залежно".
Різниця між пакетами "залежно" та "попередньо залежно" полягає в тому, що якщо X залежить від Y, то Y має бути повністю налаштований до конфігурації X. (Конфігурація - це етап встановлення, коли пакет, коли його файли розпаковуються до належних місць - тобто одного разу «встановлено», - вносить будь-які інші необхідні зміни, щоб можна було реально використовувати програмне забезпечення, яке воно надає. Наприклад , конфігурація HTTP-сервера може передбачати переконання, що є www
користувач із належними здібностями та /var/www
каталог із належними дозволами.) На противагу цьому, якщо X попередньо залежить від Y, тоді Y повинен бути встановлений і (як правило) повністю налаштований до того, як X буде рівним встановлено .
Докладніше див. Розділ 7.2 Посібника з політик Debian . Тут я цитую два найбільш релевантні розділи, але є інша інформація в цьому розділі (і в загальній главі 7), яка допомагає висвітлити, як працюють залежності.
Depends
Це оголошує абсолютну залежність. Пакет не буде налаштований, якщо всі пакунки, перелічені в його
Depends
полі, не були правильно налаштовані (якщо немає кругової залежності, як описано вище).
Depends
Поле має бути використано , якщо залежить від пакета-потрібні для упаковки в залежності , щоб забезпечити значну кількість функціональних можливостей .
Depends
Поле також слід використовувати , якщоpostinst
абоprerm
сценарії вимагають залежить, на упаковці , щоб бути розпаковані або налаштований для запуску. У випадку постінститутної конфігурації пакунки, що залежать від цього, розпакуються та налаштуються спочатку. (Якщо обидва пакети задіяні в циклі залежності, це може не спрацювати, як очікувалося; див. Пояснення кілька абзаців назад.) У випадку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 .