news 2026/9/16 5:56:36

麒麟V10 ARM架构内网环境配置本地离线yum源全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
麒麟V10 ARM架构内网环境配置本地离线yum源全攻略

装机时最烦什么?不是系统装不上,而是装完之后要用软件,发现yum源连不上外网,或者内网环境压根就没外网权限。尤其是麒麟V10(ARM架构)这种国产化环境,生产环境多数是隔离网,身边没有U盘里的安装包根本寸步难行。这篇文章就围绕“麒麟V10(arm)配置本地离线yum源”这个主题,把我在ARM架构下配置本地源踩过的坑、趟平的路,完整捋一遍。

这套操作适合谁?刚拿到麒麟V10 ARM服务器或虚拟机,想离线安装软件包的同学;内网隔离环境下做运维交付的工程师;以及在VMware里装了麒麟V10 ARM版但受不了每次都用rpm手动装依赖的折腾党。核心目标只有一个:把系统ISO镜像变成一台“内置软件超市”,让yum install从此不再报错。

1. 项目概述与核心思路

1.1 为什么非配置本地离线yum源不可

很多从CentOS过来的人,习惯了联网之后直接用yum装东西。麒麟V10虽然基于Linux生态,带yum/dnf包管理,但它在ARM架构下的软件仓库和x86完全不同。更重要的是,政府、军工、金融这类国产化替代环境,绝大多数是物理隔离的内网,没有外网权限,软件源根本无法访问。这时候如果不会配本地源,每装一个软件都是噩梦:rpm包依赖一堆,手动rpm -ivh一个包,跟着报错一串依赖缺失,人直接裂开。

本地离线yum源的本质,就是把麒麟V10的ISO镜像(或者拷贝出来的rpm包目录)挂载到系统某个目录,再通过仓库配置文件告诉yum“软件从这里找”。一旦配好,yum会自动处理依赖关系,体验和外网源几乎一样。这是解决离线安装问题的标准做法,也应该是每个做国产化运维的人必须掌握的基础技能。

1.2 麒麟V10与ARM架构的适配要点

麒麟V10有两个大方向:桌面版和服务器版,服务器版常见后缀有SP1、SP2、SP3。每个版本对应不同的ISO镜像,而且不同CPU架构的ISO不能混用。这里务必注意,麒麟官网下载镜像时会区分x86_64aarch64,ARM架构机器必须选aarch64版本。如果拿x86的镜像硬塞到ARM机器上,grub引导那一步就过不去。

ARM架构在yum配置上的特殊性在于:仓库里的rpm包全部是aarch64编译的,repo地址中也会包含架构信息。配置方法上,麒麟V10兼容RHEL/CentOS的yum生态,所以/etc/yum.repos.d/目录下写.repo文件的语法和CentOS几乎一致。理解了这一点,很多CentOS的yum配置经验就能直接迁移过来,不用心慌。

1.3 方案选型:挂载ISO还是拷贝目录

配置离线源有两种常见方案:

  • 直接挂载ISO:把麒麟V10的ISO文件mount到某个目录,yum源直接指向挂载目录。优点是不占额外磁盘空间,镜像文件放在磁盘哪里都行;缺点是系统重启后需要重新挂载(可以写开机自启或fstab配置)。
  • 拷贝rpm包到本地目录:把ISO里的Packages目录整个拷贝到硬盘某个路径,再用createrepo生成repodata索引。优点是源永久可用,不怕重启后挂载丢失;缺点是占磁盘空间,一般ISO几个GB,拷出来同样大小。

我个人的建议:如果是长期使用的服务器,采用“拷贝目录+createrepo”的组合最稳;如果是临时测试环境、虚拟机折腾,直接挂载ISO就够了,省事。下面两种方案我都会写清楚,你按场景选。

2. 前置准备与环境确认

2.1 镜像文件与安装环境准备

先确认你手上的东西齐不齐:

  • 麒麟V10 ARM版本的ISO镜像(例如Kylin-Server-V10-SP3-General-Release-arm64-2023xxxx.iso,命名大概这个格式)
  • 一台ARM架构的物理机或者虚拟机(VMware安装麒麟V10 ARM版需要虚拟机CPU开启ARM支持,通常用M系列Mac上的VMware Fusion或QEMU模拟;x86的VMware Workstation装不了ARM系统,这点很多人不知道)
  • root权限或者能用sudo执行命令

关于“VMware安装麒麟V10”这个热搜词,我多说一嘴。最新版本的VMware Workstation在x86主机上不支持ARM系统镜像启动,必须在ARM主机(比如Apple Silicon Mac)上用VMware Fusion或UTM、QEMU这类虚拟机软件。所以如果你是在普通Windows电脑上想装ARM版麒麟,需要先确认宿主机的架构,不然镜像文件拿对了也是白搭。

2.2 系统环境检查与架构确认

开机进入系统后,先验证系统架构和版本,避免后续操作白做:

uname -m # 显示 aarch64 说明是ARM架构,显示 x86_64 说明是x86架构(那就得换x86镜像) cat /etc/kylin-release # 查看麒麟版本,比如 V10 SP3、V10 SP1 等 df -h # 确认磁盘空间,预留至少8GB以上余量

同时检查yum版本:

yum --version # 或者 dnf --version

麒麟V10一般自带yum或dnf,两者命令基本兼容。实际操作中,我用yum命令比较多,下文命令统一用yum,如果你系统里dnf可用,改成dnf也一样。

再确认镜像文件是否已经上传到服务器,比如放在 /data/iso/ 目录下。这一步很多新手容易漏,以为系统自带ISO路径,其实都需要自己准备。

2.3 创建挂载点与目录规范

挂载点选哪里没强制要求,但建议放在 /mnt 或 /media 下。我习惯用 /mnt/cdrom:

mkdir -p /mnt/cdrom

如果做拷贝方案,还需要一个存放rpm包的目录。我习惯建 /data/kyum/packages:

mkdir -p /data/kyum/packages

目录结构规范一下,后面维护和排查都省事。别把包散落在/root下,到时候清理都麻烦。

3. 离线yum源配置实操

3.1 方案A:直接挂载ISO镜像(最快路径)

先把ISO挂载到挂载点。假设ISO文件路径为 /data/iso/Kylin-Server-V10-SP3-Release-arm64-2023.iso:

mount -o loop /data/iso/Kylin-Server-V10-SP3-Release-arm64-2023.iso /mnt/cdrom

挂载成功后,查看目录内容:

ls /mnt/cdrom

正常会看到 Packages、repodata、BaseOS 或者 Extra 等目录。不同麒麟版本的ISO目录结构略有差异,SP3的服务器版一般会有Packages和repodata;S版桌面版可能叫base等。看到repodata目录,说明这个ISO自带yum源索引,可以直接用;如果没有repodata,需要走方案B生成索引。

为了让重启后不用手动挂载,往 /etc/fstab 加一行:

echo "/data/iso/Kylin-Server-V10-SP3-Release-arm64-2023.iso /mnt/cdrom iso9660 loop,defaults 0 0" >> /etc/fstab

注意:写入后建议先执行mount -a测试一下,确认fstab没写错再放心重启,不然错了可能开不了机。

3.2 方案B:拷贝rpm包到本地目录

这种方式适合长期使用,不依赖挂载状态。先把ISO挂载上(同上),然后把全部rpm包拷到 /data/kyum/packages:

mount -o loop /data/iso/Kylin-Server-V10-SP3-Release-arm64-2023.iso /mnt/cdrom cp -ra /mnt/cdrom/Packages/* /data/kyum/packages/

Packages目录可能包含两三千个rpm包,大小约2-5GB,拷贝时间取决于磁盘速度,SSD一般几分钟。拷完后,这个目录就是你的“软件仓库根目录”。

然后安装createrepo工具生成索引。如果ISO里面有createrepo的rpm包,直接安装:

rpm -ivh /mnt/cdrom/Packages/createrepo-*.rpm

有的ISO里可能没有自带createrepo包,这时候可以根据依赖关系把相关的rpm一起装,或者从已装系统里找(云原生还是什么的)。更省事的办法是:如果系统能联网(部分环境只是“没配源”,网络是通的),先临时配个外网源把createrepo装上;不行就手动解决依赖。

生成索引:

cd /data/kyum/packages createrepo .

createrepo执行完成后,会在 packages 目录下生成 repodata 子目录,里面是repomd.xml等索引文件。这就是yum识别源的关键。

3.3 编写本地仓库repo文件

不管用方案A还是方案B,最后都要在 /etc/yum.repos.d/ 下写一个.repo文件。这里有个关键点:先备份并禁用其他repo文件,避免yum同时匹配多个源导致包冲突或超时。

新建一个 local.repo:

vim /etc/yum.repos.d/local.repo

内容如下(以方案A挂载ISO为例):

[local] name=Local Kylin Yum Repo baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0

如果是方案B拷贝目录,则改成:

[local] name=Local Kylin Yum Repo baseurl=file:///data/kyum/packages enabled=1 gpgcheck=0

几个参数重点说明一下:

  • baseurl必须是file://协议,路径指向真正的仓库根目录(也就是包含repodata目录的目录)。
  • gpgcheck=0表示不校验GPG签名。企业生产环境虽然建议开gpgcheck=1,但离线内网源通常是自己人维护,ISO里的公钥导入也不麻烦(下面会讲),嫌麻烦直接设0也能跑。
  • enabled=1确保仓库被启用。

如果系统里其他repo文件没禁用,可以统一改后缀:

cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/ # 然后把local.repo留在这里

也可以保留其他源但把enabled=0。我习惯直接移到backup目录,隔离干净,yum源扫描时更快,也不会出现“元数据文件不匹配”的怪问题。

如果开了gpgcheck=1,需要导入麒麟的公钥。公钥一般在ISO根目录或RPM-GPG-KEY文件里。操作如下:

rpm --import /mnt/cdrom/RPM-GPG-KEY-* # 或 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*

注意:如果导入失败或者路径不对,关闭gpgcheck是快速解法,不用死磕。

3.4 清理缓存并验证仓库

配置完最重要的一步:清理yum缓存。不清理的话,yum会尝试用旧的缓存信息,源配置改了也不生效:

yum clean all yum makecache

执行yum makecache时,如果baseurl和repodata都对,会在几秒内生成缓存,过程输出类似“local | 1.9 kB 00:00 ...”。

然后验证仓库是否被识别:

yum repolist

输出会有local仓库以及软件包数量。比如:

仓库 id 仓库名称 状态 local Local Kylin Yum Repo 4,096

这里出现的数量就是你能离线安装的软件包个数。如果说状态为0或者提示找不到仓库,多半是baseurl路径不对、repodata缺失或没有执行makecache。

再实际装个包测试一下,比如装一个常用的压缩工具或编辑器:

yum install -y vim

如果无报错,出现“Complete!”,恭喜,离线源配置成功。

4. 常见问题与排查技巧实录

4.1 ISO挂载报错“mount: no medium found”

这个报错我遇到好几次,多数是因为ISO文件名路径不对,或者虚拟机的CD/DVD没有连接ISO。物理机上则可能是磁盘分区格式问题。排查三步走:

ls -lh /data/iso/*.iso file /data/iso/*.iso mount -o loop /data/iso/具体文件名.iso /mnt/cdrom

先确认文件存在且是正常的ISO格式,再重新挂载。虚拟机环境下,还要在虚拟机设置里把ISO勾选为“启动时连接”。

4.2 yum repolist状态为0或找不到仓库

最常见的原因就是仓库配置文件里的baseurl路径和repodata实际目录对不上。比如有的ISO把repodata放在/mnt/cdrom/repodata,但仓库根目录应该是/mnt/cdrom;如果放错层级,yum就找不到索引。

另一个排查思路是确认仓库目录下真的有repodata子目录:

ls /mnt/cdrom/repodata/ ls /data/kyum/packages/repodata/

如果目录里没有repomd.xml,说明方案B没执行createrepo,或者方案A镜像本身不带repodata(少见)。新版本麒麟ISO一般自带repodata,老版本或定制版也许没有,那就执行createrepo补上。

4.3 “Could not open/read repomd.xml” 报错

这个报错对应的核心原因是repodata目录缺失或损坏。如果是挂载ISO方案,检查ISO是否完整(md5校验);如果是拷贝方案,重新执行createrepo:

cd /data/kyum/packages rm -rf repodata createrepo .

还有一种情况是baseurl路径写错了层级。若ISO的repodata在/mnt/cdrom/repodata,但你把baseurl写成了file:///mnt/cdrom/Packages,yum会去/mnt/cdrom/Packages/repodata找,自然找不到。低级错误,但发生频率极高。

4.4 gpgcheck=1导致无法安装

有些麒麟V10的ISO,公钥不在默认路径。在开启gpgcheck的情况下,yum install会提示:

Public key for xxx.rpm is not installed

快速解法有两种:一是rpm --import从ISO里找GPG-KEY文件导入;二是把repo文件里gpgcheck=1改成gpgcheck=0,再yum clean all && yum makecache。离线内网场景,依赖ISO来源可信,gpgcheck=0不算偷懒,反而是减少交付摩擦的实用选择。

4.5 事务锁定错误:Another app is currently holding the yum lock

这是因为之前有yum进程没正常退出。麒麟的公网源连接超时最容易导致这类问题。强制清掉锁:

rm -f /var/run/yum.pid

或者找到进程kill:

ps aux | grep yum kill -9 进程号

顺手提醒一下,如果之前配过公网源导致yum执行很慢,多半是公网连接超时的问题。离线环境里把公网repo文件全部禁用,只保留local.repo,能极大提升yum响应速度。这也是为什么我强调先备份禁用其他repo文件。

4.6 安装包报依赖缺失

如果本地源里的包不全,安装某个软件时可能提示依赖缺失。这时候先确认依赖包在那个软件包的安装文档里是否有列表,然后用yum直接搜索安装:

yum provides "*/缺失包名*"

比如:

yum provides "*/libssl.so.10*"

yum会告诉你哪个rpm包提供这个库。如果本地源里有,直接安装那个包。如果本地源里也没有,说明你手里的ISO版本不包含该依赖,要么换完整版镜像,要么联网下载对应aarch64的rpm包(注意必须aarch64,不要下x86_64)。这个操作对于硬啃离线环境的同学是一个高频动作。

5. 高级技巧与生产环境实操心得

5.1 如何扩展本地源

基础配置成功后,有时候还需要额外软件。比如你在FTP服务器/另一台内网机器上拿到了新版本的nginx.rpm(aarch64),想塞进本地源里。操作也很简单:

cp /tmp/nginx-xxxx.aarch64.rpm /data/kyum/packages/ cd /data/kyum/packages createrepo --update .

--update参数可以增量更新repodata,不会全量重建,速度快很多。添加完再yum clean all && yum makecache,新包就能被识别到。这个方法比每次都用rpm -ivh手动装依赖要舒服得多。

5.2 利用yum-downloadonly离线搬包

内网环境里经常有这种需求:在一台能联网的机器上下载好rpm包,搬到离线机安装。麒麟V10可以借助yum-plugin-downloadonly或者dnf download实现。如果能联网的机器也是麒麟V10 ARM环境,操作如下:

yum install -y yum-plugin-downloadonly yum install --downloadonly --downloaddir=/data/kyum/packages nginx

然后把整个目录搬到离线机,执行createrepo更新源。这在多台服务器批量运维时特别实用,省去逐个安装的精力。

5.3 用rsync同步多台机器

生产环境往往不止一台麒麟服务器。配置好一台离线源之后,其余机器没有必要重复拷贝大文件。我建议通过内网rsync同步仓库目录和repo文件:

rsync -av /data/kyum/packages/ root@目标IP:/data/kyum/packages/

同步完成后在目标机器执行yum clean all && yum makecache即可。如果有几十台机器,还可以用Ansible这种自动化工具批量推送repo文件和同步目录,效率更高。这个思路在批量国产化节点交付时非常省心,单台配源的时间从半小时降到三分钟。

5.4 关于ARM交叉编译与rpm包注意点

顺带提一句和ARM生态相关的细节:如果你以后要在x86机器上编译ARM架构的rpm包,需要配置交叉编译环境,这和普通yum源是两个方向。但在yum源上下文里,你只需要记住一条铁律:ARM机器上yum install的rpm包一定是aarch64或noarch,绝不可能是x86_64。有些软件从网上下载时给了“linux版本”,却不区分架构,这类包装上大概率报“cannot execute binary file”,因为它根本没编译成ARM指令集。做国产化适配的同学对这一点要有肌肉记忆。

6. 几个踩坑后的重点提醒

6.1 先看镜像版本再动手

麒麟V10版本众多,SP1到SP3,桌面版和服务器版,ISO内部结构有差异。SP3的服务器版镜像目录结构会比较规整,Packages和repodata都好找;桌面版的目录可能不叫Packages,而是放在类似 base、extra 这种路径下。有的定制版镜像会阉割掉部分软件包,导致某些软件源里找不到。配置前先ls /mnt/cdrom把目录结构看清楚,比直接套网上的命令更靠谱。

另外,“麒麟V10安装Oracle 19c”这类需求在热搜里热度很高,说明有人拿它做数据库服务器。如果是为了装Oracle,本地yum源里一定提前确认好 binutils、compat-libcap1、glibc、libaio、libnsl 等系统包是否齐全,离线环境缺一个就要折腾半天。建议装完源之后先用yum install -y binutils compat-libcap1 compat-libstdc++-33 glibc gcc gcc-c++ libaio libaio-devel libgcc libstdc++ libstdc++-devel libnsl批量验证依赖完整性(少一个包就少一个后续的坑)。

6.2 配置完成后立刻测试安装一次

很多同学配完yum源,yum repolist有输出就觉得大功告成。但repolist有输出只代表yum能读到仓库索引,不代表所有包都能正常安装。我非常建议配置完成后立刻找一个稍微复杂的软件(比如vim plus、nfs-utils这种带依赖的)装一次,一是验证依赖解析完整,二是给后续其他软件安装增强信心。如果一次性装成功了,这个源基本可以放心用。

6.3 关于ARM虚拟机环境的特殊留意

如果你是在Apple Silicon Mac上用VMware Fusion或UTM安装麒麟V10 ARM版,注意虚拟机的CD/DVD设置里选择“连接物理驱动器”时,有时ISO不会自动识别,需要手填ISO路径。还有ARM虚拟机性能相比同配置x86会弱一些,createrepo生成索引时会明显感到慢,不要以为是系统卡死,多等一会儿。SSD上createrepo几千个包大概需要一两分钟,机械硬盘可能要五分钟以上,属于正常现象。

6.4 repo文件命名有讲究

/etc/yum.repos.d/ 下的repo文件如果命名为CentOS-Base.repo,yum仍然能读取,但看着会很别扭。建议用 kylin-local.repo 或者 local-kylin.repo 这种清晰的名字,方便区分。同时一个repo文件里可以写多个[仓库段],比如一个本地源分成了base和extra两个目录,就写成两段:

[local-base] name=Local Kylin Base baseurl=file:///data/kyum/base enabled=1 gpgcheck=0 [local-extra] name=Local Kylin Extra baseurl=file:///data/kyum/extra enabled=1 gpgcheck=0

这样分段管理,源的可维护性会好很多。内网环境如果对接了内部的Nexus或Artifactory等私服软件仓库,也可以把baseurl改为http://内网IP/repository/kylin/,让多台机器共用一套仓库,避免每台机器都拷贝一份ISO文件,这是大规模部署的更优解。

配置本地离线yum源这件事,本身不难,难在对麒麟V10 ARM环境的不熟悉。我第一次配的时候,也是对着各种报错卡了一下午,最后发现只是baseurl少写了一级路径。希望这篇文章能把你的配置时间缩短到十分钟以内。最后再分享一个小经验:如果公司内网有文件服务器,把ISO镜像直接放文件服务器上,每台机器用NFS/HTTP挂载比每台都留一份ISO镜像要科学得多,回头你批量部署时会感谢这个决定的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 5:56:01

ever-gauzy深度解析:开源ERP/HRM合体方案从部署到二次开发

1. ever-gauzy 到底是什么——被低估的开源企业管理平台第一次看到 ever-gauzy 这个名字时,我下意识觉得这又是个前端框架或者工具类库,结果点进去才发现完全不是一回事。这是一个把会计、预算、人力资源管理、薪资计算、CRM、项目管理全部塞进同一个系统…

作者头像 李华
网站建设 2026/9/16 5:55:51

柳州网络推广公司避坑:网站被黑后我用3个免费工具救急

柳州网络推广公司避坑:网站被黑后我用3个免费工具救急 上周凌晨两点,我手机突然震动,不是客户催稿,是监控警报。 我盯着屏幕上的截图,后背发凉: 网站被黑挂马了 。 首页代码里赫然插着一段恶意跳转脚本,目标指向一个非法博彩页面。 那一刻,我脑子里只有一个念头:怎么快速止损?…

作者头像 李华
网站建设 2026/9/16 5:55:24

基于俯视相机与球体跟踪的台球自动计分系统实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 5:54:43

宽带测速总不准?从原理到实操教你精准测速

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 5:54:33

AI前端流式处理与TypeScript状态管理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 5:53:47

工业4.0的底层逻辑:从数据驱动到智能制造落地路径

工业4.0这个概念,我在制造业圈子里听了快十年,每次技术交流会总有人问:工业4.0到底是个啥?为什么我们上了MES、买了机械臂、搞了AGV小车,还是觉得自己离“4.0”差了十万八千里?这个问题问得特别好。因为绝大…

作者头像 李华