前幾天我嘗試去創建一個僅包含我們經常在 CentOS 7 下使用的軟件的本地倉庫。當然,我們可以使用 curl 或者 wget 下載任何軟件包,然而這些命令並不能下載要求的依賴軟件包。你必須去花一些時間而且手動的去尋找和下載被安裝的軟件所依賴的軟件包。然而,我們並不是必須這樣。在這個簡短的教程中,我將會帶領你以兩種方式下載軟件包及其所有依賴包。我已經在 CentOS 7 下進行了測試,不過這些相同的步驟或許在其他基於 RPM 管理系統的發行版上也可以工作,例如 RHEL,Fedora 和 Scientific Linux。
方法1利用"Downloadonly"插件下載 RPM 軟件包及其所有依賴包
我們可以通過 yum 命令的 “Downloadonly” 插件下載 RPM 軟件包及其所有依賴包, 為了安裝 Downloadonly 插件,以 root 身份運行以下命令:
yum install yum-plugin-downloadonly
現在,運行以下命令去下載一個 RPM 軟件包
yum install --downloadonly <package-name>
默認情況下,這個命令將會下載並把軟件包保存到 /var/cache/yum/ 的 rhel-{arch}-channel/packageslocation 目錄,不過,你也可以下載和保存軟件包到任何位置,你可以通過 –downloaddir 選項來指定。
yum install --downloadonly --downloaddir=<directory> <package-name>
例子:
yum install --downloadonly --downloaddir=/root/mypackages/ nginx
終端輸出:

Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel/x86_64/metalink | 5.7 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/3): updates/7/x86_64/primary_db | 3.6 MB 00:00:01 (2/3): epel/x86_64/updateinfo | 848 kB 00:00:02 (3/3): epel/x86_64/primary_db | 6.1 MB 00:03:08 Loading mirror speeds from cached hostfile * base: mirrors.cn99.com * epel: mirrors.ustc.edu.cn * extras: mirrors.cn99.com * updates: mirrors.cn99.com Resolving Dependencies --> Running transaction check ---> Package nginx.x86_64 1:1.12.2-1.el7 will be installed --> Processing Dependency: nginx-all-modules = 1:1.12.2-1.el7 for package: 1:nginx-1.12.2-1.el7.x86_64 --> Processing Dependency: nginx-filesystem = 1:1.12.2-1.el7 for package: 1:nginx-1.12.2-1.el7.x86_64 --> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.2)(64bit) for package: 1:nginx-1.12.2-1.el7.x86_64 --> Processing Dependency: nginx-filesystem for package: 1:nginx-1.12.2-1.el7.x86_64 --> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.12.2-1.el7.x86_64 --> Running transaction check ---> Package gperftools-libs.x86_64 0:2.4-8.el7 will be installed --> Processing Dependency: libunwind.so.8()(64bit) for package: gperftools-libs-2.4-8.el7.x86_64 ---> Package nginx-all-modules.noarch 1:1.12.2-1.el7 will be installed --> Processing Dependency: nginx-mod-http-geoip = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch --> Processing Dependency: nginx-mod-http-image-filter = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch --> Processing Dependency: nginx-mod-http-perl = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch --> Processing Dependency: nginx-mod-http-xslt-filter = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch --> Processing Dependency: nginx-mod-mail = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch --> Processing Dependency: nginx-mod-stream = 1:1.12.2-1.el7 for package: 1:nginx-all-modules-1.12.2-1.el7.noarch ---> Package nginx-filesystem.noarch 1:1.12.2-1.el7 will be installed ---> Package openssl-libs.x86_64 1:1.0.1e-42.el7.9 will be updated --> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-42.el7.9 for package: 1:openssl-1.0.1e-42.el7.9.x86_64 ---> Package openssl-libs.x86_64 1:1.0.2k-8.el7 will be an update --> Running transaction check ---> Package libunwind.x86_64 2:1.2-2.el7 will be installed ---> Package nginx-mod-http-geoip.x86_64 1:1.12.2-1.el7 will be installed --> Processing Dependency: GeoIP for package: 1:nginx-mod-http-geoip-1.12.2-1.el7.x86_64 --> Processing Dependency: libGeoIP.so.1()(64bit) for package: 1:nginx-mod-http-geoip-1.12.2-1.el7.x86_64 ---> Package nginx-mod-http-image-filter.x86_64 1:1.12.2-1.el7 will be installed --> Processing Dependency: gd for package: 1:nginx-mod-http-image-filter-1.12.2-1.el7.x86_64 --> Processing Dependency: libgd.so.2()(64bit) for package: 1:nginx-mod-http-image-filter-1.12.2-1.el7.x86_64 ---> Package nginx-mod-http-perl.x86_64 1:1.12.2-1.el7 will be installed ---> Package nginx-mod-http-xslt-filter.x86_64 1:1.12.2-1.el7 will be installed --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: 1:nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: 1:nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64 --> Processing Dependency: libexslt.so.0()(64bit) for package: 1:nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64 --> Processing Dependency: libxslt.so.1()(64bit) for package: 1:nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64 ---> Package nginx-mod-mail.x86_64 1:1.12.2-1.el7 will be installed ---> Package nginx-mod-stream.x86_64 1:1.12.2-1.el7 will be installed ---> Package openssl.x86_64 1:1.0.1e-42.el7.9 will be updated ---> Package openssl.x86_64 1:1.0.2k-8.el7 will be an update --> Running transaction check ---> Package GeoIP.x86_64 0:1.5.0-11.el7 will be installed ---> Package gd.x86_64 0:2.0.35-26.el7 will be installed --> Processing Dependency: libpng15.so.15(PNG15_0)(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libjpeg.so.62(LIBJPEG_6.2)(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libpng15.so.15()(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libjpeg.so.62()(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libfontconfig.so.1()(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libXpm.so.4()(64bit) for package: gd-2.0.35-26.el7.x86_64 --> Processing Dependency: libX11.so.6()(64bit) for package: gd-2.0.35-26.el7.x86_64 ---> Package libxslt.x86_64 0:1.1.28-5.el7 will be installed --> Running transaction check ---> Package fontconfig.x86_64 0:2.10.95-11.el7 will be installed --> Processing Dependency: fontpackages-filesystem for package: fontconfig-2.10.95-11.el7.x86_64 --> Processing Dependency: font(:lang=en) for package: fontconfig-2.10.95-11.el7.x86_64 ---> Package libX11.x86_64 0:1.6.5-1.el7 will be installed --> Processing Dependency: libX11-common >= 1.6.5-1.el7 for package: libX11-1.6.5-1.el7.x86_64 --> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.6.5-1.el7.x86_64 ---> Package libXpm.x86_64 0:3.5.12-1.el7 will be installed ---> Package libjpeg-turbo.x86_64 0:1.2.90-5.el7 will be installed ---> Package libpng.x86_64 2:1.5.13-7.el7_2 will be installed --> Running transaction check ---> Package fontpackages-filesystem.noarch 0:1.44-8.el7 will be installed ---> Package libX11-common.noarch 0:1.6.5-1.el7 will be installed ---> Package libxcb.x86_64 0:1.12-1.el7 will be installed --> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.12-1.el7.x86_64 ---> Package lyx-fonts.noarch 0:2.2.3-1.el7 will be installed --> Running transaction check ---> Package libXau.x86_64 0:1.0.8-2.1.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================================================================================================================================================== Package Arch Version Repository Size ==================================================================================================================================================================================================================================== Installing: nginx x86_64 1:1.12.2-1.el7 epel 529 k Installing for dependencies: GeoIP x86_64 1.5.0-11.el7 base 1.1 M fontconfig x86_64 2.10.95-11.el7 base 229 k fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k gd x86_64 2.0.35-26.el7 base 146 k gperftools-libs x86_64 2.4-8.el7 base 272 k libX11 x86_64 1.6.5-1.el7 base 606 k libX11-common noarch 1.6.5-1.el7 base 164 k libXau x86_64 1.0.8-2.1.el7 base 29 k libXpm x86_64 3.5.12-1.el7 base 55 k libjpeg-turbo x86_64 1.2.90-5.el7 base 134 k libpng x86_64 2:1.5.13-7.el7_2 base 213 k libunwind x86_64 2:1.2-2.el7 base 57 k libxcb x86_64 1.12-1.el7 base 211 k libxslt x86_64 1.1.28-5.el7 base 242 k lyx-fonts noarch 2.2.3-1.el7 epel 159 k nginx-all-modules noarch 1:1.12.2-1.el7 epel 16 k nginx-filesystem noarch 1:1.12.2-1.el7 epel 17 k nginx-mod-http-geoip x86_64 1:1.12.2-1.el7 epel 23 k nginx-mod-http-image-filter x86_64 1:1.12.2-1.el7 epel 26 k nginx-mod-http-perl x86_64 1:1.12.2-1.el7 epel 35 k nginx-mod-http-xslt-filter x86_64 1:1.12.2-1.el7 epel 25 k nginx-mod-mail x86_64 1:1.12.2-1.el7 epel 53 k nginx-mod-stream x86_64 1:1.12.2-1.el7 epel 76 k Updating for dependencies: openssl x86_64 1:1.0.2k-8.el7 base 492 k openssl-libs x86_64 1:1.0.2k-8.el7 base 1.2 M Transaction Summary ==================================================================================================================================================================================================================================== Install 1 Package (+23 Dependent packages) Upgrade ( 2 Dependent packages) Total download size: 6.0 M Background downloading packages, then exiting: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. (1/26): fontpackages-filesystem-1.44-8.el7.noarch.rpm | 9.9 kB 00:00:00 (2/26): fontconfig-2.10.95-11.el7.x86_64.rpm | 229 kB 00:00:00 (3/26): gd-2.0.35-26.el7.x86_64.rpm | 146 kB 00:00:00 (4/26): libX11-1.6.5-1.el7.x86_64.rpm | 606 kB 00:00:00 (5/26): libX11-common-1.6.5-1.el7.noarch.rpm | 164 kB 00:00:00 (6/26): libXau-1.0.8-2.1.el7.x86_64.rpm | 29 kB 00:00:00 (7/26): libXpm-3.5.12-1.el7.x86_64.rpm | 55 kB 00:00:00 (8/26): libjpeg-turbo-1.2.90-5.el7.x86_64.rpm | 134 kB 00:00:00 (9/26): libpng-1.5.13-7.el7_2.x86_64.rpm | 213 kB 00:00:00 (10/26): libunwind-1.2-2.el7.x86_64.rpm | 57 kB 00:00:00 (11/26): libxcb-1.12-1.el7.x86_64.rpm | 211 kB 00:00:00 (12/26): libxslt-1.1.28-5.el7.x86_64.rpm | 242 kB 00:00:00 warning: /root/mypackages/lyx-fonts-2.2.3-1.el7.noarch.rpm.12470.tmp: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY Public key for lyx-fonts-2.2.3-1.el7.noarch.rpm.12470.tmp is not installed (13/26): lyx-fonts-2.2.3-1.el7.noarch.rpm | 159 kB 00:00:00 (14/26): GeoIP-1.5.0-11.el7.x86_64.rpm | 1.1 MB 00:00:01 (15/26): nginx-filesystem-1.12.2-1.el7.noarch.rpm | 17 kB 00:00:00 (16/26): nginx-mod-http-image-filter-1.12.2-1.el7.x86_64.rpm | 26 kB 00:00:00 (17/26): nginx-all-modules-1.12.2-1.el7.noarch.rpm | 16 kB 00:00:00 (18/26): nginx-mod-http-perl-1.12.2-1.el7.x86_64.rpm | 35 kB 00:00:00 (19/26): nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64.rpm | 25 kB 00:00:00 (20/26): nginx-mod-stream-1.12.2-1.el7.x86_64.rpm | 76 kB 00:00:00 (21/26): nginx-mod-mail-1.12.2-1.el7.x86_64.rpm | 53 kB 00:00:00 (22/26): nginx-1.12.2-1.el7.x86_64.rpm | 529 kB 00:00:01 (23/26): openssl-1.0.2k-8.el7.x86_64.rpm | 492 kB 00:00:00 (24/26): openssl-libs-1.0.2k-8.el7.x86_64.rpm | 1.2 MB 00:00:00 (25/26): nginx-mod-http-geoip-1.12.2-1.el7.x86_64.rpm | 23 kB 00:00:01 (26/26): gperftools-libs-2.4-8.el7.x86_64.rpm | 272 kB 00:00:13 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 438 kB/s | 6.0 MB 00:00:13 exiting because "Download Only" specified
現在去你指定的目錄位置下,你將會看到那里有下載好的軟件包和依賴的軟件。在我這種情況下,我已經把軟件包下載到 /root/mypackages/ 目錄下。
讓我們來查看一下內容:
[root@node76 ~]# ls mypackages/ fontconfig-2.10.95-11.el7.x86_64.rpm libpng-1.5.13-7.el7_2.x86_64.rpm libXpm-3.5.12-1.el7.x86_64.rpm nginx-mod-http-geoip-1.12.2-1.el7.x86_64.rpm openssl-1.0.2k-8.el7.x86_64.rpm fontpackages-filesystem-1.44-8.el7.noarch.rpm libunwind-1.2-2.el7.x86_64.rpm libxslt-1.1.28-5.el7.x86_64.rpm nginx-mod-http-image-filter-1.12.2-1.el7.x86_64.rpm openssl-libs-1.0.2k-8.el7.x86_64.rpm gd-2.0.35-26.el7.x86_64.rpm libX11-1.6.5-1.el7.x86_64.rpm lyx-fonts-2.2.3-1.el7.noarch.rpm nginx-mod-http-perl-1.12.2-1.el7.x86_64.rpm GeoIP-1.5.0-11.el7.x86_64.rpm libX11-common-1.6.5-1.el7.noarch.rpm nginx-1.12.2-1.el7.x86_64.rpm nginx-mod-http-xslt-filter-1.12.2-1.el7.x86_64.rpm gperftools-libs-2.4-8.el7.x86_64.rpm libXau-1.0.8-2.1.el7.x86_64.rpm nginx-all-modules-1.12.2-1.el7.noarch.rpm nginx-mod-mail-1.12.2-1.el7.x86_64.rpm libjpeg-turbo-1.2.90-5.el7.x86_64.rpm libxcb-1.12-1.el7.x86_64.rpm nginx-filesystem-1.12.2-1.el7.noarch.rpm nginx-mod-stream-1.12.2-1.el7.x86_64.rpm
正如你在上面輸出所看到的, nginx軟件包已經被依據所有依賴性下載完成了 。
請注意,這個插件適用於 yum install/yum update, 但是並不適用於 yum groupinstall。默認情況下,這個插件將會下載倉庫中最新可用的軟件包。然而你可以通過指定版本號來下載某個特定的軟件版本。
例子:
yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7
此外,你也可以如下一次性下載多個包:
yum install --downloadonly --downloaddir=/root/mypackages/ httpd vsftpd
方法 2 使用 "Yumdownloader"工具來下載 RPM 軟件包及其所有依賴包
“Yumdownloader” 是一款簡單,但是卻十分有用的命令行工具,它可以一次性下載任何 RPM 軟件包及其所有依賴包。
以 root 身份運行如下命令安裝 “Yumdownloader” 工具。
yum install yum-utils
一旦安裝完成,運行如下命令去下載一個軟件包,例如 httpd:
yumdownloader httpd
為了根據所有依賴性下載軟件包,我們使用 --resolve 參數:
yumdownloader --resolve httpd
默認情況下,Yumdownloader 將會下載軟件包到當前工作目錄下。
為了將軟件下載到一個特定的目錄下,我們使用 --destdir 參數:
yumdownloader --resolve --destdir=/root/mypackages/ httpd
或者:
yumdownloader --resolve --destdir /root/mypackages/ httpd
終端輸出:

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
讓我們確認一下軟件包是否被下載到我們指定的目錄下:
ll /root/mypackages/ 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
不像 Downloadonly 插件,Yumdownload 可以下載一組相關的軟件包。
yumdownloader "@Development Tools" --resolve --destdir /root/mypackages/