前言
通过配置本地 yum 源,实现无网络的情况时安装其它软件包,同样适用于 openEuler、Rocky Linux 等红帽系列的操作系统。过于老旧的系统(如 CentOS 6/7)可能不适用于本实验。
实验环境
物理机环境
- 操作系统版本:Windows 11 专业工作站版 25H2 26200.7171
- VMware 版本:Workstation 17 Pro (17.0.0 build-20800274)
- CPU:Core i7-8700,8*2 GB DDR4 2666MHz,500GB NVME SSD,500GB HDD
虚拟机环境
- 操作系统版本:Rocky Linux release 9.6 (Blue Onyx)
- 虚拟机硬件配置:2 vCPU,2GB Memory,30GB Disk
- 网卡:仅主机模式(断开虚拟机与外网的互联网连接)
实操配置
导入 ISO 镜像到虚拟机
如果本地没有 ISO 镜像,可以前往 中科大软件镜像源 自行下载。
选择与你系统版本、系统架构相同的 DVD 全镜像(镜像大小一般为 10GB 左右,镜像文件名一般会出现 Everything、Full 或者 DVD 等字样),从 VMware 导入到你的虚拟机光驱:

不出意外的话,输入指令 lsblk 会出现一个类型为 rom 名称为 sr0 的块设备:

配置挂载点
创建挂载点
系统默认会将光驱挂载在
/run/media目录下,但以我的习惯,还是推荐手动配置挂载点。
假设我们想把光驱挂载到 /mnt/cdrom 目录下,需要先创建挂载点:
1 | mkdir /mnt/cdrom |
临时挂载
⚠ 注意:使用 mount 指令挂载,系统重启后挂载会失效。适合在临时使用时操作。
如果只是临时挂载光驱到挂载点,直接使用一条命令即可实现挂载:
1 | mount /dev/sr0 /mnt/cdrom |

永久挂载
要实现永久挂载,需要修改 /etc/fstab 文件,该文件保存着所有需要自动挂载的挂载条目。
1 | vim /etc/fstab |
在文件最底下,添加以下条目(注意不要删掉和修改原有的条目):
1 | /dev/sr0 /mnt/cdrom iso9660 defaults,loop 0 0 |

修改完成后,按下 Esc 和输入 :wq 保存并退出文件编辑器,然后使用以下命令重新加载 /etc/fstab:
1 | systemctl daemon-reload |
可以看到光驱成功挂载到 /mnt/cdrom:

修改 yum 软件源配置文件
yum 所有的软件源配置文件都在 /etc/yum.repos.d 目录下,并且文件以 .repo 结尾。yum 只会读取该目录下的以 .repo 后缀的配置文件。
首先,进入配置文件目录:
1 | cd /etc/yum.repos.d |
移动原有的配置文件
在该目录下创建一个文件夹(这里以 bak 为例),将原有的配置文件移动进里面,不让 yum 读取这些配置文件。
1 | mkdir bak |
再将原有的配置文件移动进 bak 文件夹:
1 | mv *.repo bak |

编写新的配置文件
新编写的配置文件,将软件源目录指向刚刚挂载的光驱,实现使用本地源安装软件包。
使用文本编辑器创建/打开配置文件,这里以 local.repo 为例(文件后缀一定是要 .repo 结尾的):
1 | vim local.repo |
在该文件内写入以下内容,配置两个软件源(注释不用打,即该行的井号和之后的文字),修改完成后,按下 Esc 和输入 :wq 保存并退出文件编辑器:
1 | [AppStream] |

测试刷新缓存
配置完本地源的配置文件之后,使用 yum makecache 测试能否刷新 yum 缓存:
如果提示 Metadata cache created ,则本地源配置成功。

最终效果测试
通过测试安装软件包,再次验证本地源能否正常工作:
1 | yum -y install bash-completion tar unzip wget expect |
如果出现类似下面的界面,则配置成功,实验结束:

常见问题
挂载光驱时提示 No medium found
请检查 VMware 虚拟机设置中的
CD/DVD->设备状态->已连接复选框是否打勾。如果没有打勾,请打勾。
安装软件时提示 Failed to download metadata
请检查光驱是否成功挂载到挂载点。使用命令
mount -v | grep /mnt/cdrom验证,如果输出没有回显则没有成功挂载。
请检查软件源配置文件路径是否正确,本地源的路径前必须是
file:///,三个斜杠。
请检查是否将原有的配置文件移除,否则 yum 会从原有的配置文件(网络源)进行下载元数据。
