I had a puzzler today. The RPM spec file contained:
BuildRequires: qemu-kvm < 0.12.2.0
The version of qemu-kvm was 0.12.1.2-… and you would think that 0.12.1.2 < 0.12.2.0. It should build, right? But rpmbuild consistently refused to find that qemu-kvm package.
My first thought was that RPM somehow needs to have a ≥ relation in order to find a package at all. I tried:
BuildRequires: qemu-kvm >= 0.12.1.0 BuildRequires: qemu-kvm < 0.12.2.0
but this failed in an even stranger way. It finds the right package, but then rejects it:
DEBUG util.py:256: 2:qemu-kvm-0.12.1.2-2.91.el6.x86_64 DEBUG util.py:256: No Package Found for qemu-kvm < 0.12.2.0
But the clue to the answer is right there. qemu-kvm has an Epoch of 2 (hence the package name given is 2:qemu-kvm-0.12.1.2-…).
The fix is to write:
BuildRequires: qemu-kvm >= 2:0.12.1.0 BuildRequires: qemu-kvm < 2:0.12.2.0
But note a huge, hidden gotcha in RPMs with Epoch. You write:
BuildRequires: qemu-kvm >= 0.12
and it’s effectively meaningless. Any qemu-kvm version (with epoch 2) will match this, even version 0.11. In fact I could have written:
BuildRequires: qemu-kvm >= 0.95
and that would still have pulled in 2:qemu-kvm-0.12.1.2.