An RPM is a file container to install and update packages on Linux operating systems. These packages are used in many Linux distributions such as CentOS, Fedora, openSUSE, AlmaLinux, PCLinuxOS, OpenMandriva, and Oracle Linux.
Dependencies are packages that an RPM requires to function. Sometimes, we might need to check the dependent packages of the RPM and get some details — for example, the number of connections with other packages, sizes, or versions.
In this tutorial, we’re going to learn different ways to check RPM dependencies from the command line. As an example, we’re going to use the nano package.
2. Dependency List of RPM
2.1. Installed RPM
The rpm command manages packages. It can build, install, query, verify, update, and remove packages.
In this case, we’re going to get some info about an RPM:
$ rpm -qR nano config(nano) = 5.6.1-5.el9 libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.27)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.33)(64bit) libc.so.6(GLIBC_2.34)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.6)(64bit) libmagic.so.1()(64bit) libncursesw.so.6()(64bit) libtinfo.so.6()(64bit) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsZstd) <= 5.4.18-1 rtld(GNU_HASH)
Here, we use -q (–query) option along with the package name. Moreover, -R (–requires) lists what the package depends on.
2.2. Non-Installed RPM
We can use the yum or dnf commands if the RPM exists in the online or offline repo:
$ yum deplist nano Last metadata expiration check: 0:01:50 ago on Wed 01 Mar 2023 11:32:17 AM UTC. package: nano-5.6.1-5.el9.x86_64 dependency: libc.so.6(GLIBC_2.34)(64bit) provider: glibc-2.34-60.el9.x86_64 dependency: libmagic.so.1()(64bit) provider: file-libs-5.39-12.el9.x86_64 dependency: libncursesw.so.6()(64bit) provider: ncurses-libs-6.2-8.20210508.el9.x86_64 ...
The yum deplist option lists all the given package’s relations. In the result, we can see our selected package with the latest available version and the list of all related packages and providers.
3. Using the repoquery Tool
The repoquery tool is a program for querying info from a YUM repo. This program works for both installed and non-installed packages.
To use it, we can install it via yum or dnf:
$ yum install yum-utils
We should use –requires and –resolve with the repoquery command. Moreover, if we’re going to get info about an RPM file on our system, we use the full name of that file:
$ repoquery --requires --resolve nano-2.9.8-1.el8.x86_64.rpm Last metadata expiration check: 0:04:19 ago on Fri 03 Mar 2023 10:21:28 AM UTC. bash-0:5.1.8-6.el9.x86_64 file-libs-0:5.39-12.el9.x86_64 glibc-0:2.34-60.el9.i686 glibc-0:2.34-60.el9.x86_64 info-0:6.7-15.el9.x86_64 nano-0:2.9.8-1.el8.x86_64 ncurses-libs-0:6.2-8.20210508.el9.x86_64
This way, we don’t need it to be installed to extract the necessary data.
In addition, if we want to check the repo, we can just write the package’s name:
$ repoquery --requires --resolve nano Last metadata expiration check: 0:00:10 ago on Fri 03 Mar 2023 10:21:28 AM UTC. file-libs-0:5.39-12.el9.x86_64 glibc-0:2.34-60.el9.i686 glibc-0:2.34-60.el9.x86_64 ncurses-libs-0:6.2-8.20210508.el9.x86_64
In this case, the nano package in the repo is the latest version. So, the result is different from the previous command, which deals with an older version.
4. Using the rpmreaper Tool
rpmreaper is an ncurses application that basically allows removing unnecessary packages and their connections from the system. Moreover, we can use this tool to see the RPM packages in a tree view.
To install rpmreaper, we can again use yum or dnf. However, on some Linux distros, we might first need to install the EPEL repo via the epel-release package:
$ yum install epel-release
Now, we can install rpmreaper:
$ yum install rpmreaper
At this point, we can simply run it to browse the RPM tree:
In the first column, we can see that every package has a flag (L, o, B):
- L – leaf, meaning no other package depends on this one
- o – part of a cycle
- B – missing dependencies
To see the full list, we use the Up and Down arrow keys. Also, we can press the r key on a selected package to show its connections.
Besides, we can use the i key to see the full details of a package:
Name : nano Version : 5.6.1 Release : 5.e19 Architecture: x86_64 Install Date: Wed 01 Mar 2023 11:47:43 AM UTC Group : Unspecified Size : 2835120 License : GPLv3+ Signature : RSA/SHA256, Wed 11 Aug 2021 05:33:36 AM UTC, Key ID 05b555b38483c65d Source RPM : nano-5.6.1-5.el9.src.rpm Build Date : Tue 10 Aug 2021 01:16:05 AM UTC Build Host : X86-06.stream.rdu2.redhat.com Packager : [email protected] Vendor : CentOS URI : https://www.nano-editor.org Summary : A small text editor Description : GNU nano is a small and friendly text editor. Files: /etc/nanorc /usr/bin/nano /usr/bin/rnano /us/lib/.build-id /usr/lib/.build-id/8d ...
Now, we have a lot of info about our specified package. For example, we have the Licence, Signature, Original website, and above all, our package’s files in a list.
5. Using the rpmdep Tool
First, let’s install perl and rpmorphan:
$ yum install perl rpmorphan
In CentOS, we should first download the package, then install it via the rpm command:
$ wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/r/rpmorphan-1.15-1.el7.noarch.rpm $ rpm -ivh rpmorphan-1.15-1.el7.noarch.rpm
Now, we can simply use rpmdep.pl to check our package:
$ rpmdep.pl nano nano depends upon basesystem,bash,centos-gpg-keys,centos-stream-release,centos-stream-repos,file-libs,filesystem,glibc,glibc-common,glibc-langpack-en,libgcc,ncurses-base,ncurses-libs,setup,tzdata,zlib
We also can check if a package has parents or is an orphan by using the -depending option:
$ rpmdep.pl -depending nano nano is needed by default-editor, nano-default-editor
In this example, the nano package is not an orphan and it is needed by two packages.
In this article, we’ve reviewed different ways to check RPM dependencies from the command line. To sum up, depending on whether we want to check installed, non-installed, or downloaded RPMs, or how much info we need from packages, we can choose different ways accordingly.