Я пишу файл спецификации, чтобы заменить пакет yum на пакет из нашего собственного репозитория. Новый пакет будет заменой оригинала.
Я подумал, что лучший способ сделать это - дать файлу спецификации идентичный Conflicts
и Provides
как можно было бы сделать с типичным пакетом Arch Linux:
Name: vncsnapshot-png
Provides: vncsnapshot
Conflicts: vncsnapshot
Казалось, что это сработало, и пакет можно без проблем установить / понизить / обновить. Однако переустановка не удалась:
Loaded plugins: security
Setting up Reinstall Process
Resolving Dependencies
--> Running transaction check
---> Package vncsnapshot-png.x86_64 0:1.3-1.el6 will be reinstalled
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================================================================
Package Arch Version Repository Size
===============================================================================================================================================================
Reinstalling:
vncsnapshot-png x86_64 1.3-1.el6 sv.repo 35 k
Transaction Summary
===============================================================================================================================================================
Reinstall 1 Package(s)
Total download size: 35 k
Installed size: 72 k
Is this ok [y/N]: y
Downloading Packages:
vncsnapshot-png-1.3-1.el6.x86_64.rpm | 35 kB 00:00
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
vncsnapshot conflicts with vncsnapshot-png-1.3-1.el6.x86_64
vncsnapshot conflicts with vncsnapshot-png-1.3-1.el6.x86_64
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
vncsnapshot-png-1.3-1.el6.x86_64 has installed conflicts vncsnapshot: vncsnapshot-png-1.3-1.el6.x86_64
Your transaction was saved, rerun it with:
yum load-transaction /tmp/yum_save_tx-2016-02-18-12-18dAjmpb.yumtx
Есть ли способ пометить пакет как конфликтующий с оригиналом (т. Е. Не может быть установлен одновременно), предоставив оригинал (т. Е. Замену по запросу), не столкнувшись с этой проблемой?
В языке RPM конфликты также работают с виртуальными поставщиками, поэтому ваш пакет конфликтует сам с собой. Чтобы исправить это, вам нужно квалифицировать свой Provides
и Conflicts
с помощью макроса версии.
Provides: vncsnapshot = %{version}
Conflicts: vncsnapshot < %{version}
Я делаю это регулярно для Проект IUS. Вы можете увидеть больше примеров, просмотрев некоторые из наших файлов спецификаций.