做过大型项目的同学一定都搞过自定义 yum 仓库,自定义 yum 在网上也有很多种方案,但今天我们来个不一样的玩法!
在开始之前先来抛出几个问题
Nexus 是什么?
简单来说 Nexus 是一个全能的仓储管理工具,它能帮我们解决有关软件包的一系列问题。下面我们来还原几个真实的场景,接下来我们就请上今天的主角, Nexus 闪亮全场!
公司接了一个超大型项目,需要在用户的离线环境中部署公司数十套产品。那么这个光荣而艰巨的任务就交到运维同学身上吧!
吃饭时间看见运维同学闷闷不乐,于是不解的过去问他,公司有大项目了,为啥还愁眉苦脸的呀?运维同学说,这十几套产品,要安装的软件一大堆,软件包依赖问题一大堆,这可如何是好呀。
我拍了拍运维同学的肩膀对他说,信杰哥,杰哥带你飞!
在内网找一台可以访问公网的机器,安装 Nexus 服务
解压软件
tar xzf nexus-3.14.0-04-unix.tar.gz -C /data/sonatype-work/nexus3echo 'NEXUS_HOME="/data/nexus-3.14.0-04"' >> ~/.bashrcecho 'run_as_user="root"' >> /data/nexus-3.14.0-04/bin/nexus.rc
服务配置
shell> vim /etc/systemd/system/nexus.service
[Unit]Description=nexus serviceAfter=network.target
[Service]Type=forkingLimitNOFILE=65536ExecStart=/data/nexus-3.14.0-04/bin/nexus startExecStop=/data/nexus-3.14.0-04/bin/nexus stopUser=rootRestart=on-abort
[Install]WantedBy=multi-user.target
启动服务
systemctl reload-daemonsystemctl start nexus
http://10.200.60.21:8081/
默认账号密码: admin/admin123
登录后记得修改 admin 密码
创建 repository
选择 "yum(proxy)"
确定清华 Yum 仓库地址
填写 "name" 和 "Remote storage",注意 "Remote storage" 需要以 "/" 结尾
Repository 创建完成后
确定 Repository 的状态,"Online - Remote Available" 才是正确状态哦
编写客户端 Yum 配置文件,注意 "baseurl" 也需要以 "/" 结尾!
shell> vim tsinghua.repo[tsinghua]name=Tsinghua RHEL/CentOS $releasever - $basearchbaseurl=http://admin:admin123@10.200.60.21:8081/repository/tsinghua/$releasever/os/$basearch/enabled=1gpgcheck=0
执行安装
yum clean all; yum makecacheyum install http
安装完成后查看仓储中已经有了已安装过的 rpm 包
看到这里,不知道各位小伙伴有没有看明白,以上操作是我们使用 Nexus 仓库中 Yum proxy 的功能,创建了一个代理清华 Yum 源的 Repository,然后在内网的机器上,配置好指向 Nexus 中的 Repository,这时再安装软件,就会通过 Nexus 找到清华 Yum 源中的软件包进行安装。
只要运维同学使用了配置好的 Yum 源,所有安装过的软件都会记录在这里。到时测试完成后,批量把软件包进行下载,再通过 Nexus 创建私有仓储即可完美使用。
软件包有两种情况
那可能有同学问了,如果清华 Yum 源的包不够用怎么办?我们还可以再添加 163、 epel 的源呀,所以只要能找到提供 Yum 的地址,都可以尽情的使用 Nexus yum proxy。并且以上配置不区别操作系统版本,如 CentOS 6 也可以使用,不信?我们来瞧瞧~
shell> cat /etc/*release*CentOS release 6.9 (Final)LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarchcat: /etc/lsb-release.d: Is a directoryCentOS release 6.9 (Final)CentOS release 6.9 (Final)cpe:/o:centos:linux:6:GA
yum clean all; yum makecacheyum install httpd -y
可以看到,出现了一个 "6" 的目录,分支下也生成了 http 相关的 rpm 包
大家想想看,这是为什么呢?
一个 DB 小 A 跑来找我,说杰哥,我要装个 MySQL 8.0,可是咱们内网 Yum 源里没安装包呀,公司下载又特别慢,你有没有办法呀?
我看了他一眼,告诉他,信杰哥,不翻车。大家说说我们有什么办法来帮助他呢?
下载下来,定晴一看,怎么是个 rpm 包呀?不慌,rpm 本身就是个压缩包,我们用压缩工具打开看看
原来 repo 文件藏在里面呀,这里有两个 repo 文件
让我们来猜猜,带有 source 的,是有关源码的仓库,不带 source 的,是编译好打包的 rpm 包,我们直接打开 mysql-community.repo,赫然看到,原来 MySQL 官方 Yum 源都在这里呢,里面内容相信大家都不陌生吧。
看到这里,是不是大家又明白点什么了!没错,有了官方 Yum 源地址,我们就可以在 Nexus 上创建 Yum proxy
编写 repo 文件
shell> cat mysql8.repo[mysql8]name=Mysql for RHEL/CentOS $releasever - $basearchbaseurl=http://admin:admin123@10.200.60.21:8081/repository/MySQL8.0/$releasever/$basearch/enabled=1gpgcheck=0
执行安装
yum install yum install mysql-community-client-8.0.11 mysql-community-server-8.0.11
同样,此 Yum 源同时支持 CentOS 6 和 CentOS 7,把同样的 repo 文件放到 CentOS 6 机器上,执行安装。
这一天,又一个运维小哥跑来找我,说杰哥杰哥,我们这次有好多需求,要下载好多 docker 镜像,又要下载好多 pypi 镜像,还要安装各个版本的 MySQL,我们搞不定啦,快来支持我们一下啊~~~
我吐……这下杰哥帮不了你了,给你份文档自己看着办吧。哈哈
结合以上几个情景,相信大家对 Nexus 都有一个大致的了解,Nexus 的权限管理、LDAP,还有 https 都有相应的支持,我们甚至可以把它当做 FTP 服务器来用,我们的 CI/CD 流程也已经集成了 Nexus 。所以 Nexus 还有好多好玩的,等着大家探(入)索(坑)哈!