Home Package management How To Download A RPM Package With All Dependencies In CentOS, Fedora, RHEL, AlmaLinux, Rocky Linux

How To Download A RPM Package With All Dependencies In CentOS, Fedora, RHEL, AlmaLinux, Rocky Linux

By sk
Published: Last Updated on 122K views

We can download any package using curl or wget commands, right? However, these commands won't download the required dependencies. You may need to spend some time to manually search and download the dependencies required by the package to install. Well, not anymore! In this brief tutorial, let us see how to download a RPM package with all dependencies in CentOS. I tested this guide on CentOS 7, although the same steps might work on other RPM based systems such as RHEL, Fedora, AlmaLinux and Rocky Linux.

Download a RPM package with all dependencies in CentOS

We can do this in two methods. We are going to use Downloadonly plugin in the first method.

1. Download RPM packages with all dependencies using "Downloadonly" plugin

We can easily download any RPM package with all dependencies using "Downloadonly" plugin for yum command.

To install Downloadonly plugin, run the following command as root user.

# yum install yum-plugin-downloadonly

Now, run the following command to download a RPM package.

# yum install --downloadonly <package-name>

By default, this command will download and save the packages in /var/cache/yum/ location. However, you can download and save the packages in any location of your choice using "--downloaddir" option.

# yum install --downloadonly --downloaddir=<directory> <package-name>

Example:

# yum install --downloadonly --downloaddir=/root/mypackages/ httpd

Sample output:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * epel: epel.mirror.angkasa.id
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================
 Package Arch Version Repository Size
=======================================================================================================================================
Installing:
 httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M
Installing for dependencies:
 apr x86_64 1.4.8-3.el7 base 103 k
 apr-util x86_64 1.5.2-6.el7 base 92 k
 httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k
 mailcap noarch 2.1.41-2.el7 base 31 k

Transaction Summary
=======================================================================================================================================
Install 1 Package (+4 Dependent packages)

Total download size: 3.0 M
Installed size: 10 M
Background downloading packages, then exiting:
(1/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:01 
(2/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01 
(3/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:01 
(4/5): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:01 
(5/5): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:09 
---------------------------------------------------------------------------------------------------------------------------------------
Total 331 kB/s | 3.0 MB 00:00:09 
exiting because "Download Only" specified
Download A RPM Package With All Dependencies Using "Downloadonly" Plugin
Download A RPM Package With All Dependencies Using "Downloadonly" Plugin

Now go the location that you specified in the above command. You will see there the downloaded package with all dependencies. In my case, I have downloaded the packages in /root/mypackages/ directory.

Let us verify the contents.

# ls /root/mypackages/

Sample output:

apr-1.4.8-3.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
httpd-2.4.6-40.el7.centos.4.x86_64.rpm
httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm
List downloaded packages
List downloaded packages

As you see in the above output, the package httpd has been downloaded with all dependencies.

Please note that this plugin is applicable for "yum install/yum update" and not for "yum groupinstall". By default this plugin will download the latest available packages in the repository. You can however download a particular version by specifying the version.

Example:

# yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7

Also, you can download multiple packages at once as shown below.

# yum install --downloadonly --downloaddir=/root/mypackages/ httpd vsftpd

Download - Free Guide: "10 Easy Ways to Restore Your Linux System"

2. Download RPM packages with all dependencies using "Yumdownloader" utility

Yumdownloader is a simple, yet useful command-line utility that downloads any RPM package along with all required dependencies in one go.

Install Yumdownloader using the following command as root user.

# yum install yum-utils

Once installed, run the following command to download a package, for example httpd.

# yumdownloader httpd

To download packages with all dependencies, use --resolve option:

# yumdownloader --resolve httpd

By default, Yumdownloader will download the packages in the current working directory.

To download packages along with all dependencies to a specific location, use --destdir option:

# yumdownloader --resolve --destdir=/root/mypackages/ httpd

Or

# yumdownloader --resolve --destdir /root/mypackages/ httpd

Sample output:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * epel: epel.mirror.angkasa.id
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
(1/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01 
(2/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:02 
(3/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:02 
(4/5): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:03 
(5/5): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:19
Download a RPM package with all dependencies using Yumdownloader utility
Download a RPM package with all dependencies using Yumdownloader utility

Let us verify whether packages have been downloaded in the specified location.

# ls /root/mypackages/

Sample output:

apr-1.4.8-3.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
httpd-2.4.6-40.el7.centos.4.x86_64.rpm
httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm
List downloaded packages
List downloaded packages

Unlike Downloadonly plugin, Yumdownload can download the packages related to a particular group.

# yumdownloader "@Development Tools" --resolve --destdir /root/mypackages/

Personally, I prefer Yumdownloader over Downloadonly plugin for yum. But, both are easy and does the same job. You can pick one that suits you.

You May Also Like

6 comments

Holger Joukl January 8, 2018 - 2:27 pm

Very helpful!

One thing I just noted is that my yumdownloader version does download more packages than necessary for the target arch, even if you explicitly specify it, see also https://bugzilla.redhat.com/show_bug.cgi?id=1045871.

Looks like this is fixed with yum-utils-1.1.31-23.fc20 according to the bug report.

To work around it seems you can do

yumdownloader -x *i686 –archlist=x86_64
Whereas method 1 –downloadonly restricts appropriately to the target arch, just like a regular yum install .

Thanks for sharing,
Holger

Reply
SK January 8, 2018 - 7:18 pm

Thanks for the heads up. Much appreciated.

Reply
Tarvinder Singh July 20, 2018 - 5:56 pm

Thanks for sharing the knowledge. Very helpful

Reply
rre4 March 7, 2020 - 3:16 am

How download all source and binary package?

Reply
Daniel Vianna May 23, 2021 - 5:01 pm

Great tutorial! An improvement would be to explain how to install these packages on another machine that is not connected to the internet. I’m having some trouble with installing a network driver on a new machine, because dnf still wants to find updates via internet before it installs the rpms I downloaded.

Reply
Iresh Dissanayaka April 23, 2022 - 9:34 pm

don’t use dnf command to install. Use the rpm command instead. dnf would anyways try to update the package database.

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More