Yum自动下载RPM包及其所有依赖的包

本文介绍在CentOS7系统中如何使用Downloadonly插件和Yumdownloader工具下载RPM软件包及其所有依赖包。通过具体步骤和实例演示,使读者能够快速掌握两种下载方法。

前几天我尝试去创建一个仅包含我们经常在 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

终端输出:

View Code

现在去你指定的目录位置下,你将会看到那里有下载好的软件包和依赖的软件。在我这种情况下,我已经把软件包下载到 /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

终端输出:

View Code

让我们确认一下软件包是否被下载到我们指定的目录下:

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/

 

<think>我们面临的问题是:如何手动下载一个RPM及其所有依赖项?根据引用内容,主要有两种方法:使用yum的downloadonly插件和使用yumdownloader工具。此外,在CentOS 8及以上版本可以使用dnf download命令(因为CentOS 8开始默认使用dnf)。 注意:这些方法都需要在能够正常使用yum/dnf的系统上执行(即系统本身没有损坏,可以正常安装软件和解析依赖关系)。如果系统已经损坏(如缺少关键库),则需要在另一台相同版本、架构的系统上进行下载。 下面分别介绍三种方法: ### 方法1:使用yum的downloadonly插件(适用于CentOS 7及以下,使用yum的系统) 1. **安装downloadonly插件**(如果尚未安装): ```bash sudo yum install yum-plugin-downloadonly ``` 2. **下载RPM及其依赖**: ```bash sudo yum install --downloadonly --downloaddir=<下载目录> <名> ``` 例如,下载httpd及其依赖到当前目录下的httpd_deps目录: ```bash sudo yum install --downloadonly --downloaddir=./httpd_deps httpd ``` 注意:`--downloadonly`参数表示仅下载,不安装。`--downloaddir`指定下载目录,如果目录不存在会自动创建。 ### 方法2:使用yumdownloader工具(适用于yum系统) 1. **安装yum-utils**(yumdownloader): ```bash sudo yum install yum-utils ``` 2. **下载RPM及其依赖**: ```bash yumdownloader --resolve --destdir=<下载目录> <名> ``` 例如: ```bash yumdownloader --resolve --destdir=./mariadb_deps mariadb-server ``` 参数说明: - `--resolve`:同时下载依赖- `--destdir`:指定下载目录。 ### 方法3:使用dnf download命令(适用于CentOS 8及以上) 1. **安装dnf-plugins-core**(如果尚未安装): ```bash sudo dnf install dnf-plugins-core ``` 2. **下载RPM及其依赖**: ```bash dnf download --resolve --destdir=<下载目录> <名> ``` 例如: ```bash dnf download --resolve --destdir=./vim_deps vim ``` ### 注意事项 1. 以上命令都需要在能够正常访问yum/dnf仓库的系统上执行。 2. 如果需要下载已经安装,则`yum install --downloadonly`可能会提示“Package already installed”,但仍然会下载依赖。为了避免这种情况,可以添加`--setopt=skip_missing_names_on_install=False`参数,或者使用`yum reinstall --downloadonly`。 3. 下载依赖可能含系统已安装的,但为了离线安装的完整性,建议全部下载。 ### 示例:下载Chrome浏览器及其依赖 假设我们要下载Google Chrome浏览器(google-chrome-stable)及其所有依赖,但我们知道系统仓库中可能没有这个,所以需要先添加Google Chrome仓库,然后再下载。但这里我们假设已经配置好仓库(或直接下载RPM文件,但需要其依赖),我们可以这样操作: 1. 添加Google Chrome仓库: ```bash sudo tee /etc/yum.repos.d/google-chrome.repo <<EOF [google-chrome] name=google-chrome baseurl=https://dl.google.com/linux/chrome/rpm/stable/x86_64 enabled=1 gpgcheck=1 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub EOF ``` 2. 使用yumdownloader下载: ```bash yumdownloader --resolve --destdir=./chrome_deps google-chrome-stable ``` 或者使用yum的downloadonly插件: ```bash sudo yum install --downloadonly --downloaddir=./chrome_deps google-chrome-stable ``` ### 特殊情况:无法直接访问仓库 如果无法直接通过yum/dnf访问仓库(例如,需要下载来自本地文件),可以尝试以下步骤: 1. 将需要安装的RPM放入一个目录,例如`/tmp/local_packages`。 2. 创建一个本地仓库: ```bash sudo yum install -y createrepo createrepo /tmp/local_packages ``` 3. 创建一个repo文件指向这个目录: ```bash sudo tee /etc/yum.repos.d/local.repo <<EOF [local] name=Local Repository baseurl=file:///tmp/local_packages enabled=1 gpgcheck=0 EOF ``` 4. 然后使用上述方法(yum install --downloadonly或yumdownloader)下载时,系统会解析该依赖括从其他仓库获取依赖)。 ### 总结 手动下载RPM及其依赖项主要使用系统管理工具(yum/dnf)提供的插件或工具。核心步骤括: 1. 确保系统管理工具正常工作; 2. 安装必要的插件(如yum-plugin-downloadonly, yum-utils, dnf-plugins-core); 3. 使用命令下载目标及其依赖到指定目录。 这样就可以将下载的目录拷贝到离线机器上进行安装。 §§相关问题§§ 1. 如何在没有网络连接的系统中安装下载好的RPM及其依赖2. 如何创建本地YUM仓库? 3. 如何处理RPM之间的依赖冲突?</think>### 如何手动下载 RPM 及其所有依赖项 以下是三种可靠的方法,适用于 CentOS/RHEL 系统(7/8/9 均适用),按推荐顺序排列: #### 📥 方法 1:使用 `yumdownloader`(推荐) ```bash # 1. 安装必要工具 sudo yum install yum-utils createrepo # 2. 创建下载目录 mkdir -p ~/rpm_downloads # 3. 下载及其所有依赖 yumdownloader --resolve --destdir=~/rpm_downloads <名> ``` *示例:下载 Nginx 及其依赖* ```bash yumdownloader --resolve --destdir=~/nginx_rpms nginx ``` **优点**:自动解析依赖关系,一键下载所有相关[^2]。 #### ⚙️ 方法 2:使用 `yum` 的 downloadonly 插件 ```bash # 1. 启用插件 sudo yum install yum-plugin-downloadonly # 2. 下载依赖 sudo yum install --downloadonly --downloaddir=~/rpm_downloads <名> ``` *示例:下载 Vim 及其依赖* ```bash sudo yum install --downloadonly --downloaddir=~/vim_rpms vim-enhanced ``` #### 🚀 方法 3:使用 `dnf`(CentOS 8/9) ```bash # 1. 安装插件 sudo dnf install dnf-plugins-core # 2. 下载依赖 dnf download --resolve --dest ~/rpm_downloads <名> ``` *示例:下载 PostgreSQL* ```bash dnf download --resolve --dest ~/postgres_rpms postgresql-server ``` ### 📦 离线安装下载RPM 1.下载目录复制到目标机器 2. 安装所有 RPM : ```bash sudo rpm -ivh ~/rpm_downloads/*.rpm --nodeps --force ``` > **注意**:`--nodeps` 跳过依赖检查(因已含所有依赖) ### 🔍 验证下载内容 ```bash # 查看下载RPM 数量 ls -l ~/rpm_downloads | wc -l # 检查主是否含 ls ~/rpm_downloads/<名>*.rpm ``` ### 🌐 特殊场景:通过 URL 直接下载 当需要从特定 URL 下载 RPM 时: ```bash # 1. 下载 wget https://example.com/path/to/package.rpm -P ~/custom_rpms # 2. 解析依赖下载 repoquery -R --resolve $(rpm -qp package.rpm) | xargs yumdownloader --destdir=~/custom_rpms ``` ### 💡 最佳实践 1. **保持环境一致**:在相同 OS 版本的系统上执行下载 2. **清理缓存**:下载前运行 `sudo yum clean all` 3. **创建仓库**:对下载目录运行 `createrepo` 后可配置为本地 YUM 源 4. **架构匹配**:确保下载RPM 与目标系统架构一致(x86_64/aarch64) > **提示**:对于 Google Chrome 等第三方,需先配置仓库(参考:[Chrome 官方安装指南](https://support.google.com/chrome/a/answer/9915669?hl=en))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值