ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

Rocky Linux离线环境搭建:挂载ISO配置本地yum源完整指南 1. 项目概述为什么需要挂载ISO作为本地源最近在折腾一台没有外网环境的Rocky Linux服务器安装完系统后第一件事就是装各种开发工具和依赖包。结果一敲yum install熟悉的报错就来了——无法连接到镜像仓库。这种场景对于运维和开发来说太常见了封闭的内网环境、安全要求严格的隔离网络或者单纯就是网络不稳定、下载速度慢得让人抓狂。这时候系统安装时用的那张DVD光盘或者下载的ISO镜像文件就成了救命稻草。把Rocky Linux的安装ISO镜像挂载到系统里配置成一个本地的yum软件源本质上就是搭建一个离线的“软件仓库”。这个仓库里包含了系统安装时自带的、经过严格测试和兼容性认证的基础软件包。对于日常的系统维护、基础环境搭建、甚至是批量部署初始环境这个方法既快又稳完全不受网络波动的影响。我遇到过好几次在客户现场网络配置还没搞定但急需装个vim或者net-tools来排查问题就是靠这个法子五分钟内解决问题。这个操作的核心逻辑很简单让系统认为有一个“本地光盘”在持续提供软件包而不是去遥远的互联网上寻找。接下来我会把从挂载ISO到最终成功使用yum安装软件的完整流程以及我踩过的坑和总结的技巧毫无保留地分享出来。2. 前期准备与思路解析在动手之前我们得先理清整个操作的逻辑链条并准备好必要的“食材”。盲目操作很容易导致权限问题、挂载点冲突或者源配置错误。2.1 理解操作的核心逻辑整个过程可以分解为四个清晰的步骤像一条流水线获取“软件仓库”实体找到Rocky Linux的安装ISO文件。它可能是一张物理DVD光盘也可能是你从官网下载的.iso镜像文件。创建“访问入口”在Linux文件系统中创建一个目录例如/mnt/cdrom。这个目录本身是空的它的作用是为ISO文件内容提供一个展示的“窗口”或“挂载点”。建立“连接通道”通过mount命令将ISO文件“贴”到刚才创建的挂载点上。执行成功后访问/mnt/cdrom目录看到的就是ISO文件内部的所有内容包括我们需要的BaseOS和AppStream仓库目录。告诉yum“新仓库地址”修改或创建yum的源配置文件.repo文件将软件源地址指向本地的挂载点file:///mnt/cdrom。这样当执行yum install时系统就会自动去这个本地路径查找和安装软件包。理解这个逻辑后即使中途某步出错你也能快速定位是“连接”的问题还是“地址”配置的问题。2.2 所需材料与环境检查工欲善其事必先利其器。开始前请确认以下几点ISO文件或光盘确保你拥有Rocky Linux的安装镜像。对于Rocky Linux 8或9通常是一个包含BaseOS和AppStream两个核心仓库的完整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/cdromsudo以管理员权限执行。mkdir -p创建目录。-p参数确保如果/mnt目录不存在会一并创建避免报错。创建后可以用ls -ld /mnt/cdrom查看目录详情确认权限通常是drwxr-xr-x755。3.2 挂载ISO文件到目录这是最关键的一步将“仓库”和“入口”连接起来。情况一挂载物理光盘或虚拟光驱如果你的光盘已经放入光驱在虚拟机中已连接ISO设备名通常是/dev/sr0或/dev/cdrom后者常是前者的软链接。sudo mount /dev/cdrom /mnt/cdrom如果成功不会有任何输出。你可以用mount | grep cdrom或df -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/你应该能看到类似以下的目录结构其中BaseOS和AppStream就是我们需要的仓库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看到AppStream和BaseOS目录就说明挂载完全正确。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去哪里找软件包。创建配置文件sudo vi /etc/yum.repos.d/local.repo你也可以使用nano或gedit等你熟悉的编辑器。写入以下配置内容[Local-BaseOS] nameLocal Rocky Linux $releasever - BaseOS baseurlfile:///mnt/cdrom/BaseOS enabled1 gpgcheck0 [Local-AppStream] nameLocal Rocky Linux $releasever - AppStream baseurlfile:///mnt/cdrom/AppStream enabled1 gpgcheck0关键参数解析[Local-BaseOS]源仓库的唯一ID可以自定义。name仓库的描述信息会显示在yum操作中。baseurl这是核心配置指向我们挂载的ISO内的仓库路径。注意格式是file://后接绝对路径。file://是访问本地文件的协议后面是三个斜杠///。enabled1启用此仓库。gpgcheck0禁用GPG密钥检查。因为ISO内的软件包是官方发布的在离线可信环境下可以跳过检查以简化流程。如果设为1则需要配置gpgkey步骤会复杂一些。重要提示baseurl中的路径必须和你挂载的路径以及ISO内的实际目录名完全一致。Rocky Linux 8/9的DVD镜像通常包含BaseOS和AppStream两个目录。请务必用ls /mnt/cdrom/确认。3.5 清理缓存并测试本地源配置完成后必须让yum重新加载元数据。清理旧缓存sudo yum clean all这个命令会清除所有已下载的仓库元数据和软件包缓存确保yum读取新的本地源配置。生成新缓存sudo yum makecache或者使用更详细的sudo yum repolist all这个命令会列出所有已启用和禁用的仓库。如果配置正确你应该能看到Local-BaseOS和Local-AppStream仓库被列出并且状态为enabled。进行安装测试 找一个ISO里肯定有的基础包进行测试比如vim-common或tree。sudo yum install tree -y如果安装成功输出信息中会明确显示软件包是从Local-BaseOS或Local-AppStream仓库下载的恭喜你本地源配置成功4. 进阶配置与优化技巧基础的挂载和配置完成后为了更贴合生产环境的需求让这个本地源用起来更顺手、更稳定还有一些进阶操作和技巧。4.1 实现开机自动挂载手动挂载的ISO在系统重启后会失效。对于需要长期使用本地源的服务器必须配置自动挂载。有两种主流方法方法一修改/etc/fstab文件推荐用于固定ISO文件/etc/fstab是系统开机自动挂载的文件系统表。首先确保你的ISO文件放在一个不会移动的位置例如/opt/iso/。sudo mkdir -p /opt/iso sudo cp /root/Rocky-9.2-x86_64-dvd.iso /opt/iso/编辑/etc/fstab文件sudo vi /etc/fstab在文件末尾添加一行/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文件丢失导致系统无法启动。第五、六段dump和fsck选项对于ISO文件通常设为0。保存退出后可以立即测试配置是否正确而无需重启sudo mount -a这个命令会挂载/etc/fstab中所有配置了auto选项但尚未挂载的文件系统。执行后检查df -h或ls /mnt/cdrom确认挂载成功即可。方法二创建 Systemd Mount Unit 文件更灵活Systemd提供了更现代的挂载管理方式适合需要更复杂控制的情况。创建mount单元文件命名规则是挂载点路径转义后的名称.mount。例如挂载点是/mnt/cdrom则文件名为mnt-cdrom.mount。sudo vi /etc/systemd/system/mnt-cdrom.mount写入以下内容[Unit] DescriptionMount Rocky Linux ISO Beforelocal-fs.target [Mount] What/opt/iso/Rocky-9.2-x86_64-dvd.iso Where/mnt/cdrom Typeiso9660 Optionsloop,ro [Install] WantedBymulti-user.target启用并启动这个mount单元sudo systemctl daemon-reload sudo systemctl enable mnt-cdrom.mount sudo systemctl start mnt-cdrom.mount检查状态sudo systemctl status mnt-cdrom.mount选择建议对于简单的固定ISO挂载/etc/fstab方法更直接、更通用。如果你需要依赖其他服务启动后再挂载或者有更复杂的条件判断Systemd mount unit提供了更精细的控制。4.2 创建混合源本地优先网络备用在有些网络受限但并非完全离线的环境如慢速网络可以配置混合源让yum优先从本地ISO安装如果本地没有所需软件包再尝试从网络源获取。恢复网络源配置将之前备份的网络源.repo文件移回来。sudo mv /etc/yum.repos.d/repo-backup/*.repo /etc/yum.repos.d/修改网络源优先级编辑网络源的.repo文件如rocky.repo或rocky-baseos.repo在[baseos]和[appstream]等章节中添加一行priority10数字越大优先级越低。通常设置为1-99之间。修改本地源优先级编辑我们创建的local.repo文件为本地仓库设置更高的优先级更小的数字[Local-BaseOS] nameLocal Rocky Linux $releasever - BaseOS baseurlfile:///mnt/cdrom/BaseOS enabled1 gpgcheck0 priority1 [Local-AppStream] nameLocal Rocky Linux $releasever - AppStream baseurlfile:///mnt/cdrom/AppStream enabled1 gpgcheck0 priority1测试优先级执行yum install时yum会优先从priority1的本地源查找找不到再去priority10的网络源。4.3 扩展本地源合并多个ISO或RPM包一张DVD ISO的软件包终究有限。如果你有多个版本的ISO或者自己下载了很多额外的RPM包可以将其合并到一个本地目录创建一个更强大的本地源。创建统一的仓库目录结构sudo mkdir -p /opt/local-yum/BaseOS/Packages sudo mkdir -p /opt/local-yum/AppStream/Packages复制所有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 参数避免覆盖已有文件创建仓库元数据这是最关键的一步需要使用createrepo_c命令Rocky 9推荐或createrepo命令。# 安装createrepo工具第一次需要网络或从ISO安装 # 可以先从ISO本地源安装它本身 # sudo yum install createrepo_c --disablerepo* --enablerepoLocal-* # 为BaseOS仓库创建元数据 sudo createrepo_c /opt/local-yum/BaseOS/ # 为AppStream仓库创建元数据 sudo createrepo_c /opt/local-yum/AppStream/这个命令会在仓库目录下生成repodata文件夹里面包含了所有RPM包的依赖关系、版本等元数据yum依赖这些数据才能正常工作。修改本地源配置将local.repo文件中的baseurl指向新的本地目录。baseurlfile:///opt/local-yum/BaseOS baseurlfile:///opt/local-yum/AppStream更新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 挂载阶段常见问题问题1mount: /mnt/cdrom: mount failed: No such file or directory.原因挂载点目录不存在。解决确认/mnt/cdrom目录已创建。用ls -ld /mnt/cdrom检查。问题2mount: /mnt/cdrom: /dev/sr0 is write-protected, mounting read-only.原因这不是错误而是提示信息。说明光盘或ISO被成功以只读方式挂载。可以忽略。问题3mount: /mnt/cdrom: wrong fs type, bad option, bad superblock on /dev/sr0...原因设备文件不对或ISO文件损坏。解决确认光驱设备名。尝试lsblk命令查看块设备光驱通常显示为rom类型。确认ISO文件路径和名称是否正确。验证ISO文件完整性。可使用file命令file /path/to/iso应显示ISO 9660 CD-ROM filesystem data。问题4mount: /mnt/cdrom: device is busy.原因挂载点目录正在被其他进程使用例如你的当前Shell就在/mnt/cdrom目录下。解决退出占用该目录的进程。最简单的办法是确保你的当前工作目录不在/mnt/cdrom及其子目录下。5.2 yum配置与使用阶段问题问题1执行yum makecache或yum repolist时报错提示找不到repodata/repomd.xml。原因baseurl配置的路径错误或者ISO没有正确挂载或者挂载的ISO不包含完整的仓库。排查步骤检查挂载ls /mnt/cdrom/确认能看到BaseOS和AppStream目录。检查路径进入BaseOS目录看里面是否有repodata文件夹。ls /mnt/cdrom/BaseOS/检查配置核对local.repo文件中的baseurl。特别注意file://后面是三个斜杠然后是绝对路径。例如file:///mnt/cdrom/BaseOS。路径末尾不要有斜杠。检查ISO版本确认你使用的不是“Minimal ISO”或“Boot ISO”它们不包含完整的软件仓库。问题2能repolist成功但yum install时提示“No match for argument: xxx”或“Error: Nothing to do”。原因你要安装的软件包在当前的本地源中确实不存在。DVD ISO只包含一部分常用软件包。解决先用yum search命令搜索一下包名或关键词。如果确实没有考虑使用“混合源”配置见4.2节让yum去网络源查找。或者手动下载该软件包及其所有依赖的RPM放入自定义本地源目录并更新元数据见4.3节。问题3安装软件时出现GPG密钥错误。错误信息GPG key retrieval failed: [Errno 14] curl#37 - Couldnt open file /mnt/cdrom/RPM-GPG-KEY-rockyofficial原因在local.repo中我们设置了gpgcheck0跳过了检查。如果设为1就需要配置gpgkey路径。解决如果需要启用检查在ISO根目录或RPM-GPG-KEY目录下找到GPG密钥文件。将其导入系统sudo rpm --import /mnt/cdrom/RPM-GPG-KEY-rockyofficial在local.repo文件中添加一行gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial但出于简便在可信的离线环境保持gpgcheck0是最实用的选择。问题4系统重启后yum又无法使用了。原因没有配置自动挂载重启后ISO连接断开本地源失效。解决按照4.1节的内容配置/etc/fstab或Systemd mount unit实现开机自动挂载。5.3 性能与存储优化提示使用硬盘目录代替ISO挂载如果服务器性能敏感频繁的软件安装操作反复读取ISO文件尤其是通过loop设备可能有效能损耗。可以将ISO内的Packages和repodata目录直接解压或拷贝到硬盘如/opt/local-yum然后直接指向该目录。这样访问速度更快但会占用额外的磁盘空间约10GB。注意磁盘空间确保存放ISO文件或解压后仓库的磁盘分区有足够空间。NFS共享本地源在多台内网服务器都需要使用相同本地源的场景下可以在一台服务器上搭建好这个本地源目录如/opt/local-yum然后通过NFS服务将此目录共享给内网其他机器。其他机器只需在baseurl中使用nfs://server_ip/opt/local-yum/BaseOS这样的地址即可避免每台机器都存储一份拷贝。整个流程走下来从遇到网络困境到成功搭建一个稳定、快速的离线yum源这种“自给自足”的感觉对于系统管理员来说非常踏实。最关键的是深刻理解每一步背后的意图挂载是让系统能“看到”软件包.repo文件是告诉yum去“哪里找”而createrepo则是为一大堆散落的RPM包建立“索引目录”。掌握了这个核心无论环境怎么变你都能灵活应对。下次再遇到无网环境你就能气定神闲地掏出ISO十分钟内搭建好自己的软件堡垒。
返回列表