对于刚接触Linux系统的朋友来说,包管理工具是绕不开的基础设施。yum作为Red Hat系Linux(比如CentOS、RHEL、Fedora)的默认包管理器,能帮我们自动解决依赖关系,让安装软件变得轻松。但有时候系统默认没装yum,或者因为某种原因yum丢失了,这时候就需要手动安装它。下面我结合自己多年的运维经验,把这个过程拆解清楚。
确认当前系统环境

动手之前,先得搞清楚自己用的什么系统。不同发行版安装yum的方式差别挺大red hat linux,比如CentOS 7和CentOS 8的源就不一样,甚至有些精简版系统连wget和curl都没有。最好先运行cat /etc/os-release看看版本号,再用uname -m确认架构是x86_64还是aarch64。我遇到过好几次因为没检查架构,下错rpm包导致安装失败的案例,这一步别跳过。
还要看系统有没有联网能力。直接ping 试试,如果通的话走在线源最省事。如果内网环境或者没有网络,就得准备离线包了。有个老项目用的CentOS 6.10,yum突然坏了,机房又不通外网,我折腾了半天才用本地ISO挂载搞定。所以先评估网络状况,再决定是走在线还是离线方案。
在线安装yum的方法
如果系统能联网,在线安装是最快的。对CentOS 7来说,可以用wget从阿里云镜像站下载yum的rpm包。先安装epel-release源linux格式化命令,因为yum本身可能依赖它。具体命令是wget -O /etc/yum.repos.d/CentOS-Base.repo ,然后执行yum clean all和yum makecache。这时候yum其实已经能用了linux 安装yum命令,但如果系统里根本没有yum二进制文件,就得直接装rpm包。
我习惯去找对应版本的yum包,比如yum-3.4.3-168.el7.centos.noarch.rpm。下载后用rpm -ivh安装,如果提示缺少python依赖,得先装python。有个技巧是安装时加--nodeps参数跳过依赖检查,但这样装完的yum功能不全,还是建议老老实实补齐依赖。曾经有个客户按网上的教程加了--force参数,结果把系统自带的python搞坏了,最后只能重装系统。

离线安装yum的完整流程
没有网络的环境下,离线安装就得提前准备好rpm包。找一台同版本且能联网的机器,用yum install --downloadonly --downloaddir=/tmp/yum_pkgs yum命令,把yum及其所有依赖包全部下载下来。注意依赖列表很长,包含python-urlgrabber、libxml2-python等几十个包,缺一个都装不上。我习惯写个脚本自动下载,然后用tar打包传到目标机器。

到了内网机器上,用rpm -ivh .rpm --nodeps逐个安装太慢了,最好用yum localinstall .rpm(如果目标机器连yum都没有,就用rpm -Uvh .rpm)。但要注意安装顺序,先装python相关包,再装yum主程序。有一次我图省事直接rpm -ivh .rpm,结果因为包之间有循环依赖报了错,只好手工调整顺序。离线环境的另一个坑是时间同步,如果系统时间不对,rpm包的数字签名验证会失败,记得先用date命令校时。
安装后的验证与配置
装完yum不是终点,还得验证它能不能正常工作。跑一下yum --version看版本号,再用yum repolist查看仓库列表。如果仓库源是空的,需要手动配置。把/etc/yum.repos.d/目录下的repo文件写正确,尤其注意baseurl要改成可用的地址。我一般用阿里云源,因为速度快而且同步及时,但如果是政府内网环境,建议用内部的本地源。
还要处理yum的缓存问题。新建的系统第一次运行yum makecache会生成缓存,如果报错说找不到repomd.xml,说明源地址写错了或者网络不通。另外,有些安全策略严格的系统会限制yum使用的端口linux 安装yum命令,比如只允许80和443,这时候要确认源使用的是http还是https。我之前帮银行客户部署时,就因为防火墙只开了80端口,而默认源用的https,导致yum一直超时,改成http源就解决了。
