在一台 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-rpms
和 rhel-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
命令同步 BaseOS
和 AppStream
仓库。
# 同步 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-baseos
和 local-appstream
这两个仓库。
4. 自动化维护
为了确保本地 Repo 服务器始终提供最新的软件包,建议设置一个定时任务来定期同步仓库和更新元数据。
4.1. 创建自动化脚本
在 Repo 服务器上创建一个脚本,用于执行 reposync
和 createrepo_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 官方仓库并更新元数据,确保局域网内的客户端始终能够获取到最新的软件包。
发表回复