0x00 概述

前几天我尝试去创建一个仅包含我们经常在 CentOS 7 下使用的软件的本地仓库。当然,我们可以使用 curl 或者 wget 下载任何软件包,然而这些命令并不能下载要求的依赖软件包。你必须去花一些时间而且手动的去寻找和下载被安装的软件所依赖的软件包。然而,我们并不是必须这样。在这个简短的教程中,我将会带领你以两种方式下载软件包及其所有依赖包。我已经在 CentOS 7 下进行了测试,不过这些相同的步骤或许在其他基于 RPM 管理系统的发行版上也可以工作,例如 RHEL,Fedora 和 Scientific Linux。

0x01 利用 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/ 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
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 :2.4.-.el7.centos. will be installed
--> Processing Dependency: httpd-tools = 2.4.-.el7.centos. for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: libaprutil-.so.()(64bit) for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: libapr-.so.()(64bit) for package: httpd-2.4.-.el7.centos..x86_64
--> Running transaction check
---> Package apr.x86_64 :1.4.-.el7 will be installed
---> Package apr-util.x86_64 :1.5.-.el7 will be installed
---> Package httpd-tools.x86_64 :2.4.-.el7.centos. will be installed
---> Package mailcap.noarch :2.1.-.el7 will be installed
--> Finished Dependency Resolution Dependencies Resolved =======================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================
Installing:
httpd x86_64 2.4.-.el7.centos. updates 2.7 M
Installing for dependencies:
apr x86_64 1.4.-.el7 base k
apr-util x86_64 1.5.-.el7 base k
httpd-tools x86_64 2.4.-.el7.centos. updates k
mailcap noarch 2.1.-.el7 base k Transaction Summary
=======================================================================================================================================
Install Package (+ Dependent packages) Total download size: 3.0 M
Installed size: M
Background downloading packages, then exiting:
(/): apr-1.4.-.el7.x86_64.rpm | kB ::
(/): apr-util-1.5.-.el7.x86_64.rpm | kB ::
(/): mailcap-2.1.-.el7.noarch.rpm | kB ::
(/): httpd-tools-2.4.-.el7.centos..x86_64.rpm | kB ::
(/): httpd-2.4.-.el7.centos..x86_64.rpm | 2.7 MB ::
---------------------------------------------------------------------------------------------------------------------------------------
Total kB/s | 3.0 MB ::
exiting because "Download Only" specified

现在去你指定的目录位置下,你将会看到那里有下载好的软件包和依赖的软件。在我这种情况下,我已经把软件包下载到 /root/mypackages/ 目录下。让我们来查看一下内容:

ls /root/mypackages/

样本输出:

apr-1.4.-.el7.x86_64.rpm
apr-util-1.5.-.el7.x86_64.rpm
httpd-2.4.-.el7.centos..x86_64.rpm
httpd-tools-2.4.-.el7.centos..x86_64.rpm
mailcap-2.1.-.el7.noarch.rpm

正如你在上面输出所看到的, httpd软件包已经被依据所有依赖性下载完成了 。
请注意,这个插件适用于 yum install/yum update, 但是并不适用于 yum groupinstall 。默认情况下,这个插件将会下载仓库中最新可用的软件包。然而你可以通过指定版本号来下载某个特定的软件版本。

例子:

yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.-.el7

此外,你也可以如下一次性下载多个包:

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

0x02 使用 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 :2.4.-.el7.centos. will be installed
--> Processing Dependency: httpd-tools = 2.4.-.el7.centos. for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: libaprutil-.so.()(64bit) for package: httpd-2.4.-.el7.centos..x86_64
--> Processing Dependency: libapr-.so.()(64bit) for package: httpd-2.4.-.el7.centos..x86_64
--> Running transaction check
---> Package apr.x86_64 :1.4.-.el7 will be installed
---> Package apr-util.x86_64 :1.5.-.el7 will be installed
---> Package httpd-tools.x86_64 :2.4.-.el7.centos. will be installed
---> Package mailcap.noarch :2.1.-.el7 will be installed
--> Finished Dependency Resolution
(/): apr-util-1.5.-.el7.x86_64.rpm | kB ::
(/): mailcap-2.1.-.el7.noarch.rpm | kB ::
(/): apr-1.4.-.el7.x86_64.rpm | kB ::
(/): httpd-tools-2.4.-.el7.centos..x86_64.rpm | kB ::
(/): httpd-2.4.-.el7.centos..x86_64.rpm | 2.7 MB ::

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

ls /root/mypackages/

终端输出:

apr-1.4.-.el7.x86_64.rpm
apr-util-1.5.-.el7.x86_64.rpm
httpd-2.4.-.el7.centos..x86_64.rpm
httpd-tools-2.4.-.el7.centos..x86_64.rpm
mailcap-2.1.-.el7.noarch.rpm

不像 Downloadonly 插件,Yumdownload 可以下载一组相关的软件包。

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

在我看来,我喜欢 Yumdownloader 更胜于 Yum 的 Downloadonly 插件。但是,两者都是十分简单易懂而且可以完成相同的工作。

参考

Linux学习笔记之在 CentOS 里下载 RPM 包及其所有依赖包的更多相关文章

  1. 如何在 CentOS 里下载 RPM 包及其所有依赖包

    方法一.利用 Downloadonly 插件下载 RPM 软件包及其所有依赖包 默认情况下,这个命令将会下载并把软件包保存到 /var/cache/yum/ 的 rhel-{arch}-channel ...

  2. CentOS7中下载RPM及其所有的依赖包

    CentOS7中下载RPM及其所有的依赖包 转载beeworkshop 最后发布于2019-09-28 07:43:40 阅读数 1096  收藏 展开 利用 Downloadonly 插件下载 RP ...

  3. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  4. Linux学习笔记(7)CRT实现windows与linux的文件上传下载

    Linux学习笔记(7)CRT实现windows与linux的文件上传下载 按下Alt + p 进入SFTP模式,或者右击选项卡进入 命令介绍 help 显示该FTP提供所有的命令 lcd 改变本地上 ...

  5. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  6. 91 Testing Linux学习笔记

    91 Testing Linux学习笔记... 学习地址:91Testing 的Linux教程=====================学习网址:http://www.91testing.net/ar ...

  7. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  8. Linux学习笔记-Linux系统简介

    Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...

  9. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

随机推荐

  1. Nginx配置虚拟主机

    就是在一台服务器启动多个网站. 如何区分不同的网站: 1.域名不同 2.端口不同 在Nginx的安装目录的conf目录下有个配置文件nginx.conf 1.端口区分: 复制server节点,更改端口 ...

  2. app刷新

    https://segmentfault.com/a/1190000006733978 优化TCP socket参数,包括:是否关闭快速回收.初始RTO.初始拥塞窗口.socket缓存大小.Delay ...

  3. 工作流引擎--swamp

    什么是工作流引擎(Workflow Engine )   例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性.易维 ...

  4. 项目遇到的css样式

    1. 这种怎么写?用radio,我这里用的时element的radio <div class="menu"> <span>我的粉丝({{totalNumbe ...

  5. 递归n!

    package sushudigui; import java.util.Scanner; public class digui { public static void main(String[] ...

  6. 第二章 CSS基本属性

    1.CSS:层叠样式表 一个元素允许同时应用多种样式,页面元素最终的样式即为多种样式的叠加效果. 2.CSS样式优先级 行内样式表>内部样式表>外部样式表[就近原则] id选择器>类 ...

  7. gispro试用版账户注册

    1.注册账户 http://www.esri.com/zh-cn/arcgis/products/arcgis-pro/trial 2.分配账户权限 3.gispro可以登录了

  8. 强化学习--DeepQnetwork 的一些改进

    Double DQN 算Q值 与选Q值是分开的,2个网络. Multi-step Dueling DQN 如果更新了,即使有的action没有被采样到,也会更新Q值 Prioritized Reply ...

  9. IIS7配置rewriter

    遇到的问题就是rewriter不起效果冲IIS6迁移过来的.最后发现是Framework 4.0的原因!记录处理方式为: 一. <configSections> <section n ...

  10. Unity AssetBoundle 打包流程

    1.准备打包资源,给要打包的资源添加一个AssetBoundle名字 2.在Scripts文件夹下新建一个子文件夹,命名为Editor(注意名字不能写错),新建一个打包资源的C#类,命名为BuildA ...