我正在写一个spec文件,用我们自己的仓库中的一个replace一个yum包。 新的软件包将是原来的替代品。
我认为最好的办法是给spec文件Provides一个与典型的Arch Linux软件包相同的Conflicts和Provides :
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
有没有一种方法可以在提供原始文件(即插入replace文件)的同时将文件包标记为与原文件冲突(即不能同时安装),而不会遇到此问题?
在RPM语言中,冲突也适用于虚拟提供,所以你的包与自己冲突。 要解决此问题,您需要使用版本macros来限定您的Provides和Conflicts 。
Provides: vncsnapshot = %{version} Conflicts: vncsnapshot < %{version}
我经常为IUS项目做这个。 通过查看一些我们的spec文件,你可以看到更多的例子。