尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

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

Rocky Linux离线环境配置本地YUM源:挂载DVD/ISO与仓库配置详解

Rocky Linux离线环境配置本地YUM源:挂载DVD/ISO与仓库配置详解 1. 项目概述与核心价值最近在折腾一台没有外网连接的Rocky Linux服务器手头正好有一张系统安装DVD。每次需要装个新软件或者更新点啥都得满世界找网络或者用U盘来回倒腾效率实在太低。相信不少运维兄弟和开发者都遇到过类似场景内网隔离环境、网络不稳定、或者单纯就是想加快软件安装速度。这时候如果能把手头的DVD光盘或者ISO镜像文件直接变成一个本地的yum软件源那可就太方便了。这个操作的核心就是把物理光盘或ISO镜像文件“挂载”到系统的一个目录下然后告诉yum包管理器“别去网上找了软件仓库就在我本地这个目录里”。对于Rocky Linux、CentOS、RHEL这类使用yum/dnf的发行版来说这是一个非常基础且实用的系统管理技能。它不仅能解决无网络环境下的软件安装问题还能作为网络源的本地缓存大幅提升批量部署时的效率。下面我就结合自己的实操经验把从识别介质到成功配置的完整过程以及中间可能踩的坑给大家详细拆解一遍。2. 前期准备与环境确认在开始挂载和配置之前我们需要先做好准备工作并确认当前系统的状态。这就像木匠干活前要检查工具和木料一样能避免很多低级错误。2.1 所需材料与系统状态检查首先你需要准备好“原材料”。这通常有两种形式物理DVD光盘将Rocky Linux的安装DVD插入服务器的光驱。ISO镜像文件如果你有从官网下载的Rocky-9.x-x86_64-dvd.iso这类文件也可以直接使用。这在虚拟机环境中尤其常见。接下来我们登录系统打开终端先确认几个关键信息查看系统版本和光驱设备# 查看Rocky Linux具体版本确认与DVD/ISO版本是否匹配避免软件包不兼容 cat /etc/redhat-release # 查看系统是否识别到了光盘设备。通常DVD光驱在Linux中被识别为 /dev/sr0 或 /dev/cdrom lsblk执行lsblk命令后你应该能看到类似下面的输出。如果插入了光盘会出现一个以sr0或cdrom命名的设备并且它的MOUNTPOINT那一栏是空的表示尚未挂载。NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part ├─rl-root 253:0 0 50G 0 lvm / └─rl-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 9.9G 0 rom这里我们看到sr0设备大小约9.9G类型是rom这正是我们的DVD光盘。检查现有yum源配置为了避免冲突我们先看看系统当前配置了哪些yum源。# 列出所有已启用的yum仓库 dnf repolist enabled # 查看yum源配置文件存放目录 ls /etc/yum.repos.d/通常Rocky Linux会自带一些在线源如baseos,appstream等它们的配置文件在/etc/yum.repos.d/目录下文件名以.repo结尾。我们后续创建的本地源会是一个独立的配置文件。注意如果你的服务器是完全离线的那些指向互联网的源会因为无法连接而报错或者在执行dnf命令时造成长时间的等待。这正是我们要配置本地源的主要原因之一。2.2 创建挂载点目录挂载点就是一个普通的空目录作为我们访问光盘内容的“窗口”。按照Linux系统的惯例我们通常在/mnt或/media目录下创建子目录作为挂载点。# 创建一个专用于挂载光盘的目录名字可以自定义这里用 cdrom 比较直观 sudo mkdir -p /mnt/cdrom-p参数的作用是如果/mnt目录不存在则会一并创建。虽然/mnt目录通常默认存在但加上这个参数是个好习惯能让命令更具容错性。3. 挂载DVD光盘或ISO镜像材料准备好了挂载点也创建了现在就可以进行挂载操作了。根据你使用的是物理光盘还是ISO文件操作略有不同。3.1 挂载物理DVD光盘如果使用的是物理光盘挂载命令非常简单# 将光盘设备 /dev/sr0 挂载到 /mnt/cdrom 目录 sudo mount /dev/sr0 /mnt/cdrom或者使用符号链接/dev/cdrom它通常指向实际的光驱设备sudo mount /dev/cdrom /mnt/cdrom挂载后验证 挂载成功后不会有成功提示。我们需要用命令验证。# 再次使用 lsblk 查看会发现 sr0 的 MOUNTPOINT 变成了 /mnt/cdrom lsblk # 直接列出挂载点目录的内容应该能看到光盘里的文件和文件夹 ls /mnt/cdrom/如果看到Packages,repodata,BaseOS,AppStream等目录说明挂载成功。Packages目录里是所有RPM软件包repodata目录里是仓库元数据这是yum源能工作的关键。3.2 挂载ISO镜像文件如果你使用的是ISO文件比如存放在/home/user/Downloads/Rocky-9.2-x86_64-dvd.iso挂载命令也很类似只是设备名换成了ISO文件路径。# 将ISO文件挂载到指定目录 sudo mount -o loop /home/user/Downloads/Rocky-9.2-x86_64-dvd.iso /mnt/cdrom这里的-o loop选项非常重要。它告诉系统将一个普通文件ISO像块设备一样进行“循环”挂载。没有这个选项mount命令会报错因为它期望的是一个设备文件。关于ISO文件的路径请务必使用绝对路径。使用相对路径如./Rocky.iso可能会导致挂载失败尤其是在通过sudo执行时工作目录可能不是你以为的那个。3.3 挂载的持久化与自动挂载上面使用mount命令进行的挂载是临时的系统重启后就会失效。对于需要长期使用的本地源我们通常希望它能开机自动挂载。这就需要修改/etc/fstab文件。对于物理光盘不推荐持久化 物理光盘可能不会一直留在光驱里所以一般不建议将其写入fstab。如果确实需要可以添加如下行/dev/sr0 /mnt/cdrom iso9660 defaults,ro,user,noauto 0 0注意这里的noauto选项表示开机不自动挂载需要时手动执行mount /mnt/cdrom。ro表示只读user允许普通用户挂载。对于ISO镜像文件推荐持久化 ISO文件是固定在硬盘上的非常适合设置自动挂载。在/etc/fstab文件末尾添加一行/home/user/Downloads/Rocky-9.2-x86_64-dvd.iso /mnt/cdrom iso9660 loop,ro,auto,nofail 0 0loop: 指定使用回环设备挂载。ro: 只读。auto: 系统启动时自动挂载。nofail: 即使挂载失败比如ISO文件被移动了也不影响系统正常启动。这是一个非常重要的安全选项建议加上。添加完成后可以执行sudo mount -a测试配置是否正确该命令会尝试挂载所有在fstab中定义但未挂载的设备。如果没有报错并且ls /mnt/cdrom能看到内容说明配置成功。实操心得在修改/etc/fstab之前务必先备份可以使用sudo cp /etc/fstab /etc/fstab.bak。一个错误的fstab配置可能导致系统无法启动。另外对于ISO文件的路径我强烈建议使用像/opt/iso/这样的固定目录来存放而不是家目录下这样权限管理和路径引用都更清晰。4. 配置Yum/DNF本地仓库光盘挂载好了里面虽然有软件包但yum还不知道怎么使用它。我们需要创建一个仓库配置文件告诉yum“仓库在这里它的元数据在哪里怎么用”。4.1 创建本地仓库配置文件在/etc/yum.repos.d/目录下新建一个以.repo结尾的配置文件例如local.repo。sudo vi /etc/yum.repos.d/local.repo然后输入以下内容。这里我创建了两个仓库段[local-baseos]和[local-appstream]因为Rocky Linux 8/9 的DVD通常将软件包分在BaseOS和AppStream两个目录中它们对应了不同的仓库。[local-baseos] nameRocky Linux $releasever - Local BaseOS baseurlfile:///mnt/cdrom/BaseOS enabled1 gpgcheck1 gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial [local-appstream] nameRocky Linux $releasever - Local AppStream baseurlfile:///mnt/cdrom/AppStream enabled1 gpgcheck1 gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial关键参数解析[local-baseos]仓库的唯一ID用于标识。name仓库的描述性名称会显示在dnf repolist的输出里。baseurl这是最核心的配置。它指定了仓库数据的实际位置。file://协议表示使用本地文件系统后面接绝对路径/mnt/cdrom/BaseOS。请务必确认这个路径下存在repodata目录。enabled1启用此仓库。设为0则禁用。gpgcheck1启用GPG签名检查确保安装的软件包来自可信源。对于官方ISO必须开启。gpgkeyGPG公钥的存放路径。用于验证软件包签名。通常就在光盘根目录。4.2 验证仓库配置配置文件保存后我们不需要重启任何服务。yum/dnf会实时读取这些配置。直接使用以下命令验证# 清理旧的yum缓存确保识别新仓库 sudo dnf clean all # 重新建立元数据缓存 sudo dnf makecache # 列出所有已启用的仓库查看本地源是否在列 sudo dnf repolist enabled如果一切正常你会在dnf repolist enabled的输出中看到local-baseos和local-appstream这两个仓库并且后面会显示它们包含的软件包数量。测试软件包安装 现在你可以尝试从一个完全离线的环境安装软件了。# 搜索一个软件包例如 vim sudo dnf search vim # 安装一个软件包注意观察输出看是否是从 local-baseos/local-appstream 仓库下载 sudo dnf install -y vim-enhanced如果安装过程中没有尝试连接网络并且速度飞快恭喜你本地源配置成功了5. 高级应用与优化配置基础的挂载和配置完成后我们可以根据实际需求进行一些优化和扩展让这个本地源更好用。5.1 处理单一的Packages与repodata目录结构有些较早的系统版本或精简版ISO可能没有区分BaseOS和AppStream所有RPM包都放在光盘根目录的Packages下元数据在repodata下。对于这种情况仓库配置更简单[local-dvd] nameRocky Linux $releasever - Local DVD baseurlfile:///mnt/cdrom enabled1 gpgcheck1 gpgcheck1 gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial只需将baseurl指向挂载点的根目录即可。但要注意这种结构可能无法与系统默认的在线仓库分baseos和appstream完美对应在解决依赖时偶尔会遇到问题。5.2 组合使用本地源与网络源在很多场景下服务器并非完全离线只是网络慢或不稳定。我们可以配置yum优先使用本地源如果本地没有所需的软件包或更新再回退到网络源。这需要用到yum-priorities插件在dnf中通常已集成优先级功能。首先确保插件已安装sudo dnf install -y yum-plugin-priorities。然后在仓库配置文件.repo中为每个仓库添加priority参数。数字越小优先级越高。[local-baseos] nameRocky Linux $releasever - Local BaseOS baseurlfile:///mnt/cdrom/BaseOS enabled1 gpgcheck1 gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial priority1 [local-appstream] nameRocky Linux $releasever - Local AppStream baseurlfile:///mnt/cdrom/AppStream enabled1 gpgcheck1 gpgkeyfile:///mnt/cdrom/RPM-GPG-KEY-rockyofficial priority1 [baseos] nameRocky Linux $releasever - BaseOS mirrorlisthttp://...在线源地址 enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial priority10 [appstream] nameRocky Linux $releasever - AppStream mirrorlisthttp://...在线源地址 enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial priority10这样配置后dnf会优先从优先级为1的本地源查找软件包找不到再去优先级为10的网络源查找。5.3 创建自定义本地仓库Caching Repository对于拥有多台内网服务器的情况每次都挂载ISO效率低下。一个更专业的做法是在一台有网络的主机或可临时连接外网的主机上使用createrepo_c工具将整个在线仓库同步到本地并生成元数据构建一个完整的内网镜像源。基本步骤如下安装工具sudo dnf install -y createrepo_c创建目录结构例如/var/www/html/repos/rocky/9/下面再建BaseOS和AppStream。使用reposync命令同步仓库内容需要先配置好在线源。在每个仓库目录如BaseOS下运行createrepo_c .生成元数据。通过HTTP如Nginx/Apache或FTP共享这个目录。内网其他机器将baseurl指向这台主机的HTTP地址即可。这种方式提供了最大的灵活性和性能是中型以上内网环境的标配方案。6. 故障排查与常见问题即使按照步骤操作也可能会遇到一些问题。这里汇总了一些常见错误和解决方法。6.1 挂载阶段问题问题1mount: /mnt/cdrom: no medium found on /dev/sr0.原因光驱内没有光盘或者光盘无法读取。解决检查光盘是否已正确插入或尝试使用其他光盘。对于虚拟机检查虚拟光驱是否已连接ISO文件。问题2mount: /home/iso/Rocky.iso: failed to setup loop device: No such file or directory原因指定的ISO文件路径不存在。解决使用绝对路径并用ls命令确认文件是否存在。问题3mount: /mnt/cdrom: WARNING: device write-protected, mounted read-only.提示这不是错误只是一个警告提示设备以只读方式挂载。光盘和ISO挂载本来就是只读的完全正常。6.2 仓库配置阶段问题问题1执行dnf makecache或dnf repolist时报错Cannot prepare internal mirrorlist: No URLs in mirrorlist原因这个错误通常来自系统自带的在线源配置文件如rocky-baseos.repo。在离线环境下这些源无法访问。解决临时禁用在线源。可以运行sudo dnf --disablerepo* --enablerepolocal-* ...来只启用本地源进行操作。或者直接修改在线源的配置文件将enabled1改为enabled0。问题2dnf repolist能看到本地源但包数量为0或者执行安装时提示No match for argument: xxx原因baseurl路径配置错误或者指向的目录下没有有效的repodata文件夹。解决确认挂载点路径ls /mnt/cdrom/看是否有BaseOS等目录。确认baseurl路径检查/etc/yum.repos.d/local.repo中的baseurl是否与挂载点下的实际路径完全一致。特别注意file://后面是三个斜杠///。检查repodatals /mnt/cdrom/BaseOS/repodata/应该能看到一堆.xml和.sqlite文件。如果没有说明你挂载的ISO可能不是完整的仓库镜像。问题3GPG密钥验证失败GPG key retrieval failed: [Errno 14] curl#37 - Couldnt open file /mnt/cdrom/RPM-GPG-KEY-rockyofficial原因gpgkey路径指向的文件不存在。解决到挂载点根目录下查找正确的GPG密钥文件名。可能是RPM-GPG-KEY-Rocky-9或类似。使用find /mnt/cdrom -name *GPG*命令查找并更新配置文件中的gpgkey路径。6.3 软件包安装阶段问题问题安装软件时出现依赖错误提示某个依赖包找不到。原因本地DVD镜像只包含了该版本发布时的一组核心软件包及其依赖。你要安装的软件可能依赖一些不在DVD中的包。解决优先方案尝试安装更通用的软件包名或者寻找替代软件。组合源方案如果机器有受限网络可以按照5.2节配置优先级让yum尝试从网络源获取缺失的依赖。手动下载从其他有网的机器上使用dnf download --resolve package-name命令下载该软件包及其所有依赖的RPM文件然后拷贝到离线机器上用sudo rpm -ivh *.rpm或sudo dnf localinstall *.rpm安装。这是一个比较繁琐但彻底的方法。避坑技巧实录我最常遇到的一个坑是在虚拟机中挂载了ISO后从虚拟机界面弹出光盘但在Linux系统内没有卸载 (umount)就直接删除了虚拟光驱中的ISO文件。这会导致/mnt/cdrom目录变成一个“僵死”的挂载点访问它会导致系统卡住。解决方法很简单先sudo umount /mnt/cdrom卸载再进行其他操作。养成“用完即卸载”的好习惯尤其是在临时使用ISO文件时。
返回列表