前言

yum工具是基于rpm的,其一个重要的特性是能够自动解决依赖问题,但是yum的本质依旧是把后缀名为rpm的包下载到本地,然后按次序安装。但是每次执行yum install xxx,会自动安装并且安装完成后将rpm包自动删除。当我们下载比较大的安装包时,每次都重新下载很慢,这时就可以考虑搭建本地离线yum仓库。基本步骤如下:

  1. 把rpm包及其相关依赖全部都下载到本地,保存。
  2. 手动在/etc/yum.repos.d/目录下配置本地仓库信息。
  3. 使用createrepo命令生成repodata信息。
  4. 使用yum repoinfo检查确认。

下载rpm包到本地

使用yum时添加两个选项--downloadonly以及--downloaddir

以mysql为例:

yum install —downloadonly —downloaddir=/aspack mysql-community-server

所以,这样的前置工作很简单,上述命令可以把mysql-community-server对应的所有rpm包及其依赖下载到对应的目录中,也就是说利用这些包就可以进行离线安装。执行上述命令不会安装mysql。

配置本地yum仓库信息

  1. # vim /etc/yum.repos.d/as4k.repo
  2. [as4k]
  3. name=as4k local repository
  4. baseurl=file:///aspack
  5. gpgcheck=0
  6. enabled=1

这里可以看到,后缀为repo的配置文件也很简单:

  • as4k是本地仓库名,可以为任意与已有仓库不重名的名称。
  • name项后面是注释信息,随意书写。
  • baseurl后面写的是本地仓库的路径,file://表示使用本地文件协议,后面的是本地rpm包的存放路径。
  • gpgcheck=0这是验证包的安全信息,设置为0表示关闭安全验证,最好设置为0,否则还需要准备安全验证文件。
  • enabled=0,表示启用本仓库,0为启用,1为关闭。

更多的配置信息,参见man yum.conf。

生成repodata信息

从逻辑上讲,上面两步就可以使用本地仓库了,然而还不行。如果现在就使用本地仓库安装一个包,就会报下面的错误。

如何搭建本地离线yum仓库 - 图1

从图中的错误信息中可以看到,无法打开repomd.xml文件。因为我们目前只有rpm包,其余的什么都没有。repomd.xml这个文件简单来讲就是存放本地仓库rpm包的索引信息,它可以使用createrepo直接生成。

假如我们本地仓库没有配置好,不仅本地仓库无法使用,整个yum安装工具都会一直报错,此时我们可以把本地yum配置文件改名或者临时删除。

createrepo命令系统默认不安装,需要手动安装:

yum install createrepo -y

安装完毕后,直接使用以下命令进行仓库创建:

createrepo /aspack/

之后,就可以发现本地仓库已经生成了相关信息。

检查以及使用

使用下面的命令可以看到本地仓库的基本信息:

  1. # yum repoinfo as4k
  2. Repo-id : as4k
  3. Repo-name : as4k local repository
  4. Repo-status : enabled
  5. Repo-revision : 1537699080
  6. Repo-updated: Sun Sep 23 18:38:01 2018
  7. Repo-pkgs : 41
  8. Repo-size : 214M
  9. Repo-baseurl: file:///aspack/
  10. Repo-expire : 21,600 second(s) (last: Sun Sep 23 18:41:05 2018)
  11. Filter : read-only:present
  12. Repo-filename : /etc/yum.repos.d/as4k.repo
  13. repolist : 41

可以看到本地使用方式与线上仓库区别不大。创建好的本地仓库可以直接使用scp复制到其他机器使用,yum配置文件以及rpm仓库直接复制过去,无需再创建一遍repodata信息。

对本地仓库进行更新

下载一个新的rpm软件包到本地仓库,此时我们使用yum repoinfo as4k查看会发现软件包的数量并没有增加,我们安装新增的软件包也会提示,找不到该软件包的现象,可以按照下述步骤,更新仓库信息。

  1. 查看旧的软件包总数 yum repoinfo as4k | grep pkgs
  2. 更新本地仓库 createrepo —update /aspack/
  3. 清除所有缓存 yum clean all
  4. 查看新的软件包总数 yum repoinfo as4k | grep pkgs

如果软件包的数量增加,说明仓库更新成功。