Unmets Creation Policy
Unmets Creation Policy.
Вводная часть
Unmets (unmet dependencies) -- зависимости пакета, которые не могут быть разрешены в существующем репозитарии.
В Сизифе не рекомендуется создавать unmet dependencies. Рекомендуется переводить транзакциями репозитарий с одного устойчивого состояния в другое. К сожалению, пока (до появления надлежащей реализации карманов?) некоторые транзакции и workflows сборочницей не поддерживаются. В частности, не поддерживаются транзакции, включающие в себя несколько версий одного и того же пакета (bootstrap-сборка). Получается противоречие: сборочница не позволяет создать unmets, в то время как для того, чтобы обновить пакет, unmets необходимо создать.
Это противоречие можно обойти, спрятав unmets под ковер: создав пакет-заглушку, который обманывает сборочную систему, фиктивно предоставляя отсутствующие Provides:. Однако наличие таких пакетов в Сизифе создает другие проблемы, устранение которых является целью данного полиси.
Требования к пакетам, прячущим unmets
Реальные пакеты не должны иметь фиктивных (закрывающих unmets) Provides. Фиктивные Provides необходимо выделять в отдельный исходный пакет.
Название пакета должно иметь вид unment-dependency-<пакет, породивший unments>.
Обоснование: легкая фильтрация таких пакетов.
Рекомендуется делать пакет с фиктивными Provides: не устанавливаемым. Для этого рекомендуется создавать файловый конфликт на существующий пакет.
AutoReqProv: noauto Requires(pre): diffutils. ... touch $RPM_BUILD_ROOT/usr/bin/diff ... %files /usr/bin/diff
Обоснование: чтобы пока в процессе обновления Сизиф разломан, пользователи не могли обновиться до разломанного состояния.
Рекомендуется ставить в пакете AutoReqProv: noauto, все фиктивные Provides: прописывать вручную.
Обоснование: во избежание. Например, в примере выше можно на автомате получить Provides: /usr/bin/diff.
Требования к сборочной системе
желательно иметь возможность принудительное удалять пакеты, несмотря на возникающие unmets.
В крайнем случае, при удалении пакета вида unment-dependency-* проверка на возникающие unmets не должна проводиться.