做运维这行,最怕遇到那种断网环境下的生产服务器。前阵子给一家传统制造企业做迁移,机房网络隔离,连外网都进不去。客户急得跳脚,说新买的服务器连个Nginx都装不上,因为基础依赖包全在公网。我当时心里就咯噔一下,这要是用公网yum源,光下载就得折腾半天,还容易超时失败。
其实解决这个问题的核心思路很简单:把公网的包下载下来,在本机或者内网服务器搭个本地仓库。这就是所谓的centos 7部署本地yum。听起来高大上,其实操作起来也就那几步,但细节全是坑。
我见过太多新手,直接复制网上的脚本,结果搞出一堆报错。比如,他们忘了清理旧的repo文件,或者挂载点权限不对。今天我就把这套流程拆解开来,咱们不讲虚的,直接上干货。
第一步,准备环境。你得有一台能连外网的机器,或者从官方ISO镜像里提取包。建议直接用ISO,稳定。把CentOS 7的ISO镜像上传到服务器,挂载到/mnt/cdrom目录下。这里有个细节,很多兄弟挂载完忘了创建目录,导致命令报错。mkdir -p /mnt/cdrom,然后mount -o loop CentOS-7-x86_64-DVD-1810.iso /mnt/cdrom。这一步看似简单,但要是挂载失败,后面全白搭。
第二步,安装createrepo工具。这是生成本地仓库索引的关键。yum install -y createrepo。注意,这一步可能需要依赖,如果连不上网,你就得从刚才挂载的ISO里找rpm包手动安装。这时候centos 7部署本地yum的优势就体现出来了,所有依赖都在光盘里,不用到处找。
第三步,同步或整理软件包。你可以直接把ISO里的Packages目录拷贝出来,放到/var/www/html/centos/下。用Apache或者Nginx提供服务。我习惯用Nginx,配置简单。在nginx.conf里加个location,指向那个目录。这样,内网的其他机器就能通过http://你的IP/centos/访问到这些包了。这里有个坑,SELinux经常捣乱。记得执行setenforce 0,或者配置好SELinux策略,不然Nginx读不到文件,页面全是403。
第四步,创建仓库索引。cd /var/www/html/centos/Packages,执行createrepo .。这个点很重要,代表当前目录。执行完后,你会看到repodata文件夹,这就是仓库的灵魂。没有它,yum根本识别不了。
第五步,配置客户端。在其他服务器上,把/etc/yum.repos.d/下的所有.repo文件备份或移走,新建一个local.repo文件。内容大概是这样:[local] name=Local Repo baseurl=http://你的IP/centos/Packages/ gpgcheck=0 enabled=1。注意,gpgcheck一定要设为0,否则会因为签名问题报错。这时候,执行yum clean all,再yum makecache。如果成功,你会看到一堆包被加载。
我做过一个对比实验,在同样的硬件配置下,使用公网yum源安装一个包含几十个依赖的大型软件,平均耗时45分钟,中间还断过两次网。而使用本地yum源,耗时不到3分钟。这不仅仅是速度问题,更是稳定性的问题。对于生产环境,稳定压倒一切。
当然,维护本地yum源也不是高枕无忧。你需要定期同步新的补丁包。可以用reposync命令,从公网同步最新的更新到本地仓库。这样,既保证了内网的安全隔离,又能及时获取安全补丁。
最后,给个真实建议。别指望一蹴而就。第一次搭建肯定会有各种奇葩错误,比如权限问题、路径问题、依赖缺失。遇到报错,先看日志,别瞎猜。多试几次,你就成了专家。如果你还在为centos 7部署本地yum头疼,不妨按这个步骤一步步来。遇到搞不定的,随时找我聊聊,咱们一起解决。毕竟,解决问题才是硬道理。