Filesystem coherency and conflicts: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 16 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{DraftPolicy
{{Policy
|responsible=Igor Vlasenko
|responsible=Игорь Власенко
|since_branch=5.1
|metabug=rpm-filesystem-conflict-* тесты repocop
|metabug=rpm-filesystem-conflict-* тесты repocop
}}
}}
Строка 8: Строка 9:
=== Предварительные сведения ===
=== Предварительные сведения ===


При установке пакетов rpm может неожиданно обнаружить, что содержимое устанавливаемых пакетов конфликтует
При установке пакетов rpm может неожиданно обнаружить, что содержимое устанавливаемых пакетов конфликтует между собой. Это особенно неприятно при dist-upgrade транзакциях на сотни и тысячи пакетов. Поэтому необходимо, чтобы пакеты заранее предупеждали rpm и apt о своих конфликтах. Кроме того, некоторые конфликты являются особо патологическими и легко вводящими rpm в заблуждение. Наличие таких конфликтов свидетельствует о проблемах в упаковке пакета.
между собой. Это особенно неприятно при dist-upgrade транзакциях на сотни и тысячи пакетов.
Поэтому необходимо, чтобы пакеты заранее предупеждали rpm и apt о своих конфликтах.
Кроме того, некоторые конфликты являются особо патологическими и легко вводящими rpm в заблуждение.
Наличие таких конфликтов свидетельствует о проблемах в упаковке пакета.


Далее под другим пакетом понимаем пакет, не обязательно присутствующий в текущем Сизифе, но
Под '''файловым конфликтом''' понимается ситуация, когда в двух или более пакетах по одному и тому же полному пути (absolute path) упакованы разные с точки зрения rpm файлы, каталоги, символьные ссылки. Наличие в разных пакетах одинаковых с точностью до mtime файлов и каталогов с точки зрения rpm конфликтом не является. Пакеты, имеющие файловые конфликты, совместно установить с помощью rpm либо невозможно, либо такая попытка приводит к некорректной установке.
когда-либо собранный в Сизиф либо один из бранчей/дистрибутивов.
Также альтернатива либо симлинк может быть в другом или в этом же пакете,  
в том числе в старой версии пакета, более не присутствующей в Сизифе.


Под rpm пакетами с неявными конфликтами в файловой системе будем понимать  
Kirill Maslinsky. пояснение для непривычных:
rpm пакеты, у которых отсутствуют явные <code>Conflicts:</code>/ <code>Obsoletes:</code> друг на друга, но содержимое  
"Наличие в разных пакетах одинаковых с точностью до mtime файлов и каталогов с точки зрения rpm конфликтом не является"
которых невозможно совместно установить с помощью rpm либо такая попытка приводит к некорректной
означает, что владелец, группа, права должны совпадать, а mtime может различаться.
установке.
 
Напомним, что наличие в разных пакетах одинаковых с точностью до mtime файлов и каталогов
Под '''пересечением с альтернативой''' понимается ситуация, когда пакет содержит полный путь (absolute path), в который как часть входит альтернатива, описанная в другом пакете.
конфликтом не является.
 
Под '''другим пакетом''' понимается пакет, не обязательно присутствующий в текущем Сизифе, но когда-либо собранный в Сизиф либо один из бранчей/дистрибутивов.
 
Под rpm-пакетами с '''неявными конфликтами''' в файловой системе будем понимать rpm пакеты, у которых отсутствуют явные <code>Conflicts:</code>/ <code>Obsoletes:</code> друг на друга, но содержимое которых имеет файловые конфликты либо пересечения с альтернативой.


=== Требования к целостности файловой системы ===
=== Требования к целостности файловой системы ===
* Пакетам запрещается содержать путь в файловой системе, часть которого является альтернативой.
* Пакетам запрещается содержать путь в файловой системе, часть которого является альтернативой.
: Обоснование: изменение альтернативы спрячет файлы от rpm. Установка пакета блокирует создание альтернативы.
*: Обоснование: изменение альтернативы спрячет файлы от rpm. Установка пакета блокирует создание альтернативы.
* Пакетам запрещается содержать файлы, которые в другом пакете являются каталогами.
* Пакетам запрещается содержать файлы, которые в другом пакете являются каталогами.
*: Если такая потребность возникла при обновлении пакета — для возможности плавного обновления необходимо в секции {{term|%pre}} пакета вручную удалить или переместить мешающие файлы или каталоги.
* Пакетам запрещается содержать путь в файловой системе, часть которого является симлинком в другом пакете.
* Пакетам запрещается содержать путь в файловой системе, часть которого является симлинком в другом пакете.
: При обнаружении такого рода конфликтов (см. [http://lists.altlinux.org/pipermail/devel/2008-December/164768.html devel]) пакет необходимо переупаковать.
*: При обнаружении такого рода конфликтов (см. [http://lists.altlinux.org/pipermail/devel/2008-December/164768.html devel@]) пакет необходимо переупаковать.
: Обоснование: будет блокирована установка пакета с симлинком; изменение симлинка спрячет файлы от rpm.
*: Обоснование: будет блокирована установка пакета с симлинком; изменение симлинка спрячет файлы от rpm.
* Рекомендуется не использовать симлинки там, куда другие пакеты могут класть файлы. Как, например, никогда-никогда нельзя делать симлинков вида <code>%_docdir/%name-%version</code> (Alexey I. Froloff).
* Рекомендуется не использовать симлинки там, куда другие пакеты могут класть файлы. Как, например, никогда-никогда нельзя делать симлинков вида {{path|%_docdir/%name-%version}} (Alexey I. Froloff).


=== Требования к разрешению конфликтов ===
=== Требования к разрешению конфликтов ===
* Пакетам запрещается иметь неявные конфликты в файловой системе друг с другом.
* Пакетам запрещается иметь неявные конфликты в файловой системе друг с другом.
: Рекомендуется переделывать пакеты так, чтобы убрать неявные конфликты в файловой системе, используя переименование, выделение общих ресурсов в подпакет <code>-common</code>, или альтернативы. Пакеты, у которых не удаётся устранить неявные конфликты в файловой системе друг с другом, обязаны иметь явные конфликты друг на друга используя тег <code>Conflicts:</code>. При наличии тега <code>Obsoletes:</code> тег <code>Conflicts:</code> можно не указывать.
*: Рекомендуется переделывать пакеты так, чтобы убрать неявные конфликты в файловой системе, используя переименование, выделение общих ресурсов в подпакет <code>-common</code>, или альтернативы. Пакеты, у которых не удаётся устранить неявные конфликты в файловой системе друг с другом, обязаны иметь явные конфликты друг на друга используя тег <code>Conflicts:</code>.
*: При наличии тега <code>Obsoletes:</code> тег <code>Conflicts:</code> можно не указывать.
*: Отметим, что тег <code>Conflicts:</code> может быть неявным (Например, libfoo provides foo; bar conflicts foo => bar conflicts libfoo тоже), но тег <code>Obsoletes:</code> должен быть только явным на %name другого пакета, иначе rpm просто проигнорирует такой тег.
* Если пакеты не имеют других конфликтов, кроме конфликтов по каталогам, то такие конфликты настоятельно рекомендуется устранять без использования <code>Conflicts:</code>, через переименование, выделение общих каталогов в подпакет <code>-common</code>, принадлежащий общей группе, или альтернативы.
* Если пакеты не имеют других конфликтов, кроме конфликтов по каталогам, то такие конфликты настоятельно рекомендуется устранять без использования <code>Conflicts:</code>, через переименование, выделение общих каталогов в подпакет <code>-common</code>, принадлежащий общей группе, или альтернативы.
* В паре пакетов с неявными конфликтами рекомендуется добавлять тег <code>Conflicts:</code> в пакете, собранном последним («кто сломал, тот и чинит»), если не удалось устранить неявные конфликты другим способом.


[[Категория:Sisyphus]]
[[Категория:Sisyphus]]

Текущая версия от 19:52, 24 марта 2009

Stamp90cw.png
Действующая политика Sisyphus

Политика действует, начиная со стабильного бранча 5.1 и выше.

Ответственный за проведение политики в жизнь — Игорь Власенко.

Нарушения политики отслеживаются: rpm-filesystem-conflict-* тесты repocop


Полиси по целостности файловой системы внутри RPM пакетов и указанию конфликтов

Предварительные сведения

При установке пакетов rpm может неожиданно обнаружить, что содержимое устанавливаемых пакетов конфликтует между собой. Это особенно неприятно при dist-upgrade транзакциях на сотни и тысячи пакетов. Поэтому необходимо, чтобы пакеты заранее предупеждали rpm и apt о своих конфликтах. Кроме того, некоторые конфликты являются особо патологическими и легко вводящими rpm в заблуждение. Наличие таких конфликтов свидетельствует о проблемах в упаковке пакета.

Под файловым конфликтом понимается ситуация, когда в двух или более пакетах по одному и тому же полному пути (absolute path) упакованы разные с точки зрения rpm файлы, каталоги, символьные ссылки. Наличие в разных пакетах одинаковых с точностью до mtime файлов и каталогов с точки зрения rpm конфликтом не является. Пакеты, имеющие файловые конфликты, совместно установить с помощью rpm либо невозможно, либо такая попытка приводит к некорректной установке.

Kirill Maslinsky. пояснение для непривычных:
"Наличие в разных пакетах одинаковых с точностью до mtime файлов и каталогов с точки зрения rpm конфликтом не является"
означает, что владелец, группа, права должны совпадать, а mtime может различаться.

Под пересечением с альтернативой понимается ситуация, когда пакет содержит полный путь (absolute path), в который как часть входит альтернатива, описанная в другом пакете.

Под другим пакетом понимается пакет, не обязательно присутствующий в текущем Сизифе, но когда-либо собранный в Сизиф либо один из бранчей/дистрибутивов.

Под rpm-пакетами с неявными конфликтами в файловой системе будем понимать rpm пакеты, у которых отсутствуют явные Conflicts:/ Obsoletes: друг на друга, но содержимое которых имеет файловые конфликты либо пересечения с альтернативой.

Требования к целостности файловой системы

  • Пакетам запрещается содержать путь в файловой системе, часть которого является альтернативой.
    Обоснование: изменение альтернативы спрячет файлы от rpm. Установка пакета блокирует создание альтернативы.
  • Пакетам запрещается содержать файлы, которые в другом пакете являются каталогами.
    Если такая потребность возникла при обновлении пакета — для возможности плавного обновления необходимо в секции %pre пакета вручную удалить или переместить мешающие файлы или каталоги.
  • Пакетам запрещается содержать путь в файловой системе, часть которого является симлинком в другом пакете.
    При обнаружении такого рода конфликтов (см. devel@) пакет необходимо переупаковать.
    Обоснование: будет блокирована установка пакета с симлинком; изменение симлинка спрячет файлы от rpm.
  • Рекомендуется не использовать симлинки там, куда другие пакеты могут класть файлы. Как, например, никогда-никогда нельзя делать симлинков вида %_docdir/%name-%version (Alexey I. Froloff).

Требования к разрешению конфликтов

  • Пакетам запрещается иметь неявные конфликты в файловой системе друг с другом.
    Рекомендуется переделывать пакеты так, чтобы убрать неявные конфликты в файловой системе, используя переименование, выделение общих ресурсов в подпакет -common, или альтернативы. Пакеты, у которых не удаётся устранить неявные конфликты в файловой системе друг с другом, обязаны иметь явные конфликты друг на друга используя тег Conflicts:.
    При наличии тега Obsoletes: тег Conflicts: можно не указывать.
    Отметим, что тег Conflicts: может быть неявным (Например, libfoo provides foo; bar conflicts foo => bar conflicts libfoo тоже), но тег Obsoletes: должен быть только явным на %name другого пакета, иначе rpm просто проигнорирует такой тег.
  • Если пакеты не имеют других конфликтов, кроме конфликтов по каталогам, то такие конфликты настоятельно рекомендуется устранять без использования Conflicts:, через переименование, выделение общих каталогов в подпакет -common, принадлежащий общей группе, или альтернативы.
  • В паре пакетов с неявными конфликтами рекомендуется добавлять тег Conflicts: в пакете, собранном последним («кто сломал, тот и чинит»), если не удалось устранить неявные конфликты другим способом.