RHEL 10 局域网 Repo 服务器配置指南

预计阅读时间:11分钟

在一台 Red Hat Enterprise Linux 10 (RHEL 10) 主机配置为本地 Repo 服务器。通过此设置,局域网内的其他 RHEL 10 客户端将能够高效地进行系统更新和软件包安装,无需直接连接到 Red Hat 官方仓库提供更快更稳定的传输。

1. 前提条件

在开始配置之前,请确保满足以下条件:

  • 操作系统: 一台已安装 Red Hat Enterprise Linux 10 (RHEL 10) 的物理机或虚拟机。
  • Red Hat 订阅: 拥有一个有效的、已附加到该主机的 Red Hat 订阅。
  • 网络连接: 能够访问互联网,以便从 Red Hat 官方同步软件包。
  • IP 地址: Repo 服务器拥有一个固定的局域网 IP 地址,例如 192.168.1.199
  • 存储空间: 至少拥有 1TB 的可用磁盘空间。
  • 权限: 拥有 root 权限。

2. Repo 服务器配置步骤

2.1. 注册Red Hat Subscription Management 并刷新订阅信息

注册 Red Hat Subscription Management 并刷新订阅信息,以确保能够访问 Red Hat 官方仓库。

[root@192-168-1-199 ~]# subscription-manager register

注册完成后,刷新机器上的信息:

[root@192-168-1-199 ~]# subscription-manager refresh
All local data refreshed

2.2. 安装并配置 Apache Web 服务器

使用 Apache HTTP Server 来提供同步的软件包文件。

[root@192-168-1-199 ~]# dnf update -y
[root@192-168-1-199 ~]# dnf install -y httpd
[root@192-168-1-199 ~]# systemctl start httpd
[root@192-168-1-199 ~]# systemctl enable httpd

配置防火墙以允许 HTTP 流量(默认端口 80):

[root@192-168-1-199 ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@192-168-1-199 ~]# firewall-cmd --reload
success

2.3. 安装 yum-utils 工具

yum-utils 软件包包含了 reposync 工具,用于同步远程仓库。

[root@192-168-1-199 ~]# dnf install -y yum-utils

2.4. 查看已启用的仓库 ID

在同步软件包之前,我们需要确认哪些 Red Hat 仓库是可用的。

[root@192-168-1-199 ~]# dnf repolist
Updating Subscription Management repositories.
repo id                               repo name
rhel-10-for-x86_64-appstream-rpms     Red Hat Enterprise Linux 10 for x86_64 - AppStream (RPMs)
rhel-10-for-x86_64-baseos-rpms        Red Hat Enterprise Linux 10 for x86_64 - BaseOS (RPMs)

从输出中可以看到,我们需要同步的仓库 ID 是 rhel-10-for-x86_64-baseos-rpmsrhel-10-for-x86_64-appstream-rpms

2.5. 创建本地仓库存储目录

把同步的软件包存储在 Apache 的默认网站根目录 /var/www/html/ 下的一个子目录 rhel10-repo 中。

[root@192-168-1-199 ~]# mkdir -p /var/www/html/rhel10-repo

2.6. 同步 Red Hat 仓库

使用 reposync 命令同步 BaseOSAppStream 仓库。

# 同步 BaseOS 仓库
reposync --repo=rhel-10-for-x86_64-baseos-rpms -p /var/www/html/rhel10-repo --newest-only --delete

# 同步 AppStream 仓库
reposync --repo=rhel-10-for-x86_64-appstream-rpms -p /var/www/html/rhel10-repo --newest-only --delete
  • --repo=<repo_id>: 指定要同步的仓库 ID。
  • -p /path/to/download: 指定下载软件包的本地路径。
  • --newest-only: 只下载每个软件包的最新版本,这可以节省大量的磁盘空间和同步时间。
  • --delete: 删除本地仓库中已不存在于远程仓库的软件包,以保持同步。

2.7. 创建仓库元数据

同步完成后,需要为本地仓库创建元数据,以便客户端能够识别和使用这些软件包。如果未安装 createrepo_c,请先安装:

[root@192-168-1-199 ~]# dnf install -y createrepo_c

为每个同步的仓库创建元数据:

# 为 BaseOS 仓库创建元数据
[root@192-168-1-199 ~]# createrepo_c /var/www/html/rhel10-repo/rhel-10-for-x86_64-baseos-rpms/

# 为 AppStream 仓库创建元数据
[root@192-168-1-199 ~]# createrepo_c /var/www/html/rhel10-repo/rhel-10-for-x86_64-appstream-rpms/

您可以通过浏览器访问 http://192.168.1.199/rhel10-repo/ 来验证目录结构和文件是否已成功同步。

3. 配置局域网客户端

在局域网内需要使用此本地 Repo 服务器的 RHEL 10 客户端机器上,进行以下配置:

3.1. 备份并禁用现有 Red Hat 仓库

首先备份并禁用客户端上现有的 Red Hat 官方仓库配置,以避免冲突。

[root@client-machine ~]# mkdir -p /etc/yum.repos.d/bak
[root@client-machine ~]# mv /etc/yum.repos.d/redhat.repo /etc/yum.repos.d/bak/

3.2. 创建新的本地仓库文件

创建一个新的 .repo 文件,指向您的本地 Repo 服务器。

[root@client-machine ~]# vi /etc/yum.repos.d/local-rhel10.repo

在文件中添加以下内容:

[local-baseos]
name=Local RHEL 10 BaseOS
baseurl=http://192.168.1.199/rhel10-repo/rhel-10-for-x86_64-baseos-rpms/
enabled=1
gpgcheck=0

[local-appstream]
name=Local RHEL 10 AppStream
baseurl=http://192.168.1.199/rhel10-repo/rhel-10-for-x86_64-appstream-rpms/
enabled=1
gpgcheck=0
  • baseurl: 指向您的 Repo 服务器的 IP 地址和正确的仓库路径。
  • enabled=1: 表示启用这个仓库。
  • gpgcheck=0: 表示不进行 GPG 密钥检查。在受信任的内部局域网环境中,这通常是可以接受的简化操作。如果您希望启用 GPG 检查以提高安全性,则需要将 Red Hat 的 GPG 密钥导入到客户端。

3.3. 清除 dnf 缓存并测试

清除 dnf 缓存并测试是否能正确列出新的本地仓库。

[root@client-machine ~]# dnf clean all
[root@client-machine ~]# dnf repolist

如果一切配置正确,您应该会看到 local-baseoslocal-appstream 这两个仓库。

4. 自动化维护

为了确保本地 Repo 服务器始终提供最新的软件包,建议设置一个定时任务来定期同步仓库和更新元数据。

4.1. 创建自动化脚本

在 Repo 服务器上创建一个脚本,用于执行 reposynccreaterepo_c 命令。

[root@192-168-1-199 ~]# mkdir -p /root/script/
[root@192-168-1-199 ~]# vi /root/script/update_local_repo.sh

添加以下内容到 update_local_repo.sh 文件中:

#!/bin/bash

# 脚本日志文件
LOG_FILE="/var/log/repo_sync.log"

# 要同步的仓库ID列表
REPOS=(
  "rhel-10-for-x86_64-baseos-rpms"
  "rhel-10-for-x86_64-appstream-rpms"
)

# 仓库根目录
REPO_PATH="/var/www/html/rhel10-repo"

echo "==========================================" >> $LOG_FILE
echo "脚本开始于: $(date)" >> $LOG_FILE

# 同步所有仓库
for REPO_ID in "${REPOS[@]}"; do
  echo "--> 正在同步仓库: $REPO_ID" | tee -a $LOG_FILE
  reposync --repo=$REPO_ID -p $REPO_PATH --newest-only --delete >> $LOG_FILE 2>&1
done

# 为更新后的仓库重新创建元数据
for REPO_ID in "${REPOS[@]}"; do
  REPO_DIR="$REPO_PATH/$REPO_ID"
  if [ -d "$REPO_DIR" ]; then
    echo "--> 正在为 $REPO_ID 创建元数据" | tee -a $LOG_FILE
    createrepo_c -v $REPO_DIR >> $LOG_FILE 2>&1
  fi
done

echo "脚本结束于: $(date)" >> $LOG_FILE
echo "==========================================" >> $LOG_FILE

4.2. 授予脚本执行权限

[root@192-168-1-199 ~]# chmod +x /root/script/update_local_repo.sh

4.3. 设置 Cron 定时任务

编辑 crontab,设置脚本在每天凌晨 2:30 自动运行。

[root@192-168-1-199 ~]# crontab -e

在打开的 crontab 编辑器中添加以下一行:

30 2 * * * /root/script/update_local_repo.sh

查看crontab 任务计划列表

[root@192-168-1-199 ~]# crontab -l
30 2 * * * /root/script/update_local_repo.sh
[root@192-168-1-199 ~]#

本地 Repo 服务器将每天自动同步 Red Hat 官方仓库并更新元数据,确保局域网内的客户端始终能够获取到最新的软件包。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注