适用于内网 CentOS 7.9 环境搭建可用的 Yum 软件源
目 录
[1.1 背景](#1.1 背景)
[1.2 环境假设](#1.2 环境假设)
[1.3 整体架构](#1.3 整体架构)
[二、第一步:切换阿里云 Yum 源](#二、第一步:切换阿里云 Yum 源)
[2.1 操作说明](#2.1 操作说明)
[2.2 创建阿里云 vault 源配置](#2.2 创建阿里云 vault 源配置)
[2.3 禁用失效的默认源](#2.3 禁用失效的默认源)
[2.4 验证源可用](#2.4 验证源可用)
[五、第四步:执行 reposync 同步](#五、第四步:执行 reposync 同步)
[5.1 操作说明](#5.1 操作说明)
[5.2 分别同步三个仓库](#5.2 分别同步三个仓库)
[六、第五步:createrepo 重建仓库元数据](#六、第五步:createrepo 重建仓库元数据)
[七、第六步:配置 nginx 提供 HTTP 服务](#七、第六步:配置 nginx 提供 HTTP 服务)
[7.1 编写 nginx 配置](#7.1 编写 nginx 配置)
[7.2 启动并设置开机自启](#7.2 启动并设置开机自启)
[7.3 放行防火墙(如需)](#7.3 放行防火墙(如需))
[7.4 验证本机访问](#7.4 验证本机访问)
[8.1 备份并移除默认源](#8.1 备份并移除默认源)
[8.2 创建本地源配置](#8.2 创建本地源配置)
[8.3 客户端验证](#8.3 客户端验证)
一、文档说明与方案概述
1.1 背景
CentOS 7 已于 2024 年 6 月 30 日正式结束维护(EOL),官方源 mirror.centos.org 随之下线,历史软件包归档至 vault.centos.org(只读、不再更新)。国内阿里云、清华 TUNA、中科大 USTC 等镜像站均提供 centos-vault 归档镜像,可作稳定的同步来源。
本方案采用「方案 B:reposync 按需拉取 + createrepo 重建元数据 + nginx 提供 HTTP 分发」的方式,从阿里云 vault 镜像同步 base、updates、extras 三个基础仓库到内网源服务器,供内网各 CentOS 7.9 客户端使用。相比全量 rsync 镜像(方案 A),本方案占用磁盘小、只保留用得到的软件包,更适合内网规模有限的场景。
1.2 环境假设
|------------|----------------------------------------------|
| 项目 | 说明 |
| 源服务器 | CentOS 7.9,内网 IP 192.168.1.10(按实际环境替换) |
| 同步来源 | 阿里云 mirrors.aliyun.com/centos-vault/7.9.2009 |
| 同步仓库 | base / updates / extras |
| 分发方式 | HTTP(nginx 监听 80 端口) |
| 客户端 | 内网各 CentOS 7.9 机器 |
1.3 整体架构
阿里云 centos-vault 镜像站通过 reposync 定时拉取到内网源服务器 /var/www/html/centos/7 目录,nginx 将该目录以 HTTP 静态服务对外提供;内网客户端将 baseurl 指向源服务器,即可完成软件包安装与更新。
- 同步方向:阿里云镜像站 → 内网源服务器(reposync)
- 发布方向:内网源服务器 → 内网客户端(HTTP/nginx)
- 仓库结构:/var/www/html/centos/7/{base,updates,extras}/
二、第一步:切换阿里云 Yum 源
2.1 操作说明
源服务器本身也是 CentOS 7.9,默认官方源已失效,直接执行 yum 会因无法解析 mirrorlist.centos.org 而报错。因此第一步必须先将源服务器自身的 Yum 源切换为阿里云 vault 源,后续才能正常安装 yum-utils、createrepo、nginx 等工具。
注意:此处创建的仓库 ID 直接命名为 base、updates、extras,与后续 reposync 拉取后的目录名一一对应,这一步的配置同时承担了「源服务器自身安装软件」与「reposync 同步来源」的双重职责。
2.2 创建阿里云 vault 源配置
创建 /etc/yum.repos.d/aliyun-vault.repo,内容如下:
cat > /etc/yum.repos.d/aliyun-vault.repo <<'EOF'
base
name=CentOS-7 - Base (Aliyun Vault)
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
enabled=1
gpgcheck=0
updates
name=CentOS-7 - Updates (Aliyun Vault)
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
enabled=1
gpgcheck=0
extras
name=CentOS-7 - Extras (Aliyun Vault)
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
enabled=1
gpgcheck=0
EOF
说明:CentOS 7 已 EOL,vault 归档的 GPG 校验在内网自建源场景下通常直接关闭(gpgcheck=0)更省事;若需保留校验,可设 gpgcheck=1 并放置对应的 RPM-GPG-KEY-CentOS-7 与 gpgkey 配置。
2.3 禁用失效的默认源
将原有失效的默认源移入备份目录,并恢复刚创建的 aliyun-vault.repo:
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
mv /etc/yum.repos.d/backup/aliyun-vault.repo /etc/yum.repos.d/
2.4 验证源可用
yum clean all && yum makecache
yum repolist
若能正常列出 base、updates、extras 三个仓库且不报错,说明阿里云源切换成功,可进入下一步。
三、第二步:安装所需软件
在源服务器上安装以下三个软件包:
- yum-utils:提供 reposync 命令(按需拉取仓库)
- createrepo:生成并维护仓库元数据 repodata
- nginx:提供 HTTP 静态文件分发服务
yum install -y yum-utils createrepo nginx
四、第三步:创建目标目录
规划仓库存放路径为 /var/www/html/centos/7,该路径即 nginx 的发布根目录:
mkdir -p /var/www/html/centos/7
五、第四步:执行 reposync 同步
5.1 操作说明
reposync 的同步来源即第一步配置的 aliyun-vault.repo。参数说明:-l 表示仅下载每个包的最新版本(显著节省磁盘);--downloadcomps 拉取软件包分组信息;--download-metadata 拉取仓库元数据。
5.2 分别同步三个仓库
cd /var/www/html/centos/7
reposync -p . --repoid=base -l --downloadcomps --download-metadata
reposync -p . --repoid=updates -l --downloadcomps --download-metadata
reposync -p . --repoid=extras -l --downloadcomps --download-metadata
同步完成后,会在 /var/www/html/centos/7 下生成 base、updates、extras 三个目录,每个目录内含 RPM 软件包。
- base 目录:约 3~5 GB
- updates 目录:约 2~4 GB
- extras 目录:较小,几十 MB 至数百 MB
首次同步耗时视网络带宽而定;若磁盘紧张,可仅同步 base 与 updates 两个核心仓库。
六、第五步:createrepo 重建仓库元数据
reposync 只下载了 RPM 软件包,还需要用 createrepo 为每个仓库生成 repodata 索引,客户端才能识别并使用:
createrepo /var/www/html/centos/7/base
createrepo /var/www/html/centos/7/updates
createrepo /var/www/html/centos/7/extras
若后续需要支持 yum groupinstall 分组安装(如桌面环境),可为 base 仓库追加 -g 指定分组文件;基础安装场景可省略。
七、第六步:配置 nginx 提供 HTTP 服务
7.1 编写 nginx 配置
编辑 /etc/nginx/conf.d/yum.conf,内容如下:
cat > /etc/nginx/conf.d/yum.conf <<'EOF'
server {
listen 80;
server_name yum.local;
root /var/www/html/centos;
autoindex on;
charset utf-8;
}
EOF
7.2 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
systemctl status nginx
7.3 放行防火墙(如需)
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
7.4 验证本机访问
curl http://127.0.0.1/7/base/repodata/
若能看到 repodata 目录内容(repomd.xml 等文件),说明 HTTP 服务正常,可进入客户端配置。
八、第七步:客户端配置
8.1 备份并移除默认源
在内网各 CentOS 7.9 客户端上执行:
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
8.2 创建本地源配置
创建 /etc/yum.repos.d/local.repo,将 baseurl 指向内网源服务器(IP 按实际替换):
cat > /etc/yum.repos.d/local.repo <<'EOF'
base
name=Local CentOS-7 Base
baseurl=http://192.168.1.10/7/base/
enabled=1
gpgcheck=0
updates
name=Local CentOS-7 Updates
baseurl=http://192.168.1.10/7/updates/
enabled=1
gpgcheck=0
extras
name=Local CentOS-7 Extras
baseurl=http://192.168.1.10/7/extras/
enabled=1
gpgcheck=0
EOF
8.3 客户端验证
yum clean all && yum makecache
yum repolist
yum -y install nginx
若客户端能正常加载仓库列表并成功安装软件包,说明内网 Yum 源搭建成功。
九、第八步(可选):自动化增量同步脚本
vault 归档基本不再更新,但为保持一致可添加定时任务。创建 /root/sync_yum.sh:
cat > /root/sync_yum.sh <<'EOF'
#!/bin/bash
REPO_DIR=/var/www/html/centos/7
cd $REPO_DIR
for repo in base updates extras; do
reposync -p . --repoid=$repo -l --downloadcomps --download-metadata
createrepo --update $repo
done
EOF
chmod +x /root/sync_yum.sh
加入 crontab,每天凌晨 3 点执行:
echo "0 3 * * * /root/sync_yum.sh > /dev/null 2>&1" >> /var/spool/cron/root
十、关键要点回顾
|------------|---------------------------------------------------------------|
| 要点 | 说明 |
| 路径对应关系 | 客户端 baseurl 中的 7/base 必须与源服务器 reposync 的目录结构一致,是排错的第一检查点 |
| 磁盘估算 | base + updates + extras 全量最新版约 8~12 GB,加 -l 参数后远小于方案 A 的全量归档 |
| EOL 特性 | CentOS 7 已停止维护,内网源同步一次即可长期使用,定时任务仅作保险 |
| HTTP 安全 | 纯内网使用 HTTP 即可;若跨公网,建议在 nginx 增加 auth_basic 鉴权或升级为 HTTPS |
文档至此结束。如部署过程中遇到 reposync 报 GPG 校验错误、客户端 403 等异常,请根据报错信息对照上述步骤排查。