How to List All RPM Package Dependencies on CentOS (Including Deep Dependency Trees)


2 views

When working with CentOS 5.2 or other RPM-based systems, package dependencies can become crucial for system maintenance. The duplicate entries you're seeing (sqlite-3.3.6-2 appearing twice) might indicate either multiple installations or a display quirk in older RPM versions.

Method 1: Using rpm -qR

rpm -qR sqlite-3.3.6-2

This command shows all direct dependencies for the specified package. The output will list:

  • Required libraries (.so files)
  • Other RPM packages needed
  • Configuration file dependencies

Method 2: Full Dependency Tree with repoquery

yum install yum-utils
repoquery --requires --resolve sqlite

This provides a complete dependency tree, showing both direct and indirect dependencies.

The duplicate entries in rpm -qa output can occur because:

rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | grep sqlite

This formatted query will reveal if you're seeing different architectures (i386 vs x86_64) or genuine duplicates.

For deeper analysis, use RPM's query capabilities:

rpm -q --provides sqlite-3.3.6-2    # Shows what capabilities this package provides
rpm -q --whatrequires sqlite        # Shows packages depending on SQLite
rpm -q --changelog sqlite           # Review package history

Here's a sample bash script to document all dependencies for a package:

#!/bin/bash
PKG="sqlite-3.3.6-2"
echo "Dependency report for $PKG"
echo "=========================="
echo -e "\nDirect dependencies:"
rpm -qR $PKG | sort | uniq
echo -e "\nReverse dependencies (what requires this):"
rpm -q --whatrequires $PKG | sort | uniq

For CentOS 5.2 specifically, consider these additional steps:

up2date --show-deps sqlite          # Alternative to yum on RHEL/CentOS 5
rpm -qpR /path/to/sqlite.rpm        # For examining uninstalled packages

When running rpm -qa | grep sqlite on CentOS 5.2, you might notice duplicate entries like:

sqlite-3.3.6-2
sqlite-3.3.6-2

This typically occurs when the package is installed in multiple architectures (e.g., i386 and x86_64) or when there are multiple installation records due to incomplete uninstalls.

To list all dependencies for an installed RPM package, use:

rpm -qR package_name

For your SQLite example:

rpm -qR sqlite-3.3.6-2

This will output all required dependencies including libraries and other packages.

For more detailed analysis, try these commands:

# Show all files in the package
rpm -ql sqlite-3.3.6-2

# Verify package integrity
rpm -V sqlite-3.3.6-2

# Show package info including dependencies
rpm -qi sqlite-3.3.6-2

For recursive dependency listing, you might need to use yum (if available):

yum deplist sqlite

Or with rpm directly:

rpm -q --requires --recursive sqlite | sort | uniq

Here's what you might see for SQLite:

libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.3)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

Understanding dependencies is crucial when:

  • Migrating servers
  • Troubleshooting missing libraries
  • Building container images
  • Creating deployment packages