Назад | Перейти на главную страницу

Какой правильный способ принудительно стереть и установить RPM вместо обновления?

У меня есть RPM, в программном обеспечении которого недавно была полностью переработана схема базы данных. Текущая версия (назовем ее B.0) несовместима со старыми версиями схемы базы данных.

К счастью, он все еще находится в стадии бета-тестирования, и, поскольку он официально не выпущен, я бы хотел избежать написания каких-либо сценариев миграции базы данных до тех пор, пока (и до тех пор) это действительно не станет необходимым.

Обновление не удастся, потому что создание (новой) схемы базы данных происходит в скриптлете, который никогда не запускается во время обновления, что переводит приложение в плохое состояние. Если установлен A.x, я хочу их стереть и переустановить.

Я обнаружил тег RPM «Conflicts», который, похоже, выполняет свою работу, но сообщение об ошибке вводит в заблуждение «файл ____ конфликтует с файлом из пакета Ax», и кто-то достаточно сообразительный может попытаться обновить и заменить конфликты, что не полезно, поскольку необходимые скриптлеты для создания базы данных по-прежнему не запускаются.

Можно ли при возникновении этого конфликта распечатать более подробное сообщение об ошибке? Есть ли «правильный способ сделать это»?

Если ваш пакет не может быть обновлен, вам следует рассмотреть переименование пакета. Например, если третья версия вашего программного обеспечения была переписана, вы могли бы получить foo3-3.0.0-1.x86_64 который устарел foo <= 3.0.0.

Это уместно, только если путь обновления технически невозможен.

https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.2FReplacing_Existing_Packages

Кроме того, поскольку вы упомянули, что это бета-версия, вы можете посмотреть на их Рекомендации по управлению версиями чтобы сохранить его числовую сортировку. (Вы захотите, чтобы не бета-версия заменила бета-версию.)

https://fedoraproject.org/wiki/Packaging:Versioning#Prerelease_versions