CentOS 7 Yum离线下载安装软件包

小柊 发表于 2018年02月19日 19时21分23秒

一、背景

yum是Fedora 22-、RedHat以及CentOS系统中默认使用的一款软件包管理器。使用yum命令我们可以非常轻松的为系统安装各种软件包。

由于系统自带源中的软件包往往收录不全面或更新并不即时,所以例如Nginx,MySQL,MongoDB、Docker等有名的程序都会创建自己的软件源,我们只需添加他们的源即可在yum中找到并安装最新的版本了。

不过这种非官方自建源,往往会因为服务器在国外,且国内没有镜像服务器,导致下载速度非常不稳定,比如MySQL官方源在国内最高速度一般只有200-300KB/s,最低甚至只有几B/s。

所以现在就有这么一个想法,能不能把yum在线安装时下载的文件离线保存在本地,到时候需要安装的时候直接拿着之前离线保存的安装包直接安装,这样在可以联网的电脑上安装需要的程序包时就可以省去从网上下载程序包的时间,另外也可以给不能联网的电脑安装程序包了。

 

二、yum离线下载程序包

关于这个需求,我们可以安装一个yum插件:“yum-plugin-downloadonly”去实现它。

我们首先用yum安装这个插件:

 

安装完成之后就在使用yum的时候使用“--downloadonly”参数。这个参数将告诉yum只下载程序包,不进行安装。

例如我想下载supervisor这个程序包,就只要使用下面的命令:

 

请注意:--downloadonly参数将自动下载程序包安装时所需要的所有依赖,所以建议在全新的系统中使用本命令,因为在已经安装过部分依赖的系统上,yum不会将所有需要的依赖下载完全,例如下面这幅图所示:

 

左边是已经安装过mysql-server的系统,它只会下载mysql-server和mysql-common两个程序包。右边是一个新系统,在这个系统下yum会下载mysql-server依赖的所有程序包,包括mysql-client和perl等。

当然,您也可以使用yum resolvedep命令手动查看并下载依赖,只不过这样比较麻烦就是了。

 

使用--downloadonly参数之后,yum在下载完程序包后就会显示一句“exiting because "Download Only" specified”并自动退出,此时要下载的程序包已经被放置到了yum的默认存放位置,在CentOS 7 x64下,这个默认路径是:

/var/cache/yum/x86_64/7/<repo>/packages/

 

如果要指定yum的下载目录,还需要一个“--downloaddir”参数,例如我要将supervisor程序包安装到当前文件夹下,就使用下面的命令:

 

等待下载完成后,用ls命令就可以看到当前目录下已经出现了supervisor及其依赖的程序包rpm文件。

 

三、yum离线安装程序包

在刚刚第二步中我们使用了yum --downloadonly命令离线下载了想要的程序包安装文件,现在我们有一台因为种种原因而不能上网的系统,我们现在要把刚刚下载下来的程序包安装到这台电脑上该怎么办呢?

很简单,用yum localinstall命令。

首先将我们下载下来的程序包及其依赖去使用U盘等方式拷贝到这台不能上网的电脑中,然后进入程序包存放目录,执行下面的命令(仍以supervisor为例):

 

几个注意点:

1.使用yum localinstall命令需要的程序包时需要同时安装程序包所有的依赖项目,否则还是会尝试联网去下载缺少的依赖项目;

2.“--nogpgcheck”参数主要是为了不让yum对程序包进行GPG验证;

3.除了yum localinstall命令以外,还可以使用rpm -ivh命令安装rpm包,这里不再单独讨论。

 

 

 

小柊

2018年2月19日 19:03:00

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注