前言
yum工具是基于rpm的,其一个重要的特性是能够自动解决依赖问题,但是yum的本质依旧是把后缀名为rpm的包下载到本地,然后按次序安装。但是每次执行yum install xxx,会自动安装并且安装完成后将rpm包自动删除。当我们下载比较大的安装包时,每次都重新下载很慢,这时就可以考虑搭建本地离线yum仓库。基本步骤如下:
- 把rpm包及其相关依赖全部都下载到本地,保存。
- 手动在/etc/yum.repos.d/目录下配置本地仓库信息。
- 使用createrepo命令生成repodata信息。
- 使用yum repoinfo检查确认。
下载rpm包到本地
使用yum时添加两个选项--downloadonly以及--downloaddir。
以mysql为例:
yum install —downloadonly —downloaddir=/aspack mysql-community-server
所以,这样的前置工作很简单,上述命令可以把mysql-community-server对应的所有rpm包及其依赖下载到对应的目录中,也就是说利用这些包就可以进行离线安装。执行上述命令不会安装mysql。
配置本地yum仓库信息
# vim /etc/yum.repos.d/as4k.repo[as4k]name=as4k local repositorybaseurl=file:///aspackgpgcheck=0enabled=1
这里可以看到,后缀为repo的配置文件也很简单:
- as4k是本地仓库名,可以为任意与已有仓库不重名的名称。
- name项后面是注释信息,随意书写。
- baseurl后面写的是本地仓库的路径,file://表示使用本地文件协议,后面的是本地rpm包的存放路径。
- gpgcheck=0这是验证包的安全信息,设置为0表示关闭安全验证,最好设置为0,否则还需要准备安全验证文件。
- enabled=0,表示启用本仓库,0为启用,1为关闭。
更多的配置信息,参见man yum.conf。
生成repodata信息
从逻辑上讲,上面两步就可以使用本地仓库了,然而还不行。如果现在就使用本地仓库安装一个包,就会报下面的错误。

从图中的错误信息中可以看到,无法打开repomd.xml文件。因为我们目前只有rpm包,其余的什么都没有。repomd.xml这个文件简单来讲就是存放本地仓库rpm包的索引信息,它可以使用createrepo直接生成。
假如我们本地仓库没有配置好,不仅本地仓库无法使用,整个yum安装工具都会一直报错,此时我们可以把本地yum配置文件改名或者临时删除。
createrepo命令系统默认不安装,需要手动安装:
yum install createrepo -y
安装完毕后,直接使用以下命令进行仓库创建:
createrepo /aspack/
之后,就可以发现本地仓库已经生成了相关信息。
检查以及使用
使用下面的命令可以看到本地仓库的基本信息:
# yum repoinfo as4kRepo-id : as4kRepo-name : as4k local repositoryRepo-status : enabledRepo-revision : 1537699080Repo-updated: Sun Sep 23 18:38:01 2018Repo-pkgs : 41Repo-size : 214MRepo-baseurl: file:///aspack/Repo-expire : 21,600 second(s) (last: Sun Sep 23 18:41:05 2018)Filter : read-only:presentRepo-filename : /etc/yum.repos.d/as4k.reporepolist : 41
可以看到本地使用方式与线上仓库区别不大。创建好的本地仓库可以直接使用scp复制到其他机器使用,yum配置文件以及rpm仓库直接复制过去,无需再创建一遍repodata信息。
对本地仓库进行更新
下载一个新的rpm软件包到本地仓库,此时我们使用yum repoinfo as4k查看会发现软件包的数量并没有增加,我们安装新增的软件包也会提示,找不到该软件包的现象,可以按照下述步骤,更新仓库信息。
- 查看旧的软件包总数 yum repoinfo as4k | grep pkgs
- 更新本地仓库 createrepo —update /aspack/
- 清除所有缓存 yum clean all
- 查看新的软件包总数 yum repoinfo as4k | grep pkgs
如果软件包的数量增加,说明仓库更新成功。
