ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Rocky Linux离线环境搭建:挂载ISO配置本地yum源完整指南

2026/8/15 13:53:57 拓冰建站 浏览量
Rocky Linux离线环境搭建:挂载ISO配置本地yum源完整指南

1. 项目概述:为什么需要挂载ISO作为本地源?

最近在折腾一台没有外网环境的Rocky Linux服务器,安装完系统后,第一件事就是装各种开发工具和依赖包。结果一敲yum install,熟悉的报错就来了——无法连接到镜像仓库。这种场景对于运维和开发来说太常见了:封闭的内网环境、安全要求严格的隔离网络,或者单纯就是网络不稳定、下载速度慢得让人抓狂。这时候,系统安装时用的那张DVD光盘或者下载的ISO镜像文件,就成了救命稻草。

把Rocky Linux的安装ISO镜像挂载到系统里,配置成一个本地的yum软件源,本质上就是搭建一个离线的“软件仓库”。这个仓库里包含了系统安装时自带的、经过严格测试和兼容性认证的基础软件包。对于日常的系统维护、基础环境搭建、甚至是批量部署初始环境,这个方法既快又稳,完全不受网络波动的影响。我遇到过好几次在客户现场,网络配置还没搞定,但急需装个vim或者net-tools来排查问题,就是靠这个法子五分钟内解决问题。

这个操作的核心逻辑很简单:让系统认为有一个“本地光盘”在持续提供软件包,而不是去遥远的互联网上寻找。接下来,我会把从挂载ISO到最终成功使用yum安装软件的完整流程,以及我踩过的坑和总结的技巧,毫无保留地分享出来。

2. 前期准备与思路解析

在动手之前,我们得先理清整个操作的逻辑链条,并准备好必要的“食材”。盲目操作很容易导致权限问题、挂载点冲突或者源配置错误。

2.1 理解操作的核心逻辑

整个过程可以分解为四个清晰的步骤,像一条流水线:

  1. 获取“软件仓库”实体:找到Rocky Linux的安装ISO文件。它可能是一张物理DVD光盘,也可能是你从官网下载的.iso镜像文件。
  2. 创建“访问入口”:在Linux文件系统中创建一个目录(例如/mnt/cdrom)。这个目录本身是空的,它的作用是为ISO文件内容提供一个展示的“窗口”或“挂载点”。
  3. 建立“连接通道”:通过mount命令,将ISO文件“贴”到刚才创建的挂载点上。执行成功后,访问/mnt/cdrom目录,看到的就是ISO文件内部的所有内容,包括我们需要的BaseOSAppStream仓库目录。
  4. 告诉yum“新仓库地址”:修改或创建yum的源配置文件(.repo文件),将软件源地址指向本地的挂载点(file:///mnt/cdrom)。这样,当执行yum install时,系统就会自动去这个本地路径查找和安装软件包。

理解这个逻辑后,即使中途某步出错,你也能快速定位是“连接”的问题还是“地址”配置的问题。

2.2 所需材料与环境检查

工欲善其事,必先利其器。开始前请确认以下几点:

  • ISO文件或光盘:确保你拥有Rocky Linux的安装镜像。对于Rocky Linux 8或9,通常是一个包含BaseOSAppStream两个核心仓库的完整DVD镜像(大小约8-10GB)。迷你版或网络安装版ISO不包含完整的软件包,不适合此用途。
    • 如何确认:如果你有一个ISO文件,可以在Windows或Linux上用右键属性查看大小,或者用file命令查看类型。
  • 服务器访问权限:你需要拥有待配置服务器的root用户权限。因为挂载操作和修改/etc/yum.repos.d/目录下的文件都需要最高权限。
  • 确定ISO文件位置
    • 物理光盘:将光盘放入服务器的光驱。在虚拟机环境下,需要在VMware、VirtualBox或KVM的管理界面中将ISO文件“插入”虚拟光驱。
    • ISO镜像文件:你需要知道这个文件放在服务器的哪个路径下。例如,你可能通过U盘拷贝到了/root/目录,或者存放在一个共享存储/data/iso/下。记下它的完整路径,比如/root/Rocky-9.2-x86_64-dvd.iso

注意:在虚拟机中,虽然可以通过图形界面直接加载ISO,但本文的方法是通过命令挂载,这更具通用性,适用于物理机、云主机和任何可通过SSH访问的环境。

3. 实操步骤详解:挂载与配置

理论清晰后,我们进入实战环节。请跟随步骤逐一操作,并注意我穿插的提示。

3.1 创建挂载点目录

挂载点就是一个普通的目录,习惯上我们会在/mnt/media下创建。这里我选择/mnt/cdrom,你可以自定义,但后续所有配置都要相应修改。

sudo mkdir -p /mnt/cdrom
  • sudo:以管理员权限执行。
  • mkdir -p:创建目录。-p参数确保如果/mnt目录不存在,会一并创建,避免报错。

创建后,可以用ls -ld /mnt/cdrom查看目录详情,确认权限通常是drwxr-xr-x(755)。

3.2 挂载ISO文件到目录

这是最关键的一步,将“仓库”和“入口”连接起来。

情况一:挂载物理光盘或虚拟光驱如果你的光盘已经放入光驱(在虚拟机中已连接ISO),设备名通常是/dev/sr0/dev/cdrom(后者常是前者的软链接)。

sudo mount /dev/cdrom /mnt/cdrom

如果成功,不会有任何输出。你可以用mount | grep cdromdf -hT /mnt/cdrom来检查是否挂载成功,并看到文件系统类型是iso9660

情况二:挂载本地的ISO镜像文件这是更常见的场景。使用-o loop选项来挂载镜像文件。

sudo mount -o loop /root/Rocky-9.2-x86_64-dvd.iso /mnt/cdrom
  • -o loop:使用回环设备(loop device)将文件像块设备一样挂载。
  • /root/Rocky-9.2-x86_64-dvd.iso:请替换为你ISO文件的实际路径。

挂载后的验证: 挂载成功后,立即进入挂载点查看内容,这是良好的习惯。

ls -l /mnt/cdrom/

你应该能看到类似以下的目录结构,其中BaseOSAppStream就是我们需要的仓库:

dr-xr-xr-x. 4 root root 2048 Jan 1 2020 AppStream dr-xr-xr-x. 4 root root 2048 Jan 1 2020 BaseOS -r--r--r--. 1 root root 8266 Jan 1 2020 EFI -r--r--r--. 1 root root 8266 Jan 1 2020 EULA -r--r--r--. 1 root root 8266 Jan 1 2020 GPL dr-xr-xr-x. 3 root root 2048 Jan 1 2020 images dr-xr-xr-x. 2 root root 2048 Jan 1 2020 isolinux -r--r--r--. 1 root root 8266 Jan 1 2020 media.repo -r--r--r--. 1 root root 8266 Jan 1 2020 TRANS.TBL

看到AppStreamBaseOS目录,就说明挂载完全正确。

3.3 备份并禁用原有的网络yum源

为了防止本地源和网络源冲突,也为了在离线环境下yum不会因尝试连接网络而超时等待,最好将系统原有的网络源配置文件备份后禁用。

# 进入yum源配置目录 cd /etc/yum.repos.d/ # 创建备份目录,并将所有.repo文件移走 sudo mkdir -p repo-backup sudo mv *.repo repo-backup/ # 验证是否已清空 ls -la *.repo 2>/dev/null || echo "All .repo files have been moved."

这个操作是可逆的。如果需要恢复网络源,只需将文件移回来即可:sudo mv repo-backup/*.repo ./

3.4 创建本地yum源配置文件

现在,我们需要创建一个新的.repo文件,告诉yum去哪里找软件包。

  1. 创建配置文件

    sudo vi /etc/yum.repos.d/local.repo

    你也可以使用nanogedit等你熟悉的编辑器。

  2. 写入以下配置内容

    [Local-BaseOS] name=Local Rocky Linux $releasever - BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0 [Local-AppStream] name=Local Rocky Linux $releasever - AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=0

    关键参数解析

    • [Local-BaseOS]:源仓库的唯一ID,可以自定义。
    • name:仓库的描述信息,会显示在yum操作中。
    • baseurl这是核心配置!指向我们挂载的ISO内的仓库路径。注意格式是file://后接绝对路径file://是访问本地文件的协议,后面是三个斜杠///
    • enabled=1:启用此仓库。
    • gpgcheck=0:禁用GPG密钥检查。因为ISO内的软件包是官方发布的,在离线可信环境下可以跳过检查以简化流程。如果设为1,则需要配置gpgkey,步骤会复杂一些。

    重要提示baseurl中的路径必须和你挂载的路径以及ISO内的实际目录名完全一致。Rocky Linux 8/9的DVD镜像通常包含BaseOSAppStream两个目录。请务必用ls /mnt/cdrom/确认。

3.5 清理缓存并测试本地源

配置完成后,必须让yum重新加载元数据。

  1. 清理旧缓存

    sudo yum clean all

    这个命令会清除所有已下载的仓库元数据和软件包缓存,确保yum读取新的本地源配置。

  2. 生成新缓存

    sudo yum makecache

    或者使用更详细的:

    sudo yum repolist all

    这个命令会列出所有已启用和禁用的仓库。如果配置正确,你应该能看到Local-BaseOSLocal-AppStream仓库被列出,并且状态为enabled

  3. 进行安装测试: 找一个ISO里肯定有的基础包进行测试,比如vim-commontree

    sudo yum install tree -y

    如果安装成功,输出信息中会明确显示软件包是从Local-BaseOSLocal-AppStream仓库下载的,恭喜你,本地源配置成功!

4. 进阶配置与优化技巧

基础的挂载和配置完成后,为了更贴合生产环境的需求,让这个本地源用起来更顺手、更稳定,还有一些进阶操作和技巧。

4.1 实现开机自动挂载

手动挂载的ISO在系统重启后会失效。对于需要长期使用本地源的服务器,必须配置自动挂载。有两种主流方法:

方法一:修改/etc/fstab文件(推荐用于固定ISO文件)/etc/fstab是系统开机自动挂载的文件系统表。

  1. 首先,确保你的ISO文件放在一个不会移动的位置,例如/opt/iso/

    sudo mkdir -p /opt/iso sudo cp /root/Rocky-9.2-x86_64-dvd.iso /opt/iso/
  2. 编辑/etc/fstab文件:

    sudo vi /etc/fstab
  3. 在文件末尾添加一行:

    /opt/iso/Rocky-9.2-x86_64-dvd.iso /mnt/cdrom iso9660 loop,ro,auto,nofail 0 0
    • 第一段:ISO文件的绝对路径。
    • 第二段:挂载点目录。
    • 第三段:文件系统类型iso9660
    • 第四段:挂载选项。
      • loop:使用回环设备。
      • ro:只读挂载(ISO本来就是只读的)。
      • auto:开机自动挂载。
      • nofail:即使挂载失败也继续启动系统(避免因ISO文件丢失导致系统无法启动)。
    • 第五、六段dumpfsck选项,对于ISO文件通常设为0
  4. 保存退出后,可以立即测试配置是否正确,而无需重启:

    sudo mount -a

    这个命令会挂载/etc/fstab中所有配置了auto选项但尚未挂载的文件系统。执行后检查df -hls /mnt/cdrom,确认挂载成功即可。

方法二:创建 Systemd Mount Unit 文件(更灵活)Systemd提供了更现代的挂载管理方式,适合需要更复杂控制的情况。

  1. 创建mount单元文件,命名规则是挂载点路径转义后的名称.mount。例如,挂载点是/mnt/cdrom,则文件名为mnt-cdrom.mount
    sudo vi /etc/systemd/system/mnt-cdrom.mount
  2. 写入以下内容:
    [Unit] Description=Mount Rocky Linux ISO Before=local-fs.target [Mount] What=/opt/iso/Rocky-9.2-x86_64-dvd.iso Where=/mnt/cdrom Type=iso9660 Options=loop,ro [Install] WantedBy=multi-user.target
  3. 启用并启动这个mount单元:
    sudo systemctl daemon-reload sudo systemctl enable mnt-cdrom.mount sudo systemctl start mnt-cdrom.mount
  4. 检查状态:
    sudo systemctl status mnt-cdrom.mount

选择建议:对于简单的固定ISO挂载,/etc/fstab方法更直接、更通用。如果你需要依赖其他服务启动后再挂载,或者有更复杂的条件判断,Systemd mount unit提供了更精细的控制。

4.2 创建混合源(本地优先,网络备用)

在有些网络受限但并非完全离线的环境(如慢速网络),可以配置混合源,让yum优先从本地ISO安装,如果本地没有所需软件包,再尝试从网络源获取。

  1. 恢复网络源配置:将之前备份的网络源.repo文件移回来。
    sudo mv /etc/yum.repos.d/repo-backup/*.repo /etc/yum.repos.d/
  2. 修改网络源优先级:编辑网络源的.repo文件(如rocky.reporocky-baseos.repo),在[baseos][appstream]等章节中添加一行:
    priority=10
    数字越大,优先级越低。通常设置为1-99之间。
  3. 修改本地源优先级:编辑我们创建的local.repo文件,为本地仓库设置更高的优先级(更小的数字):
    [Local-BaseOS] name=Local Rocky Linux $releasever - BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0 priority=1 [Local-AppStream] name=Local Rocky Linux $releasever - AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=0 priority=1
  4. 测试优先级:执行yum install时,yum会优先从priority=1的本地源查找,找不到再去priority=10的网络源。

4.3 扩展本地源:合并多个ISO或RPM包

一张DVD ISO的软件包终究有限。如果你有多个版本的ISO,或者自己下载了很多额外的RPM包,可以将其合并到一个本地目录,创建一个更强大的本地源。

  1. 创建统一的仓库目录结构
    sudo mkdir -p /opt/local-yum/BaseOS/Packages sudo mkdir -p /opt/local-yum/AppStream/Packages
  2. 复制所有RPM包:将ISO挂载后,把Packages目录下的所有.rpm文件拷贝到对应的本地目录。也可以直接从网上下载的RPM包放进去。
    # 假设ISO已挂载在 /mnt/cdrom sudo cp -n /mnt/cdrom/BaseOS/Packages/*.rpm /opt/local-yum/BaseOS/Packages/ sudo cp -n /mnt/cdrom/AppStream/Packages/*.rpm /opt/local-yum/AppStream/Packages/ # -n 参数避免覆盖已有文件
  3. 创建仓库元数据:这是最关键的一步,需要使用createrepo_c命令(Rocky 9推荐)或createrepo命令。
    # 安装createrepo工具(第一次需要网络或从ISO安装) # 可以先从ISO本地源安装它本身 # sudo yum install createrepo_c --disablerepo="*" --enablerepo="Local-*" # 为BaseOS仓库创建元数据 sudo createrepo_c /opt/local-yum/BaseOS/ # 为AppStream仓库创建元数据 sudo createrepo_c /opt/local-yum/AppStream/
    这个命令会在仓库目录下生成repodata文件夹,里面包含了所有RPM包的依赖关系、版本等元数据,yum依赖这些数据才能正常工作。
  4. 修改本地源配置:将local.repo文件中的baseurl指向新的本地目录。
    baseurl=file:///opt/local-yum/BaseOS baseurl=file:///opt/local-yum/AppStream
  5. 更新yum缓存
    sudo yum clean all && sudo yum makecache

此后,你可以随时向/opt/local-yum/BaseOS/Packages/目录添加新的RPM包,添加后只需重新运行一次sudo createrepo_c --update /opt/local-yum/BaseOS/更新元数据即可,yum源会自动包含新软件包。

5. 故障排查与常见问题

即使按照步骤操作,也可能遇到各种问题。下面是我在实践中总结的常见“坑点”和解决方法。

5.1 挂载阶段常见问题

问题1:mount: /mnt/cdrom: mount failed: No such file or directory.

  • 原因:挂载点目录不存在。
  • 解决:确认/mnt/cdrom目录已创建。用ls -ld /mnt/cdrom检查。

问题2:mount: /mnt/cdrom: /dev/sr0 is write-protected, mounting read-only.

  • 原因:这不是错误,而是提示信息。说明光盘或ISO被成功以只读方式挂载。可以忽略。

问题3:mount: /mnt/cdrom: wrong fs type, bad option, bad superblock on /dev/sr0...

  • 原因:设备文件不对或ISO文件损坏。
  • 解决
    1. 确认光驱设备名。尝试lsblk命令查看块设备,光驱通常显示为rom类型。
    2. 确认ISO文件路径和名称是否正确。
    3. 验证ISO文件完整性。可使用file命令:file /path/to/iso,应显示ISO 9660 CD-ROM filesystem data

问题4:mount: /mnt/cdrom: device is busy.

  • 原因:挂载点目录正在被其他进程使用(例如,你的当前Shell就在/mnt/cdrom目录下)。
  • 解决:退出占用该目录的进程。最简单的办法是,确保你的当前工作目录不在/mnt/cdrom及其子目录下。

5.2 yum配置与使用阶段问题

问题1:执行yum makecacheyum repolist时报错,提示找不到repodata/repomd.xml

  • 原因baseurl配置的路径错误,或者ISO没有正确挂载,或者挂载的ISO不包含完整的仓库。
  • 排查步骤
    1. 检查挂载ls /mnt/cdrom/,确认能看到BaseOSAppStream目录。
    2. 检查路径:进入BaseOS目录,看里面是否有repodata文件夹。ls /mnt/cdrom/BaseOS/
    3. 检查配置:核对local.repo文件中的baseurl特别注意file://后面是三个斜杠,然后是绝对路径。例如file:///mnt/cdrom/BaseOS。路径末尾不要有斜杠
    4. 检查ISO版本:确认你使用的不是“Minimal ISO”或“Boot ISO”,它们不包含完整的软件仓库。

问题2:能repolist成功,但yum install时提示“No match for argument: xxx”或“Error: Nothing to do”。

  • 原因:你要安装的软件包在当前的本地源中确实不存在。DVD ISO只包含一部分常用软件包。
  • 解决
    1. 先用yum search命令搜索一下包名或关键词。
    2. 如果确实没有,考虑使用“混合源”配置(见4.2节),让yum去网络源查找。
    3. 或者,手动下载该软件包及其所有依赖的RPM,放入自定义本地源目录并更新元数据(见4.3节)。

问题3:安装软件时出现GPG密钥错误。

  • 错误信息GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /mnt/cdrom/RPM-GPG-KEY-rockyofficial"
  • 原因:在local.repo中我们设置了gpgcheck=0跳过了检查。如果设为1,就需要配置gpgkey路径。
  • 解决(如果需要启用检查)
    1. 在ISO根目录或RPM-GPG-KEY目录下找到GPG密钥文件。
    2. 将其导入系统:sudo rpm --import /mnt/cdrom/RPM-GPG-KEY-rockyofficial
    3. local.repo文件中添加一行:gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-rockyofficial但出于简便,在可信的离线环境,保持gpgcheck=0是最实用的选择

问题4:系统重启后,yum又无法使用了。

  • 原因:没有配置自动挂载,重启后ISO连接断开,本地源失效。
  • 解决:按照4.1节的内容,配置/etc/fstab或Systemd mount unit实现开机自动挂载。

5.3 性能与存储优化提示

  • 使用硬盘目录代替ISO挂载:如果服务器性能敏感,频繁的软件安装操作,反复读取ISO文件(尤其是通过loop设备)可能有效能损耗。可以将ISO内的Packagesrepodata目录直接解压或拷贝到硬盘(如/opt/local-yum),然后直接指向该目录。这样访问速度更快,但会占用额外的磁盘空间(约10GB)。
  • 注意磁盘空间:确保存放ISO文件或解压后仓库的磁盘分区有足够空间。
  • NFS共享本地源:在多台内网服务器都需要使用相同本地源的场景下,可以在一台服务器上搭建好这个本地源目录(如/opt/local-yum),然后通过NFS服务将此目录共享给内网其他机器。其他机器只需在baseurl中使用nfs://<server_ip>/opt/local-yum/BaseOS这样的地址即可,避免每台机器都存储一份拷贝。

整个流程走下来,从遇到网络困境到成功搭建一个稳定、快速的离线yum源,这种“自给自足”的感觉对于系统管理员来说非常踏实。最关键的是深刻理解每一步背后的意图:挂载是让系统能“看到”软件包,.repo文件是告诉yum去“哪里找”,而createrepo则是为一大堆散落的RPM包建立“索引目录”。掌握了这个核心,无论环境怎么变,你都能灵活应对。下次再遇到无网环境,你就能气定神闲地掏出ISO,十分钟内搭建好自己的软件堡垒。