以往为了让内网服务器使用Yum,自建了Yum服务器,大致就是一个apache指向自建的repository目录,然后使用yum-util里的reposync更新rpm(当然也可以手动下载后放到repo目录),再使用createrepo来创建metadata。虽说可以实现,但是也存在不少不便:
- repo目录日趋庞大
- EPEL这样的repo没法下载
- 同时维护centos7和centos6这样多个版本比较麻烦
- 只能crontab定期更新,repo内容可能会滞后
最近使Sonatype Nexus的时候发现可以支持Yum Repository,官方博客也早在去年八月就发布了这个功能[1],通过这个新功能,使得自建的repo可以解决这些困难着实解决了上面这些困难,这里简单介绍下Nexus服务器自建Yum Repository代理的过程。
Nexus的安装和配置过程都比较简单,当然Nexus的功能远不限于此,它提供了当下最流行的库支持(Maven/Java, npm, NuGet, RubyGems, Docker, P2, OBR, APT, YUM 等等),也支持cluster,还提供rest API和基于OSGi的bundle开发。我这里只是让它小露一手而已~
附《绿巨人击倒奚有米》的动图,嘿嘿(o゜▽゜)o☆

安装Nexus
官方文档[2]的安装过程并不复杂,我这里简单罗列了使用CentOS7安装的步骤:
Docker方式运行Nexus
另一种方式是使用docker运行,可以参考官方的docker github[3],列举命令如下:
配置Yum Repository
Yum的Repository分为proxy和host两种,两种分别用于不同的用途:
Host——如果是为了存放公司内部的rpm,那么创建Host类型的repository,设置定时任务更新metadata,以提供公司内部使用。一般须要做的配置的内容包括:
- Repository的名字
- Repodata深度,用于指定从第几层目录开始创建metadata
- 指定Blob store,事先创建的blob store是repo库存放的目录
然后就可以上传rpm了,上传的方式其实就是对repo的链接做HTTP POST,这里用crul示例
1curl -v --user 'admin:admin123' --upload-file ./test.rpm http://localhost:8081/repository/yum-hosted/test.rpm最后,使用Rebuild Yum metadata的schedule task来重建metadata
- Proxy——如果目的是让客户端直接使用外网的repository,可以使用这种类型作为代理,proxy里只会存放客户端下载过的rpm。这里着重介绍这种方式。
Proxy Repository创建的方法非常简单,完全图形化,主要须要配置的也就是须要代理的公网repository,比如:
这里录了屏

完成后就可以配置客户端使用这个repo了(在刚才配置的repo里可以看到访问链接),下面是centos和epel的repo文件示例:
至此,客户端就可以连接自己的repo服务器下载rpm了,如果所须要的包是第一次下载,那么proxy会连接指定的外网repo下载,但如果是proxy已经存在的repo,那么直接从proxy上拉下来,速度会比外网下载快很很多!