Rocky Linux 本地 yum 源服务器部署实战指南

目 录

[第一章 概述](#第一章 概述)

[1.1 适用场景](#1.1 适用场景)

[1.2 技术架构](#1.2 技术架构)

[1.3 为什么保留官方 repodata](#1.3 为什么保留官方 repodata)

[第二章 环境准备](#第二章 环境准备)

[2.1 服务器要求](#2.1 服务器要求)

[2.2 安装所需软件](#2.2 安装所需软件)

[2.3 检查 SELinux 状态](#2.3 检查 SELinux 状态)

[第三章 镜像源选型](#第三章 镜像源选型)

[3.1 常用国内镜像站对比](#3.1 常用国内镜像站对比)

[3.2 USTC rsync 地址](#3.2 USTC rsync 地址)

[第四章 目录规划与仓库创建](#第四章 目录规划与仓库创建)

[4.1 规划目录结构](#4.1 规划目录结构)

[4.2 创建 Rocky 目录](#4.2 创建 Rocky 目录)

[第五章 使用 rsync 同步各仓库](#第五章 使用 rsync 同步各仓库)

[5.1 同步 BaseOS 仓库](#5.1 同步 BaseOS 仓库)

[5.2 同步 AppStream 仓库](#5.2 同步 AppStream 仓库)

[5.3 同步 extras 仓库](#5.3 同步 extras 仓库)

[5.4 参数说明](#5.4 参数说明)

[第六章 一体化同步脚本](#第六章 一体化同步脚本)

[6.1 编写同步脚本](#6.1 编写同步脚本)

[6.2 赋予执行权限并试运行](#6.2 赋予执行权限并试运行)

[6.3 后台执行与进度查看](#6.3 后台执行与进度查看)

[6.4 校验 repodata 就绪](#6.4 校验 repodata 就绪)

[第七章 客户端 repo 配置](#第七章 客户端 repo 配置)

[7.1 创建客户端 repo 文件](#7.1 创建客户端 repo 文件)

[7.2 一键切换(移动原源并下载本地源)](#7.2 一键切换(移动原源并下载本地源))

[7.3 生成可供客户端下载的 repo 文件](#7.3 生成可供客户端下载的 repo 文件)

[第八章 验证与日常维护](#第八章 验证与日常维护)

[8.1 客户端验证源可用](#8.1 客户端验证源可用)

[8.2 实际安装软件包验证](#8.2 实际安装软件包验证)

[8.3 配置定时增量同步](#8.3 配置定时增量同步)

[8.4 常见问题排查](#8.4 常见问题排查)

第一章 概述

在企业内网环境中,出于网络隔离、带宽节省与安装速度的考虑,通常需要搭建本地软件源服务器。本指南以 CentOS 7.9 服务器为基础,完整演示如何部署一套 Rocky Linux 9 的本地 yum(dnf)源,使内网中的 Rocky 客户端能够脱离公网、稳定高效地完成软件包安装与更新。

1.1 适用场景

  • 内网环境无法直连公网,或公网带宽受限的机房与实验室
  • 需要统一管控多台 Rocky Linux 主机软件包来源与版本
  • 为 Kubernetes、OpenStack 等大规模集群批量安装依赖软件

1.2 技术架构

本方案的整体架构如下:以一台 CentOS 7.9 服务器作为 yum 源服务器,安装 httpd 提供 Web 访问,通过 rsync 从中科大(USTC)镜像站同步 Rocky 9 的三个核心仓库(BaseOS、AppStream、extras),并保留官方 repodata 元数据,然后向内网 Rocky 客户端提供 http 访问。

|------------|--------------------|---------------------------|
| 角色 | 组件 | 说明 |
| 源服务器 | CentOS 7.9 + httpd | 提供 HTTP 仓库访问,监听 80 端口 |
| 同步工具 | rsync | 从 USTC 镜像站增量同步 Rocky 源 |
| 客户端 | Rocky Linux 9 | 通过 dnf 配置本地源并安装软件包 |
| 镜像源 | 中科大 USTC | rsync.mirrors.ustc.edu.cn |

1.3 为什么保留官方 repodata

Rocky Linux 9 的 AppStream 仓库采用模块化设计,包含 dnf module 元数据(modules.yaml),支持同一软件多版本共存。若使用老版本 createrepo(如 CentOS 7 自带的 0.9.9)重建元数据,会丢失这些模块信息,导致客户端无法使用 dnf module 功能。因此本方案采用 rsync 整树同步,直接保留官方 repodata,不做二次生成。

关键结论:

第二章 环境准备

2.1 服务器要求

|------------|---------------------------------|--------------------|
| 项目 | 要求 | 说明 |
| 操作系统 | CentOS 7.9 或任意可安装 rsync 的 Linux | 本例为 CentOS 7.9 |
| 内存 | 建议 2G 以上 | 同步与 httpd 服务开销 |
| 磁盘 | 预留 80G 以上 | Rocky 9 三仓库合计约 40G |
| 网络 | 源服务器可访问公网镜像站 | 仅同步阶段需要 |

2.2 安装所需软件

需要安装 httpd 提供 Web 服务,rsync 用于同步镜像,以及 wget、curl 等工具用于验证。

yum install -y httpd rsync wget curl

systemctl enable --now httpd

systemctl status httpd

确认 httpd 已启动并监听 80 端口:

ss -tlnp | grep :80

输出类似: LISTEN 0 128 *:80 *:* users:(("httpd",pid=xxxx))

2.3 检查 SELinux 状态

若服务器开启了 SELinux 且为 Enforcing 模式,可能影响 httpd 读取仓库目录。建议确认当前状态,必要时放行或临时关闭:

getenforce

若输出 Enforcing,可临时设为 Permissive:

setenforce 0

生产环境建议通过配置 httpd 的文件上下文来放行仓库目录,而非直接关闭 SELinux。

第三章 镜像源选型

搭建本地 Rocky 源前,需要选择一个稳定、支持 rsync 同步的国内镜像站。不同镜像站在 Rocky 仓库的支持情况差异较大,需要实测确认。

3.1 常用国内镜像站对比

|-------------|-------------------|--------------------|
| 镜像站 | Rocky 源支持 | rsync 可用性 |
| 清华 TUNA | 无 Rocky 仓库 | 不支持(无 rocky 模块) |
| 阿里云 | HTTP 可用 | rsync 不可用(SIGTERM) |
| 中科大 USTC | 支持(推荐) | 支持 rsync 同步 |
| 上海交大 SJTU | 支持 | 需实测确认 |
| 浙江大学 ZJU | 支持 | 需实测确认 |

本方案推荐:

3.2 USTC rsync 地址

USTC 镜像站的 rsync 服务使用专用域名 rsync.mirrors.ustc.edu.cn。先列出 Rocky 仓库目录确认结构:

rsync rsync://rsync.mirrors.ustc.edu.cn/rocky/9/

应看到 BaseOS、AppStream、extras 等子目录

Rocky 9 的核心仓库为 BaseOS、AppStream、extras,目录结构如下:

rocky/9/

├── BaseOS/x86_64/os/ # 核心系统组件

├── AppStream/x86_64/os/ # 应用软件与运行时

└── extras/x86_64/os/ # 额外补充包

注意:USTC 要求使用 rsync 专用域名同步,且每个仓库的同步频率不宜超过每天一次,请勿使用 while 循环频繁同步。

第四章 目录规划与仓库创建

在 httpd 的 Web 根目录 /var/www/html 下,为 Rocky 源单独创建目录,与既有 CentOS 仓库保持平级,避免混放、保证客户端 baseurl 规范。

4.1 规划目录结构

最终目录结构如下,客户端将通过 http://服务器IP/rocky/9/... 访问:

/var/www/html/

├── centos/ # 已有 CentOS 仓库

└── rocky/ # 新增 Rocky 仓库

└── 9/

├── BaseOS/x86_64/os/

├── AppStream/x86_64/os/

└── extras/x86_64/os/

4.2 创建 Rocky 目录

mkdir -p /var/www/html/rocky/9/BaseOS/x86_64/os

mkdir -p /var/www/html/rocky/9/AppStream/x86_64/os

mkdir -p /var/www/html/rocky/9/extras/x86_64/os

ls -la /var/www/html/rocky/9/

目录创建完成后,即可开始从 USTC 同步各仓库内容。

第五章 使用 rsync 同步各仓库

使用 rsync 从 USTC 同步三个仓库。必须使用 -a 参数以保留时间戳、权限等属性,并支持增量同步。三个仓库建议逐个串行同步,避免同时占用过多带宽与磁盘 IO。

5.1 同步 BaseOS 仓库

rsync -av --delete \

rsync://rsync.mirrors.ustc.edu.cn/rocky/9/BaseOS/x86_64/os/ \

/var/www/html/rocky/9/BaseOS/x86_64/os/

5.2 同步 AppStream 仓库

rsync -av --delete \

rsync://rsync.mirrors.ustc.edu.cn/rocky/9/AppStream/x86_64/os/ \

/var/www/html/rocky/9/AppStream/x86_64/os/

5.3 同步 extras 仓库

rsync -av --delete \

rsync://rsync.mirrors.ustc.edu.cn/rocky/9/extras/x86_64/os/ \

/var/www/html/rocky/9/extras/x86_64/os/

5.4 参数说明

|------------|----------------------|
| 参数 | 说明 |
| -a | 归档模式,保留权限、时间戳、软链接等属性 |
| -v | 显示同步过程详情 |
| --delete | 删除目标端多余文件,保证与源一致 |
| \ | 行尾续行符,用于将长命令分行书写 |

提示:

第六章 一体化同步脚本

为避免手工逐条执行,可将三个仓库的同步整合为一个脚本,串行执行并输出完成标志,便于定时任务调用。

6.1 编写同步脚本

创建 /root/sync_rocky_all.sh,内容如下:

#!/bin/bash

Rocky Linux 9 本地源一体化同步脚本

BASE=/var/www/html/rocky/9

SRC=rsync://rsync.mirrors.ustc.edu.cn/rocky/9

for repo in BaseOS AppStream extras; do

echo "==== 开始同步 {repo} (date) ===="

rsync -av --delete \

{SRC}/{repo}/x86_64/os/ \

{BASE}/{repo}/x86_64/os/

echo "==== {repo} 同步完成 (date) ===="

done

echo "ALL_DONE $(date)"

6.2 赋予执行权限并试运行

chmod +x /root/sync_rocky_all.sh

/root/sync_rocky_all.sh 2>&1 | tee /root/sync_rocky_all.log

6.3 后台执行与进度查看

由于三仓库合计约 40G,同步耗时较长。在低配服务器(如 1 核)上建议使用 nohup 放入后台执行,避免 SSH 会话断开导致中断:

setsid nohup /root/sync_rocky_all.sh > /root/sync_rocky_all.log 2>&1 < /dev/null &

查看同步日志末尾:

tail -f /root/sync_rocky_all.log

完成标志:

6.4 校验 repodata 就绪

同步完成后,确认三个仓库的官方元数据均已就位:

ls /var/www/html/rocky/9/BaseOS/x86_64/os/repodata/repomd.xml

ls /var/www/html/rocky/9/AppStream/x86_64/os/repodata/repomd.xml

ls /var/www/html/rocky/9/extras/x86_64/os/repodata/repomd.xml

三个文件都存在,说明同步成功。

第七章 客户端 repo 配置

在 Rocky Linux 9 客户端上,创建指向内网源服务器的 repo 文件,即可脱离公网使用本地源。

7.1 创建客户端 repo 文件

在客户端 /etc/yum.repos.d/ 下新建本地源配置文件(以服务器 IP 10.10.10.10 为例):

cat > /etc/yum.repos.d/local-rocky.repo << 'EOF'

local-rocky-baseos

name=Local Rocky Linux 9 - BaseOS

baseurl=http://10.10.10.10/rocky/9/BaseOS/x86_64/os/

enabled=1

gpgcheck=0

local-rocky-appstream

name=Local Rocky Linux 9 - AppStream

baseurl=http://10.10.10.10/rocky/9/AppStream/x86_64/os/

enabled=1

gpgcheck=0

local-rocky-extras

name=Local Rocky Linux 9 - Extras

baseurl=http://10.10.10.10/rocky/9/extras/x86_64/os/

enabled=1

gpgcheck=0

EOF

提示:

7.2 一键切换(移动原源并下载本地源)

为避免与原源冲突,可将原 repo 文件备份后,再从源服务器下载本地源配置文件。以下命令在客户端执行:

mkdir -p /etc/yum.repos.d/repo.bak

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo.bak/ 2>/dev/null

wget -P /etc/yum.repos.d/ http://10.10.10.10/rocky/9/tommypeng-rocky.repo

dnf clean all

dnf makecache

7.3 生成可供客户端下载的 repo 文件

上述一键切换命令依赖源服务器上存在 tommypeng-rocky.repo 文件。将其放置在源服务器的 rocky/9 目录下,即可被客户端 wget 下载:

在源服务器 10.10.10.10 上执行

cat > /var/www/html/rocky/9/tommypeng-rocky.repo << 'EOF'

local-rocky-baseos

name=Local Rocky Linux 9 - BaseOS

baseurl=http://10.10.10.10/rocky/9/BaseOS/x86_64/os/

enabled=1

gpgcheck=0

local-rocky-appstream

name=Local Rocky Linux 9 - AppStream

baseurl=http://10.10.10.10/rocky/9/AppStream/x86_64/os/

enabled=1

gpgcheck=0

local-rocky-extras

name=Local Rocky Linux 9 - Extras

baseurl=http://10.10.10.10/rocky/9/extras/x86_64/os/

enabled=1

gpgcheck=0

EOF

第八章 验证与日常维护

8.1 客户端验证源可用

在客户端确认本地源可识别并建立缓存:

dnf repolist

应列出 local-rocky-baseos / local-rocky-appstream / local-rocky-extras

dnf makecache

8.2 实际安装软件包验证

从本地源实际安装一个软件包,验证端到端可用(例如安装 git-subtree):

dnf install -y git-subtree

显示下载地址应为内网服务器 IP,且安装成功

验证要点:

8.3 配置定时增量同步

为保持本地源与上游同步,可配置 cron 定时任务(USTC 建议每个仓库每天最多同步一次):

crontab -e

每天凌晨 2 点执行同步,写入以下一行:

0 2 * * * /root/sync_rocky_all.sh >> /root/sync_rocky_all.log 2>&1

8.4 常见问题排查

|------------------------------------|-------------------------------------------------------|
| 现象 | 排查与处理 |
| 客户端 makecache 失败,报 repomd.xml 无法下载 | 确认源服务器 httpd 运行、目录路径正确、防火墙放行 80 端口 |
| 报 Cannot find a valid baseurl | 检查 repo 文件 baseurl 是否指向正确的 /rocky/9/xxx/x86_64/os/ 路径 |
| dnf module 功能异常 | 确认使用的是官方 repodata,未用旧版 createrepo 重建 |
| 同步速度慢 | 确认使用 rsync 而非 HTTP 大规模同步;串行同步避免 IO 打满 |

相关推荐
李彦亮老师(本人)6 个月前
Rocky Linux 9.x 安全加固实战指南:从系统初始化到生产级防护
linux·运维·安全·rocky
JuckenBoy6 个月前
Linux环境安装SGLang框架运行自选大模型(以Rocky9.7为例)
linux·运维·大模型·qwen·rocky·deepseek·sglang
Linux运维技术栈7 个月前
jumpserver堡垒机从 CentOS 7 迁移至 Rocky Linux 9 实战指南
linux·运维·服务器·centos·rocky
Linux运维技术栈7 个月前
GitLab 15.8.1 → 16.10.10 跨OS升级与迁移全流程实战(CentOS7 → Rocky9.5)
gitlab·rocky
MOYIXIAOWEIWEI1 年前
rocky 9.5系统安装zabbix监控实现邮件告警
ubuntu·zabbix·rocky
FBI HackerHarry浩1 年前
云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
linux·运维·服务器·rocky
helloasimo2 年前
Rocky Linux 下安装Liboffice
linux·rocky·安装liboffice
helloasimo2 年前
Rocky Linux下安装meld
linux·运维·centos·rocky
Raymond运维2 年前
Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
linux·运维·ubuntu·centos·debian·rocky·almalinux