在企业的生产环境或安全性要求极高的内网网络中,服务器通常无法直接访问公网。当需要安装基础命令行工具、开发环境依赖库或者进行系统内核升级时,直接使用默认的在线yum仓库往往会因为无法连接外部网络而报错。为了解决这个痛点,搭建一套本地离线yum源是最有效且最标准的做法。通过将完整的系统安装镜像挂载到本地系统目录,我们可以将其作为一个完整的软件仓库,供当前机器甚至整个内网局域网中的其他服务器使用。

准备工作与镜像挂载操作
搭建离线源的第一步是获取与当前系统版本完全匹配的ISO镜像文件。对于CentOS系统,推荐下载Everything版本的ISO镜像,因为这个版本包含了系统中所有可用的软件包及其依赖关系,不会出现安装某个复杂软件时缺少依赖的情况。你可以通过宿主机下载好镜像后,通过SCP命令或者FTP工具将其上传至目标服务器的指定目录下,例如/root目录或者/opt目录。
拿到ISO镜像文件后,接下来的核心操作是将其挂载到系统中的某个空目录上。Linux系统提供了一个非常强大的虚拟文件系统挂载机制,可以将ISO文件当作一块物理光盘来读取。我们需要先创建一个用于挂载的目录,通常习惯将其放在/mnt/cdrom或者/media/iso下。创建好目录后,使用mount命令配合-o loop参数即可完成挂载。为了让机器在重启后依然能够保持挂载状态,还需要将挂载信息写入系统的开机启动配置文件中。
# 创建用于挂载镜像的空目录 mkdir -p /mnt/cdrom # 将ISO镜像文件挂载到刚刚创建的目录上 # 假设镜像文件名为 CentOS-7-x86_64-Everything.iso mount -o loop /root/CentOS-7-x86_64-Everything.iso /mnt/cdrom # 验证挂载是否成功,列出目录内容应该能看到Packages和repodata文件夹 ls /mnt/cdrom # 设置开机自动挂载,编辑fstab文件 echo "/root/CentOS-7-x86_64-Everything.iso /mnt/cdrom iso9660 defaults,ro 0 0" >> /etc/fstab # 重新加载fstab配置并验证挂载是否生效 mount -a df -h | grep cdrom
配置本地yum仓库文件
镜像成功挂载后,系统已经能够读取到光盘中的软件包,但此时yum命令并不知道这些软件包的存在。我们需要通过编写repo配置文件来告诉yum工具去哪里寻找软件。CentOS系统的yum源配置文件统一存放在/etc/yum.repos.d/目录下,并且必须以.repo作为文件后缀名。在配置本地源之前,强烈建议将该目录下默认的在线源配置文件(如CentOS-Base.repo)进行备份或重命名,使其失效。这样可以防止yum在执行安装时依然优先尝试连接公网源,从而避免因网络超时导致安装过程卡顿的问题。
禁用默认源之后,我们新建一个本地源配置文件,例如命名为local.repo。在这个文件中,需要定义仓库的唯一标识符、名称、基础路径等核心参数。其中最关键的是baseurl参数,它必须准确指向我们之前挂载ISO镜像的目录路径。由于本地文件系统不存在网络延迟和GPG密钥校验的必要性,通常会将gpgcheck参数设置为0以关闭密钥验证,并将enabled参数设置为1以启用该仓库。
# 进入yum源配置目录 cd /etc/yum.repos.d/ # 备份默认的在线源配置文件,使其后缀名不再是repo从而失效 mkdir -p backup mv CentOS-*.repo backup/ # 使用文本编辑器创建本地源配置文件 vi local.repo # 在文件中写入以下配置内容 [local_repo] name=CentOS Local Repository baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 # 参数说明: # [local_repo] 仓库ID,必须唯一且不能有空格 # name 仓库的描述名称,可以自定义 # baseurl 指定挂载点的本地路径,file://表示本地文件系统协议 # enabled 1表示启用该仓库,0表示禁用 # gpgcheck 0表示不校验软件包的GPG密钥,本地源通常关闭
验证离线源与常见问题排查
完成配置文件的编写后,离线源的搭建工作基本结束,但必须通过实际操作来验证其可用性。首先需要清理yum以前生成的旧缓存数据,因为旧的缓存中可能还保留着在线源的软件包索引信息,这会干扰本地源的读取。清理完毕后,重新生成新的软件包缓存。如果缓存生成过程非常快且没有报错,说明配置文件读取正常。最后,可以尝试安装一个系统中最基础的工具,比如tree或者vim,如果能够顺利安装且不提示缺少依赖,那么恭喜你,本地离线yum源已经完美运行了。
# 清理历史yum缓存 yum clean all # 重新建立yum缓存,加载本地仓库的软件包索引 yum makecache # 列出当前所有可用的yum仓库及其状态 yum repolist # 测试安装tree命令行工具,验证依赖解析是否正常 yum install -y tree
在实际操作中,可能会遇到一些常见问题。最典型的是执行yum install时提示找不到软件包。遇到这种情况,首先要检查挂载点目录下是否存在repodata文件夹。这个文件夹中存放着软件包的索引信息,如果没有它,yum就无法解析依赖关系。如果是自己打包的离线源,需要使用createrepo命令在软件包目录下生成索引。另一个常见问题是开机自动挂载失败导致服务异常,这通常是因为/etc/fstab文件中的ISO文件绝对路径写错了,或者文件名发生了变化。排查时可以使用mount -a命令测试自动挂载配置,根据终端输出的错误提示进行修正。
此外,如果不仅仅是单台机器需要使用离线源,而是希望整个内网的多台服务器都能共享这套离线源,可以在已经挂载好ISO镜像的服务器上安装并配置HTTP服务(如Nginx或Apache)。将挂载目录配置为HTTP服务的站点根目录,这样其他内网服务器只需要在各自的baseurl参数中填写该服务器的HTTP地址,即可实现局域网内共享离线yum源,极大提升了内网环境下的运维部署效率。