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

Материал из ALT Linux Wiki
Строка 8: Строка 8:
=== Предварительные сведения ===
=== Предварительные сведения ===


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


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


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


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


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


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

Версия от 18:44, 11 января 2009

Stub.png
Черновик политики Sisyphus
Автор(ы) — Igor Vlasenko
Нарушения политики отслеживаются: rpm-filesystem-conflict-* тесты repocop


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

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

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

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

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

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

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

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

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

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

  • Пакетам запрещается иметь неявные конфликты в файловой системе друг с другом.
Рекомендуется переделывать пакеты так, чтобы убрать неявные конфликты в файловой системе, используя переименование, выделение общих ресурсов в подпакет -common, или альтернативы. Пакеты, у которых не удаётся устранить неявные конфликты в файловой системе друг с другом, обязаны иметь явные конфликты друг на друга используя тег Conflicts:. При наличии тега Obsoletes: тег Conflicts: можно не указывать.
  • Если пакеты не имеют других конфликтов, кроме конфликтов по каталогам, то такие конфликты настоятельно рекомендуется устранять без использования Conflicts:, через переименование, выделение общих каталогов в подпакет -common, принадлежащий общей группе, или альтернативы.
  • В паре пакетов с неявными конфликтами рекомендуется добавлять тег Conflicts: в пакете, собранном последним ("кто сломал, тот и чинит"),

если не удалось устранить неявные конфликты другим способом.