在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

Rocky Linux离线部署实战:挂载ISO配置本地Yum源详解

Rocky Linux离线部署实战:挂载ISO配置本地Yum源详解 1. 为什么需要挂载ISO作为本地Yum源在Rocky Linux的日常运维或离线部署中我们经常会遇到一个看似简单却非常实际的问题服务器没有外网连接或者网络环境极其不稳定但你又急需安装一个软件包、一组依赖库或者进行系统更新。这时候你手头恰好有一张Rocky Linux的安装DVD或者从官网下载的完整ISO镜像文件。这个场景太常见了——比如在隔离的研发内网、生产环境的初始部署、或者网络带宽受限的地区。直接挂载这个ISO镜像并将其配置为一个本地的Yum软件仓库就成了一个高效、可靠的解决方案。它绕过了网络延迟和不可靠性让你能像访问一个高速本地服务器一样使用安装介质中预置的、经过严格测试的数千个基础软件包。这不仅仅是“离线安装”那么简单。使用本地源意味着安装速度是物理介质读取速度通常远快于从公网仓库下载其次所有软件包都来自官方同一版本介质兼容性有绝对保障避免了混合源可能带来的依赖地狱再者对于需要批量部署且环境一致的场景使用统一的本地源是保证系统纯净度的最佳实践。很多人可能觉得在云时代这有点“复古”但事实上越是追求稳定、可控的企业级环境这类“基本功”就越显重要。接下来我就以Rocky Linux 9为例手把手带你走通从挂载到使用的完整流程并分享几个我踩过坑才总结出来的关键细节。2. 前期准备获取ISO与确认环境在动手之前我们需要把“食材”和“灶台”准备好。这个过程里有些细节如果忽略了后面就可能白忙活一场。2.1 获取正确的Rocky Linux ISO镜像首先你需要一个Rocky Linux的安装镜像。这里有个关键点务必使用“Everything ISO”或“DVD ISO”而不是“Minimal ISO”或“Boot ISO”。Minimal镜像只包含启动和安装最基本系统的包体积很小但里面没有完整的软件仓库。我们需要的正是Everything或DVD镜像里那个名为AppStream和BaseOS的完整仓库。你可以从Rocky Linux的官方镜像站或国内镜像站下载。例如对于Rocky Linux 9.4一个典型的Everything ISO文件名类似于Rocky-9.4-x86_64-dvd.iso大小在8-10GB左右。下载后你可以将其放在服务器本地比如/root目录下或者放在一个内网共享存储上。如果是在虚拟机环境甚至可以直接将ISO文件虚拟成光驱但本文我们专注于更通用的文件挂载方式。2.2 检查系统与创建挂载点登录你的Rocky Linux服务器先确认下系统版本这能帮你后续核对软件包版本是否匹配。cat /etc/redhat-release输出应该类似Rocky Linux release 9.4 (Blue Onyx)。接下来创建一个专用的目录作为挂载点。挂载点就是一个空目录充当ISO文件内容被访问的“窗口”。我习惯将其放在/mnt目录下这样结构清晰sudo mkdir -p /mnt/rocky9-iso这里使用-p参数是为了确保如果/mnt目录不存在也会被创建。/mnt/rocky9-iso这个路径你可以自定义但建议不要放在用户家目录或临时目录下因为我们需要将其配置为永久的Yum源。注意确保你有足够的权限。本文大部分操作都需要root权限你可以使用sudo命令或者直接切换到root用户 (sudo -i)。3. 核心操作挂载ISO镜像文件有了ISO文件和挂载点我们就可以进行挂载了。挂载的本质是将ISO这个“压缩包”里的文件系统映射到我们指定的目录上使得系统可以像访问普通文件夹一样访问其中的内容。3.1 执行挂载命令假设你的ISO文件位于/root/Rocky-9.4-x86_64-dvd.iso挂载命令如下sudo mount -o loop,ro /root/Rocky-9.4-x86_64-dvd.iso /mnt/rocky9-iso让我们拆解一下这个命令mount: Linux的标准挂载命令。-o loop,ro: 这是挂载选项options。loop: 这是最关键的一个选项。它告诉系统我们不是要挂载一个物理设备如/dev/sr0光驱而是一个本地文件并将其模拟成一个回环设备loop device来挂载。没有这个选项系统会认为/root/...iso是一个普通文件而报错。ro: 表示以**只读read-only**方式挂载。ISO文件本身是不可写的强制只读可以防止误操作也更安全。/root/Rocky-9.4-x86_64-dvd.iso: ISO镜像文件的绝对路径。请务必替换为你实际存放的路径。/mnt/rocky9-iso: 我们之前创建的挂载点目录。执行成功后不会有任何输出。这是Linux哲学——“没有消息就是好消息”。3.2 验证挂载是否成功如何确认挂载成功了呢有几种方法方法一使用df -h命令这个命令可以查看所有已挂载的文件系统及其使用情况。df -h在输出列表中你应该能找到类似这样的一行文件系统 容量 已用 可用 已用% 挂载点 ...其他行... /dev/loop0 9.1G 9.1G 0 100% /mnt/rocky9-iso注意设备名是/dev/loop0也可能是loop1, loop2等挂载点正是/mnt/rocky9-iso并且使用率是100%或接近100%这符合ISO只读的特性。方法二使用mount或findmnt命令直接查看挂载列表会更清晰mount | grep rocky9-iso或者findmnt /mnt/rocky9-iso这两个命令会明确显示该目录的挂载来源和选项。方法三直接查看挂载点内容最直观的方法就是列出挂载点里的文件ls -l /mnt/rocky9-iso/你应该能看到类似以下的目录结构这是Rocky Linux DVD ISO的标准布局AppStream BaseOS EFI images isolinux LICENSE media.repo Rocky-9-4-x86_64-dvd TRANS.TBL其中AppStream和BaseOS就是我们梦寐以求的软件仓库目录。media.repo是一个重要的文件我们稍后会用到它。实操心得如果ls命令显示目录为空或者提示“不是一个目录”那基本可以断定挂载失败了。最常见的原因是ISO文件路径错误、挂载点目录不存在或者ISO文件本身损坏。你可以用file命令检查ISO文件file /root/Rocky-9.4-x86_64-dvd.iso正常应该输出“ISO 9660 CD-ROM filesystem data”。4. 配置Yum使用本地源挂载成功只是第一步相当于把“软件仓库光盘”放进了光驱。现在我们需要告诉系统的包管理器Yum或DNF在Rocky Linux 8/9上yum命令是dnf的软链接“请从这个新位置查找和安装软件”。这需要通过创建或修改Yum的仓库配置文件.repo文件来实现。4.1 备份现有仓库配置可选但推荐在进行重大修改前先备份这是一个好习惯。Yum的仓库配置文件位于/etc/yum.repos.d/目录下通常以.repo结尾。我们可以先将整个目录备份sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup如果之后配置出错你可以直接删除/etc/yum.repos.d目录然后将备份目录恢复回来。4.2 禁用所有现有的网络仓库为了确保系统在安装软件时优先使用、甚至只使用我们的本地源最简单的方法是禁用所有其他的网络仓库。这可以通过将它们的.repo文件重命名来实现Yum只读取以.repo结尾的文件。cd /etc/yum.repos.d sudo mv *.repo *.repo.bak 2/dev/null; true这条命令将所有.repo文件后缀改为.repo.bak。2/dev/null; true是为了忽略可能的错误提示比如目录为空时mv命令会报错让脚本可以继续执行。注意在物理机或需要连接外网的机器上你可能不想完全禁用网络源。一个更灵活的做法是编辑每个.repo文件将其中的enabled1改为enabled0这样只是禁用而非删除。但为了本教程的纯粹性和避免干扰我们采用重命名的方式。4.3 创建本地仓库配置文件现在我们在/etc/yum.repos.d/目录下创建一个新的配置文件例如叫做local.repo。sudo vi /etc/yum.repos.d/local.repo如果你不熟悉vi也可以用nano编辑器sudo nano /etc/yum.repos.d/local.repo。将以下内容粘贴进去[local-baseos] nameRocky Linux $releasever - Local BaseOS baseurlfile:///mnt/rocky9-iso/BaseOS enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial [local-appstream] nameRocky Linux $releasever - Local AppStream baseurlfile:///mnt/rocky9-iso/AppStream enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial让我们逐行解读这个配置[local-baseos]: 这是仓库的ID必须唯一。我们定义了两个仓库一个用于BaseOS一个用于AppStream。name: 仓库的描述性名称会在Yum输出中显示。baseurl:这是最核心的配置项。它指定了仓库数据的实际位置。file://是用于本地文件系统的协议前缀。/mnt/rocky9-iso/BaseOS是挂载点下BaseOS仓库的绝对路径。请确保这个路径与你挂载的目录和ISO内的结构完全一致。你可以通过ls /mnt/rocky9-iso/再次确认BaseOS和AppStream目录是否存在。enabled1: 启用此仓库。gpgcheck1: 启用GPG签名检查。这是确保软件包完整性和来源可信的重要安全机制。gpgkey: 指定用于验证签名的GPG密钥文件的位置。Rocky Linux的官方GPG密钥通常已经安装在系统中。如果后续报错说找不到密钥你可以从挂载的ISO里拷贝sudo cp /mnt/rocky9-iso/RPM-GPG-KEY-rockyofficial /etc/pki/rpm-gpg/。4.4 使用ISO自带的media.repo文件替代方案其实在ISO的根目录下Rocky Linux已经为我们准备了一个模板配置文件media.repo。你可以查看它的内容cat /mnt/rocky9-iso/media.repo它的内容大致如下[InstallMedia-BaseOS] nameRocky Linux 9 - BaseOS mediaid1598702625.431107 metadata_expire-1 gpgcheck1 cost500 enabled0 baseurlfile:///run/install/repo/BaseOS注意这个文件的baseurl指向的是file:///run/install/repo/BaseOS这是系统安装程序Anaconda在安装过程中使用的临时路径。对于我们已经安装好的系统这个路径是无效的。同时enabled0表示默认禁用。所以你可以直接拷贝这个文件作为基础但必须修改两个关键地方sudo cp /mnt/rocky9-iso/media.repo /etc/yum.repos.d/local.repo sudo vi /etc/yum.repos.d/local.repo将baseurl修改为正确的挂载点路径如file:///mnt/rocky9-iso/BaseOS和file:///mnt/rocky9-iso/AppStream你需要为两个仓库分别配置可以参考上一节的手动配置。将enabled0改为enabled1。我个人更推荐第一种手动创建的方式因为更清晰也更容易理解每个参数的含义。5. 测试与使用本地源配置完成后我们必须要验证一下Yum是否能正确识别并使用这个本地源。5.1 清理并重建Yum缓存Yum会缓存仓库的元数据软件包列表、依赖关系等。在更换仓库源后必须清理旧缓存并建立新缓存。sudo yum clean all这个命令会清除所有已下载的元数据和软件包缓存。sudo yum makecache这个命令会从新配置的本地源local-baseos和local-appstream下载元数据并建立缓存。由于是本地文件系统这个过程会非常快。5.2 验证仓库列表让我们看看Yum现在认识哪些仓库sudo yum repolist all或者更简洁地查看已启用的仓库sudo yum repolist enabled你应该能看到类似下面的输出其中包含你刚创建的local-baseos和local-appstream并且状态是enabled。仓库 id 仓库名称 状态 local-appstream Rocky Linux 9 - Local AppStream 启用: 6,812 local-baseos Rocky Linux 9 - Local BaseOS 启用: 1,802后面的数字如6,812代表该仓库中可用的软件包数量。这个数字和你使用的ISO版本有关。5.3 进行实际的安装测试现在让我们尝试安装一个软件包来最终验证。我们选一个常见的、肯定在ISO里的包比如vim-enhanced增强版Vim编辑器sudo yum install vim-enhanced -y仔细观察输出它应该显示正在从local-appstream仓库下载实际上是读取软件包。下载速度会极快因为是从本地硬盘读取。安装过程应该顺利完成。你也可以尝试搜索一个包sudo yum search nginx如果一切正常你会看到来自本地仓库的Nginx相关软件包列表。6. 实现开机自动挂载持久化到目前为止我们的工作都是临时的。一旦服务器重启mount命令建立的挂载就会失效/mnt/rocky9-iso目录会变空Yum源也就无法使用了。因此我们需要配置系统在启动时自动挂载这个ISO文件。6.1 编辑/etc/fstab文件/etc/fstabfile systems table文件是Linux系统定义自动挂载文件系统的核心配置文件。我们需要在其中添加一行。sudo vi /etc/fstab在文件的末尾添加如下一行/root/Rocky-9.4-x86_64-dvd.iso /mnt/rocky9-iso iso9660 loop,ro,auto,nofail 0 0同样我们来解析每个字段的含义这很重要第一列设备或文件-/root/Rocky-9.4-x86_64-dvd.iso这是ISO文件的绝对路径。必须确保路径正确且该文件在启动时必须存在。如果文件被移动或删除系统启动时会报错。第二列挂载点-/mnt/rocky9-iso就是我们之前创建的目录。第三列文件系统类型-iso9660这是标准CD/DVD镜像的文件系统格式。对于Rocky Linux的ISO这个类型是正确的。第四列挂载选项-loop,ro,auto,nofailloop: 挂载回环设备。ro: 只读。auto: 让系统在启动时自动挂载。nofail:这是一个非常重要的选项。它告诉系统如果挂载失败比如ISO文件找不到不要将其视为一个严重错误而停止启动过程。这对于非核心的本地源来说是个安全网。第五列dump备份-0表示这个文件系统不需要被dump备份工具备份。第六列fsck检查顺序-0表示系统启动时不需要用fsck检查这个文件系统的完整性。6.2 测试自动挂载配置在重启之前我们应该先测试一下这个fstab配置是否正确。使用mount命令的-a选项它会尝试挂载fstab中所有标记为auto的文件系统。sudo mount -a执行这个命令后不应该有任何输出。如果有错误信息请根据提示排查通常是路径错误或挂载点不存在。然后再次使用df -h或mount | grep rocky来确认ISO已经被重新挂载上了。6.3 处理一个常见陷阱SELinux上下文如果你的系统启用了SELinuxRocky Linux默认是启用的可能会遇到一个隐蔽的问题虽然挂载成功但Yum无法读取/mnt/rocky9-iso目录下的文件提示“权限不足”。这是因为从fstab挂载的文件其SELinux安全上下文context可能不正确。检查目录的上下文ls -Zd /mnt/rocky9-iso/正常的、可被Yum读取的仓库目录上下文应该是system_u:object_r:usr_t:s0。如果你看到的是unlabeled_t或其他类型就需要修复。解决方法在fstab的挂载选项中添加context参数。将之前的那一行修改为/root/Rocky-9.4-x86_64-dvd.iso /mnt/rocky9-iso iso9660 loop,ro,auto,nofail,context“system_u:object_r:usr_t:s0” 0 0然后重新挂载sudo mount -o remount /mnt/rocky9-iso或者先卸载再执行sudo mount -a。踩坑记录这是我早期配置时经常忽略的一点。症状是yum makecache或yum install时一直卡住或报错“无法下载元数据”但ls命令又能看到文件。用tail -f /var/log/messages查看系统日志才发现SELinux的AVC拒绝记录。所以在配置完fstab后如果Yum工作不正常SELinux应该是首要怀疑对象。你也可以临时将SELinux设置为宽容模式setenforce 0来测试是否是它导致的问题但生产环境不建议长期关闭。7. 进阶技巧与故障排查掌握了基本流程后我们再来看看一些能让你用得更顺手、遇到问题能快速解决的进阶知识。7.1 同时使用本地源和网络源完全禁用网络源在需要安全更新的生产环境并不现实。更优的策略是让本地源优先网络源作为补充。你可以这样操作恢复网络源将之前备份的网络源.repo.bak文件改回.repo后缀。cd /etc/yum.repos.d sudo mv *.repo.bak *.repo 2/dev/null; true修改本地源优先级Yum默认按字母顺序读取.repo文件后读取的仓库优先级更高默认情况下包版本相同时后读取的仓库优先。但更可靠的方法是使用priority参数。编辑你的local.repo文件在每个仓库部分添加一行[local-baseos] nameRocky Linux $releasever - Local BaseOS baseurlfile:///mnt/rocky9-iso/BaseOS enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial priority1 [local-appstream] ... priority1priority的值从1到99数字越小优先级越高。将本地源设为1网络源通常priority是99的优先级就低于它。当同一个软件包在两个源中都存在时Yum会优先从优先级高的源本地获取。禁用网络源中的特定仓库如果你只想用本地源提供BaseOS和AppStream但还想从网络获取epelExtra Packages for Enterprise Linux或extras等仓库的软件包可以只禁用网络源中对应的部分。找到网络源的.repo文件如rocky-baseos.repo将其中的enabled1改为enabled0即可。7.2 常见故障与解决方案即使步骤再详细实际操作中也可能遇到意外。下面是一个快速排查指南问题现象可能原因排查命令与解决方案mount: /mnt/rocky9-iso: 挂载点不存在。挂载点目录没有创建。sudo mkdir -p /mnt/rocky9-isomount: /root/xxx.iso 不是块设备。或mount: 必须指定文件系统类型。忘记加-o loop选项。在mount命令或fstab中确保包含loop选项。mount: 错误的文件系统类型、选项不良、...ISO文件路径错误或文件损坏。1. 检查路径ls -lh /root/xxx.iso2. 检查文件类型file /root/xxx.isoyum makecache失败提示找不到仓库/元数据。1.baseurl路径错误。2. 挂载点为空挂载失败或已卸载。3. SELinux限制。1. 检查baseurl确认是file:///mnt/rocky9-iso/BaseOS注意是三个斜杠。2. 检查挂载ls /mnt/rocky9-iso/看是否有内容。3. 检查SELinuxls -Zd /mnt/rocky9-iso/临时禁用测试setenforce 0。安装软件包时提示“没有可用软件包”。1. 软件包不在当前ISO的仓库中如Minimal ISO。2. 仓库未启用或缓存未更新。3. 拼写错误。1. 确认ISO类型必须是Everything/DVD ISO。2. 运行yum repolist enabled确认仓库状态运行sudo yum clean all sudo yum makecache。3. 使用yum search 包名确认包名。系统重启后本地源失效。1./etc/fstab配置错误。2. ISO文件被移动或删除。3. 挂载点目录被修改。1. 检查fstab语法sudo mount -a测试。2. 确认ISO文件存在于fstab指定的路径。3. 确认挂载点目录存在且为空。7.3 扩展应用创建内部网络Yum源对于拥有多台Rocky Linux服务器的环境在每台机器上都挂载ISO显然效率低下。一个更专业的做法是找一台内网服务器比如一台Nginx或Apache服务器将ISO挂载上去或者直接解压ISO文件然后通过HTTP或FTP协议共享AppStream和BaseOS目录。这样网络内的所有机器都可以将这台服务器配置为Yum源实现统一的离线软件分发和管理。这超出了本文的范围但思路是在服务器上完成本文的挂载操作后配置Web服务器将/mnt/rocky9-iso目录发布其他客户端只需将baseurl中的file://改为http://服务器IP/rocky9-iso/即可。
返回列表