How to Specify Version Range Dependencies in RPM (somepackage >= 0.5.0 AND < 0.6.0)


1 views

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:

  1. Verify available versions with yum list available somepackage
  2. Check what versions would be installed with yum deplist yourpackage.rpm
  3. 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