In my last article I have already shared the steps to sync (download) the online repositories from CentOS / RHEL 7 to your local machine, to use them offline when you do not have access to internet. In this article I will share the steps to download rpm package and all dependencies so that you don't have to struggle downloading the rpm's dependencies separately.
These are some of the commands which you can use to perform this
- yumdownloader
- repotrack
Pre-requisites
Both yumdownloader
and repotrack
are part of yum-utils
rpm so install this rpm before starting to use these tools.
# yum install -y yum-utils
Using yumdownloader to download rpm package and all dependencies
Below is the command to download rpm package with all it's dependencies
# yumdownloader --downloadonly --downloaddir=. glibc --resolve Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.excellmedia.net * extras: centos.excellmedia.net * updates: centos.excellmedia.net No Match for argument . --> Running transaction check ---> Package glibc.i686 0:2.17-222.el7 will be installed --> Processing Dependency: glibc-common = 2.17-222.el7 for package: glibc-2.17-222.el7.i686 --> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.17-222.el7.i686 --> Processing Dependency: libfreebl3.so for package: glibc-2.17-222.el7.i686 ---> Package glibc.x86_64 0:2.17-222.el7 will be installed --> Running transaction check ---> Package glibc-common.x86_64 0:2.17-196.el7 will be updated --> Processing Dependency: glibc-common = 2.17-196.el7 for package: glibc-2.17-196.el7.x86_64 ---> Package glibc-common.x86_64 0:2.17-222.el7 will be an update ---> Package nss-softokn-freebl.x86_64 0:3.28.3-6.el7 will be updated ---> Package nss-softokn-freebl.i686 0:3.36.0-5.el7_5 will be installed --> Processing Dependency: nss-util >= 3.36.0-1 for package: nss-softokn-freebl-3.36.0-5.el7_5.i686 --> Processing Dependency: nspr >= 4.19.0 for package: nss-softokn-freebl-3.36.0-5.el7_5.i686 ---> Package nss-softokn-freebl.x86_64 0:3.36.0-5.el7_5 will be an update --> Running transaction check ---> Package glibc.x86_64 0:2.17-196.el7 will be updated --> Processing Dependency: glibc = 2.17-196.el7 for package: glibc-headers-2.17-196.el7.x86_64 --> Processing Dependency: glibc = 2.17-196.el7 for package: glibc-devel-2.17-196.el7.x86_64 ---> Package nspr.x86_64 0:4.13.1-1.0.el7_3 will be updated ---> Package nspr.x86_64 0:4.19.0-1.el7_5 will be an update ---> Package nss-util.x86_64 0:3.28.4-3.el7 will be updated ---> Package nss-util.x86_64 0:3.36.0-1.el7_5 will be an update --> Running transaction check ---> Package glibc-devel.x86_64 0:2.17-196.el7 will be updated ---> Package glibc-devel.x86_64 0:2.17-222.el7 will be an update ---> Package glibc-headers.x86_64 0:2.17-196.el7 will be updated ---> Package glibc-headers.x86_64 0:2.17-222.el7 will be an update --> Finished Dependency Resolution (1/2): nss-softokn-freebl-3.36.0-5.el7_5.i686.rpm | 211 kB 00:00:00 (2/2): glibc-2.17-222.el7.i686.rpm | 4.2 MB 00:00:01 exiting because "Download Only" specified
For example here I am downloading glibc
and all it's dependency rpms
# yumdownloader --downloadonly --downloaddir=/tmp/ glibc --resolve
repoquery
to find the dependencies and then use yumdownloader
to download them# repoquery -R --resolve --recursive glibc |xargs -r yumdownloader
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: centos.excellmedia.net
* extras: centos.excellmedia.net
* updates: centos.excellmedia.net
No Presto metadata available for base
(1/27): basesystem-10.0-7.el7.centos.noarch.rpm | 5.0 kB 00:00:00
(2/27): centos-release-7-5.1804.el7.centos.x86_64.rpm | 24 kB 00:00:00
(3/27): chkconfig-1.7.4-1.el7.x86_64.rpm | 181 kB 00:00:00
(4/27): gmp-6.0.0-15.el7.i686.rpm | 416 kB 00:00:00
(5/27): gawk-4.0.2-4.el7_3.1.x86_64.rpm | 874 kB 00:00:00
(6/27): gmp-6.0.0-15.el7.x86_64.rpm | 281 kB 00:00:00
(7/27): keyutils-libs-1.5.8-3.el7.i686.rpm | 25 kB 00:00:00
(8/27): keyutils-libs-1.5.8-3.el7.x86_64.rpm | 25 kB 00:00:00
(9/27): libcap-2.22-9.el7.x86_64.rpm | 47 kB 00:00:00
(10/27): grep-2.20-3.el7.x86_64.rpm | 344 kB 00:00:00
(11/27): libffi-3.0.13-18.el7.i686.rpm | 27 kB 00:00:00
(12/27): libffi-3.0.13-18.el7.x86_64.rpm | 30 kB 00:00:00
(13/27): libverto-0.2.5-4.el7.x86_64.rpm | 16 kB 00:00:00
(14/27): libgcc-4.8.5-28.el7_5.1.i686.rpm | 108 kB 00:00:00
(15/27): libtasn1-4.10-1.el7.x86_64.rpm | 320 kB 00:00:00
(16/27): nss-softokn-freebl-3.34.0-2.el7.i686.rpm | 206 kB 00:00:00
(17/27): nspr-4.19.0-1.el7_5.i686.rpm | 128 kB 00:00:00
(18/27): nss-softokn-freebl-3.34.0-2.el7.x86_64.rpm | 220 kB 00:00:00
(19/27): p11-kit-0.23.5-3.el7.i686.rpm | 241 kB 00:00:00
(20/27): nss-util-3.36.0-1.el7_5.i686.rpm | 76 kB 00:00:00
(21/27): p11-kit-trust-0.23.5-3.el7.x86_64.rpm | 129 kB 00:00:00
(22/27): p11-kit-0.23.5-3.el7.x86_64.rpm | 252 kB 00:00:00
(23/27): pcre-8.32-17.el7.i686.rpm | 420 kB 00:00:00
(24/27): popt-1.13-16.el7.x86_64.rpm | 42 kB 00:00:00
(25/27): pcre-8.32-17.el7.x86_64.rpm | 422 kB 00:00:00
(26/27): zlib-1.2.7-17.el7.x86_64.rpm | 90 kB 00:00:00
(27/27): sed-4.2.2-5.el7.x86_64.rpm | 231 kB 00:00:00
This command will download glibc
rpm and all it's dependencies in your current working directory. So as you see this command was successfully able to get larger list of dependencies which was skipped when we only used yumdownloader
.
Using repotrack to download rpm package and all dependencies
repotrack
is a program for keeping track of a particular package and its dependencies. It will download one or more packages and all dependencies.
Using the below command I am downloading glibc
and all it's dependencies using repotrack
in it's current directory
# repotrack glibc
Downloading basesystem-10.0-7.el7.centos.noarch.rpm
Downloading bash-4.2.46-30.el7.x86_64.rpm
Downloading ca-certificates-2018.2.22-70.0.el7_5.noarch.rpm
Downloading centos-release-7-5.1804.4.el7.centos.x86_64.rpm
Downloading chkconfig-1.7.4-1.el7.x86_64.rpm
Downloading coreutils-8.22-21.el7.x86_64.rpm
Downloading filesystem-3.2-25.el7.x86_64.rpm
Downloading gawk-4.0.2-4.el7_3.1.x86_64.rpm
Downloading glibc-2.17-222.el7.i686.rpm
Downloading glibc-2.17-222.el7.x86_64.rpm
Downloading glibc-common-2.17-222.el7.x86_64.rpm
Downloading gmp-6.0.0-15.el7.i686.rpm
Downloading gmp-6.0.0-15.el7.x86_64.rpm
Downloading grep-2.20-3.el7.x86_64.rpm
Downloading info-5.1-5.el7.x86_64.rpm
Downloading keyutils-libs-1.5.8-3.el7.i686.rpm
Downloading keyutils-libs-1.5.8-3.el7.x86_64.rpm
Downloading krb5-libs-1.15.1-19.el7.x86_64.rpm
Downloading libacl-2.2.51-14.el7.x86_64.rpm
Downloading libattr-2.4.46-13.el7.x86_64.rpm
Downloading libcap-2.22-9.el7.x86_64.rpm
Downloading libcom_err-1.42.9-12.el7_5.x86_64.rpm
Downloading libffi-3.0.13-18.el7.i686.rpm
Downloading libffi-3.0.13-18.el7.x86_64.rpm
Downloading libgcc-4.8.5-28.el7_5.1.i686.rpm
Downloading libgcc-4.8.5-28.el7_5.1.x86_64.rpm
Downloading libselinux-2.5-12.el7.x86_64.rpm
Downloading libsepol-2.5-8.1.el7.x86_64.rpm
Downloading libstdc++-4.8.5-28.el7_5.1.i686.rpm
Downloading libstdc++-4.8.5-28.el7_5.1.x86_64.rpm
Downloading libtasn1-4.10-1.el7.x86_64.rpm
Downloading libverto-0.2.5-4.el7.x86_64.rpm
Downloading ncurses-5.9-14.20130511.el7_4.x86_64.rpm
Downloading ncurses-base-5.9-14.20130511.el7_4.noarch.rpm
Downloading ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm
Downloading nspr-4.19.0-1.el7_5.i686.rpm
Downloading nspr-4.19.0-1.el7_5.x86_64.rpm
Downloading nss-softokn-freebl-3.36.0-5.el7_5.i686.rpm
Downloading nss-softokn-freebl-3.36.0-5.el7_5.x86_64.rpm
Downloading nss-util-3.36.0-1.el7_5.x86_64.rpm
Downloading nss-util-3.36.0-1.el7_5.i686.rpm
Downloading openssl-libs-1.0.2k-12.el7.x86_64.rpm
Downloading p11-kit-0.23.5-3.el7.i686.rpm
Downloading p11-kit-0.23.5-3.el7.x86_64.rpm
Downloading p11-kit-trust-0.23.5-3.el7.x86_64.rpm
Downloading pcre-8.32-17.el7.x86_64.rpm
Downloading pcre-8.32-17.el7.i686.rpm
Downloading popt-1.13-16.el7.x86_64.rpm
Downloading sed-4.2.2-5.el7.x86_64.rpm
Downloading setup-2.8.71-9.el7.noarch.rpm
Downloading tzdata-2018e-3.el7.noarch.rpm
Downloading zlib-1.2.7-17.el7.x86_64.rpm
This command also successfully download all the list of dependencies for glibc
rpm.
Lastly I hope the steps from the article to download rpm package and all dependencies on (RHEL / CentOS 7) Linux node was helpful. So, let me know your suggestions and feedback using the comment section.
Poor instructions.
When yum can not find a dependency it does not give the name of the rpm file – only a hint of what the name is. It becomes a guessing game to try and find out the name of the rpm file. This looks like an obfuscation by yum and this web site.
How do you expect to find the dependency if you don’t know the rpm name itself? Yum and dnf have improved and now atleast they give us a hint of the nearest matching rpm name.
How i can download and install all package in one command?
You can just us “
yum install <pkg_name>
“, it should download the rpm and then install it.But assuming you have a valid repository in place to download the rpm
Question: If I do this (on CentOS 7)…
yum install pgdg-redhat-repo-latest.noarch.rpm
…does it just build and/or update my local /etc/yum.repos.d ?
If not, what exactly happens with that particular yum command ?
This should create a new repo file under /etc/yum.repos.d/
This does not means that you are updating any local database, it will just get the repository information for the provided repo which I think is Postgesql so once this repo is in place you can use yum to install the packages from this repo