ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RedHat 9 yum源配置完全指南:国内镜像源与本地源从入门到实战

RedHat 9 yum源配置完全指南:国内镜像源与本地源从入门到实战 我很少写系统运维类的长文但RedHat 9的yum源配置确实值得单独开一篇。这件事本身不复杂难点在于RedHat 9的源和CentOS那套逻辑有不少区别网上很多教程照搬CentOS的写法结果配完一堆报错。这篇文章我从零开始把国内镜像源和本地yum源两种方式都完整走一遍包括配置文件怎么写、gpgcheck该不该关、优先级怎么处理每一步都给出可以直接抄作业的命令。无论你是刚装上RedHat 9还是已经踩过几个坑这篇都能帮你省点时间。1. 内容整体设计与思路拆解1.1 为什么RedHat 9的源配置和CentOS完全不同用过CentOS 7或者CentOS 8的朋友都知道配置国内源就是进入/etc/yum.repos.d/目录把CentOS-Base.repo里的mirrorlist和baseurl换成阿里云或者清华的地址就行。RedHat 9这套流程走了不通——它默认的yum源是走subscription-manager订阅服务的也就是说你的系统如果没有注册到Red Hat订阅账号yum install任何软件都会报错提示This system is not registered with an entitlement server。很多人第一次用RedHat 9就卡在这一步然后尝试把网络上的Rocky Linux或者AlmaLinux源直接改过来用。说句实话这个方向是对的因为RedHat 9和Rocky Linux 9、AlmaLinux 9在二进制层面完全兼容包管理器和依赖关系也一样。但直接把repo文件里的$releasever换成9并不是最优解因为$releasever变量在RedHat上默认不生效你需要手动指定版本号或者先做几个前置处理。我的整体思路很明确不做任何投机取巧的改动而是分两条路走通。第一条路是配置国内镜像源用阿里云开源的源替代官方订阅源第二条路是配置本地yum源不依赖网络直接用ISO镜像或者本地目录作为软件来源。这两条路不冲突甚至可以同时配好优先级高的源优先生效。1.2 配置方案选型背后的取舍逻辑有些教程会让你把RedHat的redhat.repo整个删掉然后去阿里云镜像站配置一个全新的repo文件。这样操作确实快但会丢失RedHat自带的一些东西比如EPEL源注册信息。我个人的建议是保留原有repo文件用enabled0把订阅源关掉再新增国内源的配置文件这样从文件管理的角度来看最干净出问题也能快速回退。本地yum源这边我强烈建议优先采用ISO镜像挂载的方式而不是直接把解压后的目录丢给createrepo处理。ISO镜像挂载的好处有三个第一是不占额外的磁盘空间挂载操作本身是只读的第二是速度快内核的loop设备读取ISO文件性能损耗几乎可以忽略第三是后续维护简单不用了直接umount卸载就行不会留下垃圾文件。说到yum源的优先级管理这里有个容易踩的坑。如果你同时配置了国内镜像源和本地源不装yum-plugin-priorities插件的话系统会随机选择源来安装软件运气不好的时候同一个包从不同源装了不同版本连锁反应就是依赖冲突。所以我会在配置本地源之前先把优先级插件装好把本地源的优先级调成最高这样系统在本地源有包的时候优先用本地源本地源没有的包才去国内镜像源拉取。1.3 整个项目需要准备哪些前置条件动手之前先盘一下我的操作环境方便你对照自己的情况做适配。我的测试机是RedHat 9.2最小化安装内存4G磁盘40G网络能ping通外网但速度一般。系统安装时没有注册Red Hat订阅账号所以默认的yum源是完全不可用的状态。虚拟机或者物理机都无所谓但虚拟机有个好处是方便做快照。我强烈建议你在开始配置之前先给系统做一个快照或者至少备份一下/etc/yum.repos.d/这个目录。我见过太多人配源配到一半yum命令完全跑不了又不知道原来文件长什么样只能重装系统。其实一条命令就能解决mkdir -p /root/yum-repo-backup cp -r /etc/yum.repos.d/ /root/yum-repo-backup/另外本地yum源需要你提前准备好RedHat 9的ISO镜像文件。这个镜像如果你的机器上还没有可以从Red Hat官网下载评估版大概5到6个G的容量。下载的时候注意区分DVD版和Boot版本地源要用DVD版Boot版只有启动引导文件软件包基本没有。2. 核心细节解析与实操要点2.1 国内镜像源的配置原理与关键文件解析yum源的本质很简单yum或者dnf在运行的时候会读取/etc/yum.repos.d/目录下所有以.repo结尾的文件这些文件里声明了软件仓库的地址、GPG密钥校验方式、是否启用等元信息。然后yum会从这些仓库地址下载repodata/repomd.xml文件这个文件相当于整个仓库的索引列出了每个软件包的名字、版本、依赖关系和校验值。RedHat 9默认情况下只有redhat.repo这个文件它是通过subscription-manager动态生成的里面写的就是Red Hat官方订阅源的地址。问题是官方订阅源对中国大陆用户来说基本不可用你必须付费订阅才能访问。还有一些第三方源比如EPEL它的repo文件可能已经存在但默认是enabled0状态需要你手动开启。配置国内镜像源时你实际上要做的事情是新增或修改一个repo文件把baseurl指向国内镜像站比如阿里云镜像站上的Rocky Linux 9源或者AlmaLinux 9源。因为RedHat 9和这两个发行版共享同一套RPM包格式和依赖体系所以使用他们的源是兼容的。需要重点注意的是gpgcheck1这个参数。它表示在安装软件包时要校验GPG签名防止软件包被篡改。如果你的repo源里指定了gpgkey地址那么第一次使用这个源时系统会提示导入GPG密钥输入y确认即可。如果导入失败安装会被中断。为了避免麻烦很多教程会让你直接改成gpgcheck0跳过校验。我不建议这么干尤其是从镜像站拉包的时候GPG校验是排查依赖损坏问题的关键一环。正确做法是保留gpgcheck1然后手动导入对应源的GPG密钥文件。2.2 本地yum源的工作原理不只是createrepo一条命令本地yum源的原理和镜像源本质上完全一样只是软甲仓库的地址不是http://https://开头的URL而是file://开头的本地路径。yum照样需要读取repodata/repomd.xml来获取索引信息如果这个索引文件不存在yum会直接报错提示仓库获取失败。所以本地源的核心操作有两个步骤。第一步是把ISO镜像挂载或解压到本地目录确保目录结构里包含Packages目录和repodata目录第二步是用createrepo命令为软件包目录重新生成repodata索引。但如果你使用的是RedHat 9官方ISO镜像挂载后它的repodata目录是自带的其实不需要你手动执行createrepo。只有当你要把一堆零散的RPM包聚合成本地源时才需要createrepo出手。比如说你从网上下载了几十个RPM安装包想放到内网机器上用就需要先建一个目录把所有RPM包都放进去然后在这个目录下执行createrepo .让工具生成repodata索引。生成的索引文件描述了所有包之间的依赖关系yum才能把安装过程理顺。本地源的基路径通常放在/mnt/cdrom或者/var/ftp/pub这种固定位置。前者适用于一次性挂载ISO的场景后者适用于长期维护的软件仓库。企业内网里更常见的做法是把所有需要的RPM包放在一台文件服务器上另外一台机器定期执行createrepo --update来刷新索引然后暴露成一个HTTP或FTP服务供其他机器远程使用。这就是所谓的内网YUM源。2.3 优先级、缓存机制与常见配置参数多源环境下最头疼的问题就是优先级。比如你同时配置了国内镜像源和本地源本地源里有一个vim的RPM包版本是8.2国内镜像源里同步的版本是8.0如果yum没有优先级机制安装结果不可控。解决方法就是装yum-plugin-priorities插件然后在repo文件中通过priorityN参数设定优先级。这里的N值越小优先级越高比如priority1比priority100优先。插件会强制yum只从优先级最高的源中检索软件包如果该源没有这个包才从次高优先级的源中找。还有一个参数是enabled它决定这个仓库是否参与yum操作。当你临时想用某个源又不想删除配置文件时可以直接用yum --enablereposource-name install xxx来临时启用特定仓库。这在调试的时候非常有用。关于dns缓存和元数据缓存yum会在本地缓存每个仓库的repomd.xml和软件包列表。当你改了repo配置后如果不清理缓存yum可能还会使用旧的索引数据导致你明明改了源地址却没有生效。所以配置完一定要执行yum clean all清缓存再重新生成元数据缓存这个操作很多人忘记了然后跑来问为什么没效果。3. 实操过程与核心环节实现3.1 环境准备和现有yum源状态摸底操作之前先确认自己的系统版本和当前yum配置状态。登录系统后先跑一下版本信息cat /etc/redhat-release正常情况下会输出类似Red Hat Enterprise Linux release 9.2 (Plup) 的版本信息。接着看看yum源目录下都有什么ls -l /etc/yum.repos.d/RedHat 9最小化安装的情况下这个目录下应该只有redhat.repo这一个文件少数情况下还会有epel.repo和epel-testing.repo但里面通常写着enabled0也就是默认没启用。然后测试一下当前yum能否正常工作yum repolist如果出现This system is not registered with an entitlement server. You can use subscription-manager to register.这样的提示那就说明你的系统没有订阅Red Hat的服务内置源完全不可用正好进入我们的配置流程。接下来安装必要的工具。虽然yum本身不能装任何包但有限的基础工具是系统自带的比如tar、gzip、mount。如果这些工具不完整极小概率后面可以先把本地ISO源配好然后用本地源安装依赖工具。我建议第一个装的工具是vim和wget但如果你现在还没配好源装不上也正常用vi和curl顶住完全没问题。3.2 国内镜像源配置完整步骤以阿里云镜像站为例配置国内镜像源我推荐阿里云镜像站因为它对国内用户的速度和稳定性都非常好而且Rocky Linux和AlmaLinux的源同步频率很高基本跟上游保持一致。有一点需要提前说明阿里云目前没有为RedHat官方直接开设一个公开的yum源但它的Rocky Linux 9源可以直接给RedHat 9使用理由前面说过了二进制格式完全兼容。先进入repo文件目录新建一个核心配置文件cd /etc/yum.repos.d/ vim Rocky-Base.repo将以下内容写入文件[rocky-baseos] nameRocky Linux $releasever - BaseOS baseurlhttps://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 [rocky-appstream] nameRocky Linux $releasever - AppStream baseurlhttps://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 [rocky-extras] nameRocky Linux $releasever - Extras baseurlhttps://mirrors.aliyun.com/rockylinux/$releasever/extras/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9这里有个细节$releasever变量在RedHat 9上可能解析为空因为系统没有订阅信息/etc/yum/vars/目录下没有releasever文件。为了保险起见手动创建变量文件echo 9 /etc/yum/vars/releasever这样$releasever就会被替换成9避免URL拼接错误。不过要注意Rocky Linux 9源的包版本是跟随Rocky发布的RedHat 9内核小版本升级节奏可能和Rocky略有差异但绝大多数场景下不会冲突。接下来需要导入GPG密钥这里有个小坑。如果你直接执行yum install触发GPG校验系统会尝试从gpgkey指定的本地路径读取密钥文件。但本地路径如果不存在该文件yum并不会自动从网上拉取。所以需要手动导入wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 https://mirrors.aliyun.com/rockylinux/9/os/x86_64/RPM-GPG-KEY-Rocky-9 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9如果当前wget不可用用curl替代curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 https://mirrors.aliyun.com/rockylinux/9/os/x86_64/RPM-GPG-KEY-Rocky-9然后清理一下缓存重新生成yum clean all yum makecache这时候再执行yum repolist应该能看到三个Rocky源的状态。接下来测试一下安装yum install -y vim wget如果顺利安装成功说明国内镜像源配置已经完成。测试过程中如果遇到GPG导入交互提示直接按y确认。为了减少交互可以在yum配置文件中把assumeyes1打开但生产环境不建议这么设置风险太大。3.3 使用清华源或者中科大源的差异化配置思路阿里云源在中国大陆南部节点速度很好但北方部分网络环境连接阿里云可能有波动这时候可以换用清华源或者中科大源。清华源地址是https://mirrors.tuna.tsinghua.edu.cn/rockylinux/中科大源地址是https://mirrors.ustc.edu.cn/rockylinux/。只需要把repo文件里的baseurl里的域名替换即可其他内容完全不用改。例如[rocky-baseos] nameRocky Linux $releasever - BaseOS baseurlhttps://mirrors.tuna.tsinghua.edu.cn/rockylinux/$releasever/BaseOS/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9注意GPG密钥文件也需要从对应镜像站下载因为不同镜像站的密钥文件内容虽然一致但路径可能不同。操作方法都一样先用curl下载到本地再rpm --import导入即可。这里我再说一个判断源是否可用的方法。直接用curl -I看HTTP响应码curl -I https://mirrors.aliyun.com/rockylinux/9/BaseOS/x86_64/os/repodata/repomd.xml如果返回200 OK说明这个URL地址有效源可以正常使用。如果返回404 Not Found或者连接超时那就说明地址有问题需要换路径或换镜像站。3.4 本地yum源配置完整步骤ISO镜像挂载方式本地yum源配置不依赖网络是离线环境下的救命稻草。主要思路就是把RedHat 9的ISO镜像通过loop设备挂载到本地目录然后把这个目录作为yum仓库。先把ISO上传到机器上。如果你的ISO文件在宿主机上可以用scp、U盘拷贝或者虚拟机的CD/DVD设备直接加载镜像。我这次用的是虚拟机挂载ISO镜像的方式系统里看到的光驱设备是/dev/cdrom。创建挂载目录并挂载mkdir -p /mnt/cdrom mount -o loop /path/to/your/rhel-9.2-x86_64-dvd.iso /mnt/cdrom注意如果你的ISO文件是通过虚拟光驱挂载的设备节点通常是/dev/cdrom可以直接mount /dev/cdrom /mnt/cdrom挂载完成后查看目录结构ls /mnt/cdrom/正常情况下会看到Packages、repodata、AppStream、BaseOS等目录。RedHat 9的ISO里有两个软件仓库BaseOS和AppStream。BaseOS存放基础系统软件包AppStream存放应用程序模块。配置本地源时需要为这两个目录分别创建repo条目。接下来在/etc/yum.repos.d/下新建本地源配置文件vim /etc/yum.repos.d/local.repo写入[local-baseos] nameRedHat Enterprise Linux 9 - BaseOS (Local) baseurlfile:///mnt/cdrom/BaseOS enabled1 gpgcheck0 [local-appstream] nameRedHat Enterprise Linux 9 - AppStream (Local) baseurlfile:///mnt/cdrom/AppStream enabled1 gpgcheck0这里我把gpgcheck设置成0因为ISO镜像里的RPM包签名密钥验证在离线环境下容易引入密钥文件缺失的麻烦而且ISO是官方发布的来源可信度已经足够。如果大家想开gpgcheck1需要先找到ISO里面的RPM-GPG-KEY-redhat-release文件导入系统路径一般在/mnt/cdrom/的根目录下。然后清理并刷新缓存yum clean all yum makecache检查源是否生效yum repolist如果local-baseos和local-appstream两个源能在列表里看到并且状态是enable的说明本地源配置成功。测试安装yum install -y httpd这时yum会优先从本地源安装速度非常快基本不用等它从网络上拉取。3.5 本地yum源配置另一种场景通过createrepo聚合零散RPM包ISO镜像方式虽然简单但有个限制它只能安装RedHat 9 ISO中自带的那些包版本和软件范围都固定住了。如果你手头有一批内网开发的RPM包或者其他来源的RPM包想做一个自定义的本地仓库那就需要用到createrepo工具。先把所有RPM包都放进同一个目录比如/data/rpm-packages/mkdir -p /data/rpm-packages cp /path/to/your/*.rpm /data/rpm-packages/然后安装createrepo工具。如果现在系统上还没配好源可以用ISO镜像源来安装yum install -y createrepo进入RPM包目录执行createrepo /data/rpm-packages这个命令会在/data/rpm-packages下生成一个repodata目录里面存放所有软件包的索引文件。之后创建对应的repo文件vim /etc/yum.repos.d/custom.repo写入[custom-local] nameCustom RPM Repository baseurlfile:///data/rpm-packages enabled1 gpgcheck0 priority5每次往目录里添加新的RPM包后需要重新生成索引但要加--update参数避免重新扫描全部包createrepo --update /data/rpm-packages这个场景在企业内网中用得非常多。比如你在内网有一台离线服务器不允许连接外网但又需要安装一些第三方软件就可以在有网环境下把RPM包打包好拷到离线机器上用这个流程做一个自定义本地仓库然后在离线机器上愉快地用yum安装所有需要的依赖。3.6 优先级配置多源共存不混乱前面反复提到优先级问题这里给出具体配置方法。安装优先级插件yum install -y yum-plugin-priorities然后在各个repo文件的[repo名称]小节里添加priorityN参数。建议的配置策略是仓库名称priority值优先级local-baseos1最高local-appstream1最高custom-local5中等rocky-baseos10较低rocky-appstream10较低rocky-extras10较低修改完后再次执行yum clean all并在后续安装时观察源选择情况。用yum info查看某个包的来源yum info httpd输出信息里会显示From repo: local-appstream这样的字样说明该包来自本地源。如果显示From repo: rocky-appstream说明本地源没有这个包或版本不满足yum自动去国内源拉取了。这个优先级配置非常关键特别是当你想用本地源装软件同时又开启了Rocky国内源的时候。如果不设置优先级两个源里有同一个包的不同版本yum会随机选一个装完依赖一塌糊涂排查起来很痛苦。3.7 自动挂载配置重启不失效本地源是挂载在/mnt/cdrom下的ISO镜像系统重启后挂载会失效本地源也就跟着失效了。为了避免每次开机都要手动mount需要把挂载信息写到/etc/fstab里。先用blkid查一下ISO或光驱设备的UUID或设备路径blkid /dev/cdrom或者直接写设备路径在/etc/fstab末尾加一行/dev/cdrom /mnt/cdrom iso9660 defaults,loop 0 0保存后先测试一下配置是否正确umount /mnt/cdrom mount -a如果没有报错重新查看/mnt/cdrom下的内容确认挂载成功。以后再也不用担心重启问题了。3.8 配置完的验证清单一个完整检查流程配置完成后不要急着跑业务先过一遍验证流程确保整个yum链路是通的。我建议按以下顺序检查第一步查看当前所有源的状态和优先级yum repolist -v输出信息里能看到每个repo的ID、名称、仓库地址、启用状态、优先级。确认本地源和国内源都在列表中且启用的源里有优先级值。第二步清理和重建缓存yum clean all yum makecache确保没有报错如果某个源连不上makecache阶段就会暴露问题。第三步模拟安装一个包不真正执行看依赖解析流程yum install -y nginx --downloadonly或者更简单点直接用yum deplist nginx看看依赖分析是否正常。只要不出现无法解析依赖或者找不到软件包的错误说明源配置基本没问题。第四步实打实安装几个常用软件测试比如vim、wget、tar、net-tools看安装成功率和安装速度。如果全部秒装成功或者直接走本地源就说明配置达标了。4. 常见问题与排查技巧实录4.1 问题一系统报错“This system is not registered”怎么办这个报错是RedHat 9默认状态的标志没有任何网络访问能力。核心原因就是没有订阅账号无法连接Red Hat官方的订阅服务。最直接的解决办法就是使用我们前面配置的国内镜像源或者本地源绕开官方订阅源。但要注意一点yum repolist里如果还残留着rhel-9-for-x86_64-baseos-rpms这种官方源条目会导致yum操作很慢因为系统要等到订阅服务超时才能跳过。解决办法就是把官方源配置文件禁用掉cd /etc/yum.repos.d/ vim redhat.repo把文件里的所有enabled1改成enabled0或者直接把这个文件改名注释掉mv redhat.repo redhat.repo.bak我自己更推荐后一种方式简单粗暴且完全生效。如果后续需要通过订阅管理来获取官方支持再把文件名改回来就行不用深究里面的具体内容。4.2 问题二yum makecache时报404错误404错误说明repo文件里写的URL地址不对或者镜像站上对应的目录不存在。最常见的两种原因第一种是$releasever变量没解析成功导致URL变成了rockylinux//BaseOS这种带空格的格式一访问自然404第二种是架构变量$basearch被写成了x86_64但镜像站上实际目录叫x86_64没问题如果镜像站重定向过就可能出问题。排查方法是用curl -I直接测试最终的URL看看返回状态码。如果确实404先用echo $releasever检查变量是否为空然后检查/etc/yum/vars/releasever文件是否正确。写在repo文件里的baseurl也可以不用变量直接写死版本号比如baseurlhttps://mirrors.aliyun.com/rockylinux/9/BaseOS/x86_64/os/虽然不灵活但排查错误压力小很多。4.3 问题三安装了包但提示gpg key检索失败GPG密钥导入失败是个体验很差的错误安装过程中会让你确认密钥指纹输错或者中断就失败了。解决方法就是手动导入绕开自动检索流程。以Rocky源为例前面我写过wget下载GPG密钥再rpm --import。如果你是使用清华源或中科大源同样从对应地址下载curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 https://mirrors.tuna.tsinghua.edu.cn/rockylinux/9/BaseOS/x86_64/os/RPM-GPG-KEY-Rocky-9 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9如果你的系统已经有了一个老的GPG密钥新源的密钥指纹不一致先删除旧密钥再导入新密钥。用rpm -qa gpg-pubkey查看已导入的密钥包然后rpm -e --allmatches gpg-pubkey-xxxx删除对应密钥。如果你实在不在乎GPG校验可以直接在repo文件里把gpgcheck1改成gpgcheck0然后yum clean all yum makecache问题立刻消失。但我要再强调一次能开着就开着别为了一点方便把系统暴露在风险里。4.4 问题四本地源挂载没问题却提示packages not found有朋友反映ISO挂载成功/mnt/cdrom目录下能看到Packages目录但执行yum install时老是找不到包。最常见的原因是repo文件里的baseurl指向了ISO镜像的根目录而不是BaseOS或AppStream子目录。RedHat 9 ISO的软件包分在两个仓库BaseOS和AppStream。如果你只用了一个repo条目指向根目录yum只会扫描根目录下的repodata找不到任何分组信息自然就提示找不到包。正确写法就是我在前面给过的local.repo配置一个[local-baseos]指向/mnt/cdrom/BaseOS另一个[local-appstream]指向/mnt/cdrom/AppStream。另外还有一种情况/mnt/cdrom目录下确实没有repodata子目录只有RPM包。这说明你拿到的不是完整版DVD ISO而是一个变种镜像。判断方式很简单ls /mnt/cdrom/repodata/如果目录不存在或者空说明ISO里没有自带的仓库索引你需要用createrepo重新生成命令如下createrepo /mnt/cdrom但更推荐直接换一个完整版ISO省时省力。4.5 问题五配置了多个源yum安装时的包来源飘忽不定这个问题在RedHat 9上特别明显因为不同源之间的包版本可能不完全一致。比如本地ISO源里vim版本是8.2.2637Rocky AppStream源里vim版本是8.2.2637-16虽然主版本一致但release号和构建号不同。两个源都提供了这个包yum在没有优先级插件的情况下会随机选择可能今天走本地源明天走国内源。解决方案就是我们前面提到的yum-plugin-priorities插件加上各个repo的priority参数。装了插件以后yum会强制按照优先级顺序检索。你可以用yum --showdupes list vim查看同一个包在哪些源里可用然后结合优先级判断最终安装来源。另外一个小技巧临时指定只从某个源安装软件yum install --disablerepo* --enablerepolocal-appstream httpd这条命令会禁用所有源仅临时启用local-appstream源非常精确。调试多源冲突的时候很管用。4.6 问题六yum操作很慢卡在“等待网络”或者“正在检查元数据”国内网络环境里yum变慢的第一大原因就是访问了官方订阅源。即使你加了国内源如果redhat.repo里的官方源没有被禁用yum仍然会尝试连接订阅服务超时重试几次才能跳过。所以配置完国内源后一定要把redhat.repo改为.bak后缀或者把enabled全改成0。第二大原因是网络到镜像站的链路质量不佳。解决方法是换一个镜像站或者在repo配置文件里同时配置多个镜像地址yum会自己探测可用的源[rocky-baseos] nameRocky Linux $releasever - BaseOS baseurlhttps://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/ https://mirrors.tuna.tsinghua.edu.cn/rockylinux/$releasever/BaseOS/$basearch/os/ gpgcheck1 enabled1这样yum在访问第一个URL失败时会自动尝试第二个URL实际的下载体验会好很多。还有一个常见原因是你配置了fastestmirror插件它会在每次yum操作时测试所有镜像的速度这本身就会让操作变慢。如果镜像数量多而且网络波动大直接禁用这个插件sed -i s/enabled1/enabled0/g /etc/yum/pluginconf.d/fastestmirror.conf4.7 问题七从本地源安装后系统升级内核等关键包失败本地源一般是固定的ISO镜像版本比如RedHat 9.2。如果你从国内源装了更新的软件包本地ISO源里的同一个包版本反而更旧yum升级的时候会发现多个源之间存在版本冲突。处理方式很简单给本地源的priority设为最低让国内源优先提供新版本本地源只做离线兜底。或者说如果你确定只用离线环境就不要让系统去访问国内源把国内源全部禁用掉保持环境一致性。在内网生产环境里我通常建议本地源和外网源不要同时开启。你需要的是稳定性不需要也不应该让系统自动从外网拿包。真正需要更新软件包时手动yum --enablereporocky-baseos --enablereporocky-appstream update临时启用外网源更新完再禁用。这条策略在运维圈叫“可控变更”比一直开着所有源更稳妥。5. 一些实操心得或者说踩过的坑RedHat 9源配置这件事单独看每一步都很简单但放在一起还是有几个容易让人心态崩掉的细节。第一配置任何源之前先确认自己的系统版本和架构。rhel-9.2、x86_64、aarch64这些参数决定了baseurl的路径。写错一个字母后续所有排查都白费。我在实际工作中见过有人拿aarch64机器按x86_64路径配404了半天才发现架构不对。第二/etc/yum/vars/releasever这个变量文件优先级很高它会影响所有repo文件里的$releasever变量。如果你之前设置过这个文件比如设成8那后面再配Rocky 9源时路径就会指向8版本。如果莫名报错先检查这个文件里的内容。第三本地源和国内源同时开启时优先级插件一定要装。不装插件yum的行为就是“有什么装什么”版本漂移是早晚的事。装上插件把所有repo的priority都写清楚yum的行为才可控。这个习惯应该从配第一台机器就养成。第四ISO挂载自动化很有必要。很多新手配完本地源重启机器后yum直接废了还以为是配置文件写错了其实是挂载没了。坚持把挂载写进/etc/fstab一劳永逸。第五每组repo文件都要保留原始版本。别把redhat.repo直接干掉改名备份是更好的选择。这样以后就算有官方订阅或者需要走官方KB文档还能快速恢复。我在多次配源之后形成的个人习惯是先把所有官方源禁用配置国内镜像源并验证能装包再把本地ISO源挂载并设置高优先级最后装好优先级插件。整个过程大概十五分钟。之后这台机器无论是离线还是联网yum装包都是顺滑的。希望这篇文章能帮你在RedHat 9上少走几步弯路直接搞定源配置。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进