目录
-
- 一、前提与核心原理
-
- [1.1. 环境要求](#1.1. 环境要求)
- [1.2. 核心原理](#1.2. 核心原理)
- 二、步骤1:服务器端搭建HTTP服务
-
- [2.1. 安装Apache服务](#2.1. 安装Apache服务)
- [2.2. 配置防火墙与SELinux](#2.2. 配置防火墙与SELinux)
- [2.3. 验证HTTP服务可用性](#2.3. 验证HTTP服务可用性)
- 三、步骤2:服务器端配置YUM网络源文件
-
- [3.1. 准备软件包目录(从ISO提取)](#3.1. 准备软件包目录(从ISO提取))
- [3.2. 验证HTTP目录可访问](#3.2. 验证HTTP目录可访问)
- [四、步骤3:客户端配置HTTP YUM源](#四、步骤3:客户端配置HTTP YUM源)
-
- [4.1. 备份客户端原有YUM源](#4.1. 备份客户端原有YUM源)
- [4.2. 创建HTTP YUM源的repo文件](#4.2. 创建HTTP YUM源的repo文件)
- [五、步骤4:验证HTTP YUM网络源可用性](#五、步骤4:验证HTTP YUM网络源可用性)
-
- [5.1. 客户端清理并生成缓存](#5.1. 客户端清理并生成缓存)
- [5.2. 测试软件安装](#5.2. 测试软件安装)
- 六、进阶:优化与扩展
-
- [6.1. 增加源的稳定性](#6.1. 增加源的稳定性)
- [6.2. 支持多版本/多架构](#6.2. 支持多版本/多架构)
- 七、常见问题与排查
-
- [7.1. 客户端无法访问HTTP源:"Could not resolve host"](#7.1. 客户端无法访问HTTP源:“Could not resolve host”)
- [7.2. 客户端提示" repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found"](#7.2. 客户端提示“ repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found”)
- [7.3. GPG校验失败:"BADSIG"或"public key not available"](#7.3. GPG校验失败:“BADSIG”或“public key not available”)
- 八、总结
在多台Linux服务器的局域网环境中,每台机器单独配置本地YUM源会造成资源浪费且难以统一管理。通过HTTP服务搭建YUM网络源,可实现软件包的集中存储与分发,让局域网内所有机器通过网络访问同一源,大幅提升软件安装效率与一致性。本文以CentOS 7为例,详细讲解从搭建HTTP服务到配置网络源的完整过程,确保每一步操作准确可复现(太细了,男人不能太细!!^^)。
一、前提与核心原理
1.1. 环境要求
- 服务器端 :一台CentOS 7.9服务器(作为YUM源服务器),需具备:
- 已下载与系统版本匹配的ISO镜像(如
CentOS-7-x86_64-DVD-2009.iso
); - 关闭或配置好防火墙、SELinux(避免阻碍HTTP访问)。
- 已下载与系统版本匹配的ISO镜像(如
- 客户端:局域网内其他CentOS 7.9机器(建议版本一致),需能访问服务器IP。
- HTTP服务:nginx/httpd都可以,本文选用Apache(httpd)作为HTTP服务器(Linux系统常用,配置简单)。
1.2. 核心原理
- 在服务器端通过HTTP服务暴露软件包目录(从ISO镜像提取);
- 客户端通过HTTP协议访问服务器的软件包目录,实现远程安装软件;
- 相比本地源,网络源可集中维护,支持多机共享,减少重复存储。
二、步骤1:服务器端搭建HTTP服务
2.1. 安装Apache服务
CentOS默认软件仓库中包含httpd,直接通过yum安装(若未配置本地源,可先临时使用系统镜像安装):
# 安装Apache(httpd)
yum install -y httpd
# 启动服务并设置开机自启
systemctl start httpd
systemctl enable httpd
# 验证服务状态(确保Active: active (running))
systemctl status httpd

2.2. 配置防火墙与SELinux
HTTP服务默认使用80端口,需允许端口访问并配置SELinux(若启用):
# 配置防火墙允许80端口(永久生效)
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
# 查看防火墙规则(确认80端口已开放)
firewall-cmd --list-ports
# 配置SELinux(永久关闭)
vi /etc/selinux/config
SELINUX=disabled
保存后重启生效

2.3. 验证HTTP服务可用性
在服务器本地或客户端通过浏览器/命令行访问服务器IP,确认HTTP服务正常:
# 服务器本地测试(返回HTTP 200 OK即正常)
curl http://127.0.0.1
- 若访问失败,检查httpd服务状态、防火墙规则及SELinux配置。
三、步骤2:服务器端配置YUM网络源文件
3.1. 准备软件包目录(从ISO提取)
需将ISO镜像中的软件包(Packages
目录)复制到HTTP服务的根目录(默认/var/www/html
),让客户端可通过HTTP访问。
# 1. 挂载ISO镜像(参考本地源挂载方法)
mkdir -p /mnt/iso
mount -o loop /opt/CentOS-7-x86_64-DVD-2009.iso /mnt/iso
# 2. 在HTTP根目录创建YUM源目录(如centos7-repo)
mkdir -p /var/www/html/centos7-repo
# 3. 复制ISO中的所有文件(包括Packages和repodata)到HTTP目录
cp -r /mnt/iso/* /var/www/html/centos7-repo/
# 4. 修复目录权限(确保httpd可读取)
chmod -R 755 /var/www/html/centos7-repo/
repodata
目录包含软件包元数据(必需,YUM依赖此目录识别包信息)。
3.2. 验证HTTP目录可访问
通过浏览器或curl访问服务器的YUM源目录,确认文件可正常读取:
# 客户端或服务器访问(替换为实际IP)
curl http://192.168.92.154/centos7-repo/
- 若返回目录列表(含
Packages
、repodata
等),说明HTTP目录配置成功。
四、步骤3:客户端配置HTTP YUM源
局域网内的其他机器(客户端)需通过repo文件指向服务器的HTTP源地址。
4.1. 备份客户端原有YUM源
# 客户端操作:备份默认repo文件
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
4.2. 创建HTTP YUM源的repo文件
在客户端新建/etc/yum.repos.d/http-repo.repo
,核心内容
如下:
[http-centos7-repo]
name=CentOS 7 HTTP Repository
baseurl=http://192.168.92.154/centos7-repo/
enabled=1
gpgcheck=1
gpgkey=http://192.168.92.154/centos7-repo/RPM-GPG-KEY-CentOS-7
- 配置说明:
baseurl
:指向服务器的HTTP源路径(替换为实际服务器IP);gpgkey
:通过HTTP路径引用服务器上的GPG公钥(确保与ISO中的公钥一致)。
五、步骤4:验证HTTP YUM网络源可用性
5.1. 客户端清理并生成缓存
# 清理旧缓存
yum clean all
# 生成新缓存(从HTTP源获取元数据)
yum makecache
- 若成功,会显示"Metadata cache created",并列出源中的软件包数量。
5.2. 测试软件安装
通过安装一个软件(如tree
)验证源可用性:
# 安装tree(从HTTP源下载)
yum install -y tree
- 若安装过程无"无法找到包"或"网络超时"错误,说明HTTP YUM源配置成功。
六、进阶:优化与扩展
6.1. 增加源的稳定性
- 使用域名访问 :若局域网有DNS服务器,可将服务器IP绑定到域名(如
yum-server.local
),客户端repo文件中baseurl
改为http://yum-server.local/centos7-repo/
,避免IP变动影响配置。 - 添加多个源 :若需混合使用官方网络源和本地HTTP源,可保留官方repo文件(
enabled=0
禁用),按需启用。
6.2. 支持多版本/多架构
若需为不同系统版本(如CentOS 7/8)或架构(x86_64/arm64)提供源,可在HTTP目录下按版本/架构划分目录:
# 示例目录结构
/var/www/html/
├─ centos7-x86_64/ # CentOS 7 64位
└─ centos8-x86_64/ # CentOS 8 64位
客户端根据自身系统版本配置对应baseurl
即可。
七、常见问题与排查
7.1. 客户端无法访问HTTP源:"Could not resolve host"
- 原因:客户端无法解析服务器IP(网络不通或IP错误)。
- 排查:
- 客户端执行
ping 192.168.92.154
(服务器IP),确认网络连通; - 检查
baseurl
中的IP是否正确(避免拼写错误)。
- 客户端执行
7.2. 客户端提示" repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found"
- 原因:
baseurl
路径错误,服务器上不存在对应的repodata
目录。 - 排查:
- 服务器端确认
/var/www/html/centos7-repo/repodata
是否存在; - 客户端通过
curl http://192.168.92.154/centos7-repo/repodata/repomd.xml
验证文件是否可访问。
- 服务器端确认
7.3. GPG校验失败:"BADSIG"或"public key not available"
- 原因:
gpgkey
路径错误或公钥不匹配。 - 排查:
- 确认
gpgkey
路径正确(可通过浏览器访问该URL验证文件是否存在); - 手动导入公钥:
rpm --import http://192.168.92.154/centos7-repo/RPM-GPG-KEY-CentOS-7
。
- 确认
八、总结
基于HTTP构建局域网内YUM网络源的核心是通过HTTP服务共享软件包目录,实现局域网内软件包的集中管理与分发。相比本地源,其优势在于"一次配置,多机复用",尤其适合服务器集群环境。
若需进一步提升性能,可结合NFS或缓存服务(如Squid)减轻源服务器压力;若需对外网提供源,还需配置HTTPS加密(通过Let's Encrypt获取免费证书),有问题欢迎在评论区交流。