When packaging software with RPM, you often need to specify precise version requirements for dependencies. The syntax somepackage >= 0.5.0 AND somepackage < 0.6.0
is indeed valid and commonly used to restrict installations to a specific version range (0.5.x in this case).
RPM supports several ways to express version constraints:
Requires: somepackage >= 0.5.0
Requires: somepackage < 0.6.0
Or combined in a single line:
Requires: somepackage >= 0.5.0, somepackage < 0.6.0
Here's how this would look in a complete RPM spec file:
Name: mypackage
Version: 1.0
Release: 1
Summary: My package with version-constrained dependencies
Requires: somepackage >= 0.5.0
Requires: somepackage < 0.6.0
%description
This package requires somepackage version 0.5.x specifically.
%install
# Your installation commands here
Specifying version ranges is crucial when:
- Your software uses APIs that changed in later versions
- You need to avoid known bugs in certain versions
- You want to ensure compatibility with tested versions
RPM supports these comparison operators:
>, >=, =, <=, <
For example, to require exactly version 0.5.3:
Requires: somepackage = 0.5.3
If you encounter dependency resolution issues:
- Verify available versions with
yum list available somepackage
- Check what versions would be installed with
yum deplist yourpackage.rpm
- Use
repoquery --whatprovides somepackage
to see available packages
Newer RPM versions support this cleaner syntax:
Requires: somepackage >= 0.5.0 with somepackage < 0.6.0
When packaging software for RPM-based systems (like RHEL, CentOS, or Fedora), you often need to specify exact version requirements for dependencies. The syntax for version ranges in RPM spec files is powerful but sometimes confusing for newcomers.
To require somepackage
version 0.5.x (specifically >=0.5.0 but <0.6.0), you would use this syntax in your spec file:
Requires: somepackage >= 0.5.0
Requires: somepackage < 0.6.0
Here's a complete example from a spec file that demonstrates this technique:
Name: my-software
Version: 1.2.3
Release: 1%{?dist}
Summary: My awesome software
Requires: python3 >= 3.6
Requires: python3 < 3.9
Requires: somepackage >= 0.5.0
Requires: somepackage < 0.6.0
Requires: otherpackage = 2.4.1
%description
My software that requires specific versions of dependencies.
%install
# Your installation commands here
Some developers prefer using the comma-separated format for multiple requirements:
Requires: somepackage >= 0.5.0, somepackage < 0.6.0
Be aware of these potential issues:
- Don't use logical operators like AND/OR - RPM doesn't support them in this context
- Version comparison is lexicographic, so 0.10.0 is considered newer than 0.9.0
- Always test your package installation in a clean environment to verify dependencies
For more complex scenarios, you can use:
# Using wildcards for patch versions
Requires: somepackage >= 0.5.0-*
Requires: somepackage < 0.6.0-*
# Matching specific releases
Requires: somepackage = 0.5.0-1.el8
After building your RPM, you can check the dependencies with:
rpm -qpR yourpackage.rpm
This will list all requirements exactly as they'll be enforced during installation.
- Be as specific as necessary but no more restrictive than needed
- Document your version requirements in the package description
- Consider using virtual provides for more flexible dependency resolution
- Test your package on multiple distributions if targeting a broad audience