麒麟V10系统yum源更换实战:从官方源到EPEL与本地ISO源配置指南
2026/9/16 2:25:35 网站建设 项目流程

前两天帮客户配置一台麒麟KylinV10服务器,默认的yum源下载速度慢到让人怀疑人生,更麻烦的是很多常用软件在官方源里压根没有,只能手动编译或者满网找rpm包。后来我把yum源从官方源整体切到第三方仓库,再配了一个本地ISO源做兜底,整个环境才算真正能用起来。这篇文章就是把这次换源的全过程、关键配置和踩过的坑完整记录下来,给正在被KylinV10源折磨的运维、开发一个可以直接照抄的作业。

1. 换源前先摸清家底:系统识别与源目录结构

很多朋友一上来就照着网上的文章改 /etc/yum.repos.d,结果不是404就是依赖崩了,根本原因在于KylinV10不是一个“标准”的CentOS,它有自己的版本体系和仓库结构,x86_64的源和aarch64的源完全是两套东西。动手之前,先花两分钟搞清楚三件事:系统版本、硬件架构、现有源长什么样。

1.1 三步确认系统版本和架构

先执行这几条命令:

cat /etc/os-release cat /etc/kylin-release 2>/dev/null uname -m

第一条命令输出里能看到Kylin Linux Advanced Server release V10这样的信息,注意它到底属于V10的哪个修订版本,SP1、SP2还是SP3,不同修订版本的仓库路径会有差异。第二条命令有的机器上存在,有的不存在,不影响判断。第三条命令输出x86_64就是Intel/AMD架构,输出aarch64就是ARM架构(比如鲲鹏、飞腾的机器),这个直接决定你后面baseurl里的架构路径怎么写。

接着再看当前仓库状态:

yum repolist all

把默认启用的仓库名字记下来。KylinV10的官方repo文件通常叫kylin_x86_64.repokylin_aarch64.repo,位于/etc/yum.repos.d/目录下。打开之后能看到baseurl一般指向archive.kylinos.cn之类的官方地址。这就是你接下来要动刀的地方。

为什么不厌其烦地强调版本和架构?因为yum的baseurl是“协议+域名+路径”的组合,路径里通常包含发行版代号、版本号、架构三层信息,任何一个写错都直接404。你在x86机器上抄了一个aarch64的源地址,yum repolist可能显示仓库是正常的,但一旦真正拉取软件包,全都失败。这种问题官方文档很难帮你排查,只能靠经验。

1.2 搞懂repo文件里每一行的含义

随便打开一个repo文件看结构:

[ks10-adv-os] name=Kylin Linux Advanced Server V10 - OS baseurl=http://archive.kylinos.cn/yum/v10/x86_64/ enabled=1 gpgcheck=0
  • [ks10-adv-os]是仓库的唯一标识,yum repolist显示的就是它;
  • name只是给人看的描述信息,可随意;
  • baseurl是包索引和RPM包的实际下载地址,最关键的一行;
  • enabled=1表示启用,enabled=0表示保留配置但当前不生效;
  • gpgcheck=0表示跳过GPG校验,1表示要求校验,具体看镜像站支持。

看完就明白了,所谓的换源,本质上就是改baseurl,或者直接替换整个repo文件。但这里有个很容易被忽略的细节:repo文件名的前缀顺序会影响yum的加载顺序,如果同时存在多个以base命名的仓库,系统会按首字母顺序解析,并且同一个软件包出现在多个仓库时,会根据baseurl的顺序和包的版本号决定装哪个。所以不要随手创建一堆名字相近的文件,后面排查起来很痛苦。

动手改之前,强烈建议把整个目录完整备份。别嫌这一步多余,后面配置混乱导致yum完全无法使用时,这是唯一的后悔药。

2. 第三方仓库怎么选:镜像站对比与兼容性分析

2.1 官方源的问题到底出在哪

先说结论:官方源不是不能用,而是适用范围太窄。我实际体验下来主要有三个痛点:

  1. 包数量少。官方源主要覆盖系统基础组件和少量自研软件,像subversionhtopncduiftop这类运维常用工具,要么没有,要么版本老得离谱。
  2. 速度不稳定。不同时段访问官方源的延迟波动很大,高峰时期几百KB/s是常态。
  3. 更新节奏慢。很多安全更新和bug修复不会及时同步到仓库里,对生产环境来说是个隐患。

在初始阶段我其实尝试过“硬扛”,结果为了装一个 subversion,手动编译了大半天,依赖装了一堆,最后还被后续yum操作给覆盖掉。这个经历让我彻底决定换源。

2.2 主流镜像站横向对比

国内靠谱的第三方镜像站,我实测下来主要是下面这几家:

镜像站地址更新频率国内访问速度备注
阿里云mirrors.aliyun.com约2小时很快CentOS旧版本已迁至vault/archive
清华TUNAmirrors.tuna.tsinghua.edu.cn约4小时快,教育网最佳容量大,稳定性好
中科大USTCmirrors.ustc.edu.cn约4小时对RHEL系兼容包维护认真
网易mirrors.163.com较慢更新频率不如前几家
华为云mirrors.huaweicloud.com约2小时有云服务器内网地址可用

选型逻辑不复杂:服务器在哪个云厂商就优先用哪个云厂商的镜像,速度最稳;如果是自有机房或IDC,就选阿里云或清华中科大,整体可靠性最高。网易虽然存在很多年,但同步频率确实跟不上,新装的软件包经常缺胳膊少腿。

2.3 兼容性问题:别把Kylin当成纯CentOS用

这是换源最核心的坑。KylinV10的底层和RHEL 8系生态相似,但软件包的依赖关系并不完全一致,直接拿CentOS 8的源替换系统base源,大概率会出现依赖冲突。我建议的安全做法是:

  • 保留官方源作为base源,不要全部干掉;
  • 用第三方源补充EPEL、extras这些官方仓库缺失的内容;
  • 不要同时启用两个不同的base仓库,否则相同软件包会产生版本冲突。

网上有些教程让你直接搬CentOS源覆盖整个/etc/yum.repos.d/,这种操作在测试环境或许能跑通,生产环境一旦运行yum update,非常容易把关键系统包升级到不兼容的版本,导致ssh或内核模块出问题。我在文章后面给出的方案是“官方源保底+第三方源扩展+本地源应急”三层结构,适合绝大多数真实场景。

3. 保姆级更换流程:备份、写入、清理、验证

3.1 先备份,任何情况都别跳过

在改动任何配置之前,先把原有的repo文件归档:

mkdir -p /etc/yum.repos.d/backup cp -a /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ ls -l /etc/yum.repos.d/backup/

cp -a是为了保留文件原有的属主和权限,方便回滚的时候直接复制回去。这个目录备份完,后续不管你怎么折腾,心里都有底。

3.2 添加EPEL仓库,解决常用软件缺失问题

KylinV10的官方源里没有EPEL,而很多第三方工具都在EPEL里。先装EPEL的release包。这里要注意,KylinV10是基于RHEL 8生态的,所以用EPEL 8的包:

yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

装完确认一下:

rpm -qa | grep epel-release ls -l /etc/yum.repos.d/epel*.repo

EPEL仓库默认启用的只有epel源,epel-debuginfoepel-source是禁用的。如果你想测试更多软件包,可以把epel-testing启用,但生产环境不建议,因为testing仓库里的包稳定性没有保障。

3.3 替换官方源里的base仓库路径

官方源配置文件里的baseurl可以保留,但如果你发现官方源的下载速度确实无法忍受,需要把它指向镜像站,那么可以选择修改官方repo文件中的baseurl,而不是删除整个文件。例如把baseurl改为阿里云的CentOS 8 vault源:

[ks10-adv-os] name=Kylin Linux Advanced Server V10 - OS baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/ enabled=1 gpgcheck=0

但是注意,这个操作风险很高。CentOS 8已经停止常规维护,vault里的包如果和麒麟官方源混用,依赖关系可能翻车。我更推荐的方式是:保留官方源不动,把第三方源(EPEL)作为补充仓库,而不是直接改baseurl。如果你确实想换baseurl,建议先选一台测试机验证,不要直接在线上操作。

3.4 清理缓存并重建索引

改完配置后,执行以下命令顺序:

yum clean all yum makecache yum repolist all

yum clean all会把/var/cache/yum下的缓存清空,避免旧元数据干扰;yum makecache会重新从各个源拉取元数据并建立缓存。这一步如果报了404或者GPG错误,先别急着继续,回到上一章排查,等yum repolist all里所有源状态都是正常的再说。

3.5 先装个小包验证,别急着yum update

换源之后最忌讳的事情就是直接yum update。正确的验证方式是先安装一个小体积、依赖少的包:

yum install -y htop yum info subversion

htop在EPEL源里通常有,装完直接执行htop看进程列表是否正常,说明源链路是通的。yum info subversion是查看subversion在仓库里的可用版本,不实际安装,验证元数据是否正常。如果这两条命令都成功,再进行下一步操作。我的经验是:一切顺利的情况下,从备份到验证完大约10分钟;一旦中途报错,可能就是半小时起步的排障过程,所以验证环节千万别省。

4. 离线环境救星:本地ISO源配置实操

4.1 什么情况必须用本地源

生产环境里经常碰到这些场景:内网隔离、没有外网权限、安全等保要求禁止服务器直接访问公网镜像。这时候不管第三方源多快,你都用不上,唯一的办法就是本地源。

本地源有两种主流形态:一种是把安装ISO文件挂载到服务器上,做成file协议源;另一种是运维自己搭建HTTP仓库,把RPM包整理好放在Web目录里。对于单机或者小规模环境,ISO挂载最简单。

4.2 挂载ISO镜像

先把ISO文件上传到服务器,比如放到/data/iso/下,然后执行:

mkdir -p /mnt/kylin_iso mount -o loop /data/iso/Kylin-Desktop-V10-SP2-x86_64.iso /mnt/kylin_iso df -h /mnt/kylin_iso

mount -o loop是直接把ISO文件当作块设备挂载,不需要额外刻盘。挂载成功后,在/mnt/kylin_iso下应该能看到 packges 目录。如果ISO是服务端版本,目录结构会稍有不同,但核心路径都是自带Packages目录。

这里有个细节:有些服务器重启之后挂载会丢失,所以如果想长期使用,建议把它写进/etc/fstab

/data/iso/Kylin-Desktop-V10-SP2-x86_64.iso /mnt/kylin_iso iso9660 loop,defaults 0 0

写入fstab之前先用umount /mnt/kylin_iso取消挂载,再执行mount -a看是否能自动挂载成功,避免写错导致开机异常。

4.3 写一个本地repo文件

挂载完成后,创建本地repo配置:

[local-kylin-iso] name=Kylin V10 Local ISO baseurl=file:///mnt/kylin_iso enabled=1 gpgcheck=0

注意baseurl用的是file://协议,后面跟上挂载点绝对路径。gpgcheck=0是为了省去本地ISO签名校验的麻烦,如果你对安全要求高,可以把官方公钥导入之后设置成1,但单机环境里0更省事,也不影响安装结果。

写完配置后同样执行:

yum clean all yum makecache yum repolist all

然后随便从ISO里装一个包,比如yum install -y vim-enhanced,确认本地源能正常工作。我实测下来,ISO源在离线内网里装系统基础组件的体验最舒服,速度是SSD级别的,比外网源稳定得多。

4.4 本地源和网络源的优先级处理

如果你同时配置了本地ISO源和网络源,你就会发现yum有时候会从网络源装包,有时候从本地源装,行为看起来“随机”。其实yum的规则是:在包版本相同的情况下,仓库的字母顺序优先,或者说先出现的仓库优先。

要想让本地源优先,可以用yum-plugin-priorities插件:

yum install -y yum-plugin-priorities

然后在repo文件里加上priority参数,数字越小优先级越高:

[local-kylin-iso] name=Kylin V10 Local ISO baseurl=file:///mnt/kylin_iso enabled=1 gpgcheck=0 priority=1 [ks10-adv-os] name=Kylin Linux Advanced Server V10 - OS baseurl=http://archive.kylinos.cn/yum/v10/x86_64/ enabled=1 gpgcheck=0 priority=10

这样yum会优先从本地ISO源解析包,本地没有的才去官方源找。这个配置在同时使用多个源的时候极其有用,特别是混合源环境下,能避免很多“装出来版本不对”的问题。

5. 换源后的常见翻车现场与排查链路

5.1 404错误:路径写错是头号杀手

报错特征:

http://mirrors.example.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

这个报错几乎都是baseurl路径和实际镜像目录结构不匹配造成的。排查链路很固定:

先手动访问一下这个URL,用curl看服务器返回什么:

curl -I https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/repodata/repomd.xml

如果返回404,说明路径里有不存在的层级。常见原因有三个:版本号写错(比如系统是V10 SP1却写成了SP2)、架构写错(x86_64当成aarch64)、目录结构理解错(混淆了BaseOS和AppStream)。逐个核对,基本能解决。

5.2 GPG签名校验失败

报错特征:

warning: rpmts_HdrFromFdno: Header V4 RSA/SHA256 Signature, key ID xxxxx: NOKEY

说明repo文件里gpgcheck=1,但本机没有导入对应公钥。解决办法有两种:

  1. 导入仓库公钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-XXX

公钥文件一般在你下载的release包或镜像站根目录里能找到。

  1. 如果只是临时测试,可以把该repo文件里的gpgcheck改成0。

我建议正式环境优先用方案1,安全校验别随便关。

5.3 元数据错误,仓库显示“镜像同步中”

报错特征:

One of the configured repositories failed (xxx) and yum doesn't have enough cached data to continue.

大概率是访问的镜像站正在做文件同步,或者本地缓存损坏。先把缓存清掉重建:

yum clean all rm -rf /var/cache/yum yum makecache

如果重建之后还是同一个源报错,那就换一个镜像站地址,别在同一个源上死磕。有些镜像站同步窗口确实会持续比较久,等半小时不如换源来得快。

5.4 装subversion这类软件时的依赖告警

装subversion时容易遇到EPEL源和官方源里libserfapr版本不一致导致的依赖冲突。报错里会出现类似Package xxx requires yyy >= x.x, but none of the providers can be installed的提示。

我的处理思路是:先别急着禁用某个源,先用yum deplist subversion看它到底依赖哪些库、哪个源能提供。如果依赖来自官方源,就保留官方源;如果依赖来自EPEL,就确认EPEL启用状态正常。两条路都不通的情况下,再考虑手动编译或者用低版本。

比如我之前在KylinV10 SP2上装subversion,EPEL里提供的1.14版本依赖libserf-1-1.so.1,而官方源里对应的库版本偏老,最后通过启用EPEL的Testing仓库才解决。少走弯路的办法是先查清依赖来源,而不是盲目开关源。

5.5 代理和防火墙导致的连接超时

如果网络源装包时卡住,报错为Could not resolve host或者长时间Cannot retrieve metalink for repository,先自查两件事:

  1. 确认网络连通性:curl -I https://mirrors.aliyun.com/能否正常返回;
  2. 如果服务器需要走代理,给yum单独配代理:
vi /etc/yum.conf # 在文件里加: proxy=http://proxy.example.com:8080

内网环境经常会遇到“ping得通但yum连不上”的问题,本质是HTTP协议被防火墙拦了,走代理是常规解法。如果代理地址也需要认证,就加上proxy_usernameproxy_password两行。

5.6 最隐蔽的一类问题:同名包版本漂移

有时候yum install时报错Package does not match intended download,这是因为同一个软件包在两个源里的版本相同但RPM的完整版本号或构建号不一致,yum拿到的元数据和实际文件对不上。处理方式是把两个源里冗余的其中一个临时禁用,装完再启用:

yum install --disablerepo=ks10-adv-os --enablerepo=epel subversion

这条命令能绕开版本漂移的报错。这个技巧在混合源环境里非常实用,算是排查这类问题最省事的手段。


最后再说一个个人习惯:我每次换完源,都会顺手把/etc/yum.repos.d/backup/这个备份目录保留至少三个月,并且把常用的 repo 文件命名整理得干净利落,比如kylin-iso.repoepel.repoaliyun-base.repo这种一目了然的名字。运维这件事,很多坑都不是技术难度大,而是环境状态混乱导致排查成本飙升。源配置看起来是小事,但一旦出错,直接影响所有软件安装,值得多花几分钟把它做规范。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询