众所周知,CentOS下的大部分软件源服务器都在海外,因此使用这些软件源下载软件速度会非常慢,甚至完全下载不了。对于官方源我们可以使用Tuna等国内镜像加快速度,但对于DockerMySQLRemi等非官方源则无能为力。本文将介绍一个巧妙解决这一问题的方法,以便加快非官方源安装速度。

0x01 准备工作

在阅读下文之前,请保证你拥有以下两个条件中的任意一个:

  • 有良好的网络环境,可以畅通无阻访问全球各地服务器
  • 有一台海外服务器,可以高速下载全球各地数据

除此之外,你还需要了解对应软件的地址,以CentOS 7下的MySQL 5.6为例,其地址为http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/ ,内含所需的所有rpm包。

如果不知道这些软件的地址,可以先尝试使用yum正常安装之,然后在确认安装界面获得其名称、版本号等信息:

接下来在https://centos.pkgs.org/搜索对应软件名称+版本号,就可以导航到对应软件的页面。

在页面最下方有一个Download面板,里面的地址就是该软件的实际下载地址。

0x02 实现机制

部分读者了解过CentOS的yum具有断点续传的功能,该功能依赖的是yum的包缓存机制,也就是会将下载过的数据缓存在本地,下次下载时会从缓存开始继续下载。

了解这一点,对于本文非常重要。因为如果我们提前把完整的安装包放在缓存目录,再执行安装,yum就会认为是已经下载完成的软件包,跳过下载,直接安装。

0x03 具体操作

还是以上文所述的MySQL为例,截图中可以看到其依赖以下几个包:

mysql-community-client-5.6.47-2.el7.x86_64.rpm
mysql-community-common-5.6.47-2.el7.x86_64.rpm
mysql-community-libs-5.6.47-2.el7.x86_64.rpm
mysql-community-server-5.6.47-2.el7.x86_64.rpm

具体操作步骤如下:

  1. 首先使用本机或者海外服务器从对应链接下载这几个包后,通过FTP、SCP等方式传输到需要安装的服务器任意目录。

  2. 然后执行一次正常安装流程,在开始下载这几个包之后按下Ctrl+C组合键中止下载流程,此时缓存目录已经成功建立。

  3. 接下来进入/var/cache/yum/x86_64/7/目录,可以看到该目录中有着以软件名称命名的文件夹,我们进入mysql56-community,然后进入packages目录。该目录中应该有前一步未下载完成的文件。

  4. packages目录中所有文件删除,将之前传输到服务器的几个rpm包拷贝过来。

  5. 然后重复2的流程,但不要中止,这时候yum应该会从缓存目录获取所需的包,直接进入安装流程。

此时,就已完成了安装过程,通过操作缓存目录的方式巧妙加速了yum源的下载速度。

0x04 常见问题

可能还有部分读者按照上文步骤未能成功,这里我总结了可能会出现的几个原因:

  1. 版本不对。下载了正确的软件,但版本号/架构类型/发行版不同。必须使用和下载界面中完全相同的版本号才能安装成功。

  2. 文件名不对。yum安装时的rpm包文件名格式一般是{包名}-{版本号}.{发行版}.{处理器架构}.rpm,必须保证该格式正确,yum才会找到你所拷贝的缓存并安装。

  3. 文件损坏。软件包的大小可以在https://centos.pkgs.org/看到,如果发现所下载文件的大小和网站中标识大小有较大差异,说明文件可能出现了损坏,建议重新下载。

  4. 目录错误。以上文为例,拷贝到的目录应该是/var/cache/yum/x86_64/7/mysql56-community/packages/目录,如果拷贝到了错误的目录,也是无法加速的。