Linux定期自动更新本地yum源的rpm包

一、原理

本地 Yum 源本质是存放 rpm 包的目录,通过repodata索引文件(记录包依赖、版本等信息)供客户端识别。定期更新的核心逻辑是:

  1. 从上游 Yum 源(如麒麟官方镜像、第三方仓库)同步最新的 rpm 包到本地目录;
  2. 生成 / 更新本地目录的repodata索引文件,确保客户端能识别新包。

二、具体实现步骤

1. 准备工具:reposynccreaterepo

  • reposync:用于从上游 Yum 源同步 rpm 包到本地(需安装yum-utils);
  • createrepo:用于生成 / 更新repodata索引文件(需安装createrepo)。

安装命令:

yum install -y yum-utils createrepo

2. 创建同步脚本

vi  /etc/yum.repos.d/update_local_yum.sh

新建脚本,实现rpm包自动同步和索引更新,内容如下:

#!/bin/bash

# 配置参数 - 多个上游Yum源的repo ID数组
UPSTREAM_REPOS=("ks10-adv-os", "ks10-adv-updates" )
# 本地Yum源根目录
LOCAL_YUM_DIR="/data/yum/kylin/V10SP3" 
# 日志文件路径 
LOG_FILE="/var/log/update_local_yum.log"  
# 可根据实际环境改为dnf reposync
REPOSYNC_CMD="reposync"  

# 确保本地根目录存在
mkdir -p "$LOCAL_YUM_DIR" || { echo "[$(date)] 无法创建目录 $LOCAL_YUM_DIR" >> "$LOG_FILE"; exit 1; }

# 记录开始时间
echo "===== 开始批量同步:$(date) =====" >> "$LOG_FILE"

# 循环处理每个仓库
for repo in "${UPSTREAM_REPOS[@]}"; do
    echo "----- 开始处理仓库: $repo ($(date)) -----" >> "$LOG_FILE"
    
    # 从上游同步rpm包
    $REPOSYNC_CMD --repo "$repo" -p "$LOCAL_YUM_DIR" --delete >> "$LOG_FILE" 2>&1
    
    # 检查同步是否成功
    if [ $? -eq 0 ]; then
        echo "仓库 $repo 同步完成,开始更新索引..." >> "$LOG_FILE"
        
        # 检查目标目录是否存在
        repo_dir="$LOCAL_YUM_DIR/$repo"
        if [ -d "$repo_dir" ]; then
            # 更新repodata索引
            createrepo --update "$repo_dir" >> "$LOG_FILE" 2>&1
            echo "仓库 $repo 索引更新完成" >> "$LOG_FILE"
        else
            echo "错误:仓库 $repo 的同步目录 $repo_dir 不存在" >> "$LOG_FILE"
        fi
    else
        echo "仓库 $repo 同步失败!错误代码:$?" >> "$LOG_FILE"
    fi
    
    echo "----- 结束处理仓库: $repo ($(date)) -----" >> "$LOG_FILE"
done

echo "===== 批量同步结束:$(date) =====" >> "$LOG_FILE"

关键参数说明

  • UPSTREAM_REPO:需对应/etc/yum.repos.d/中配置的上游源 ID(如CentOS-Base.repo中的[base]);
  • LOCAL_YUM_DIR:本地 Yum 源目录(需确保客户端可访问,如通过 HTTP 服务暴露,需配置 Nginx/Apache);
  • --delete(reposync):删除本地过时包,避免磁盘占用过大;
  • --update(createrepo):仅更新新增 / 修改的包,比全量生成索引更高效。

3. 配置定时任务(crontab

通过crontab设置定期执行脚本(每周日5点执行),命令如下:

# 赋予脚本执行权限chmod +x /usr/local/bin/update_local_yum.sh

# 编辑定时任务crontab -e

# 添加如下内容(每周日5点执行)

* 5 * * 0  sh /etc/yum.repos.d/update_local_yum.sh &

4. 验证本地 Yum 源可用性

  • 客户端配置本地 Yum 源(新建/etc/yum.repos.d/kylin_aarch64_update.repo):
[ks10-adv-os-update]

name = Kylin Linux Advanced Server 10 - Os

baseurl = http://10.33.0.xx/V10/V10SP3-2403/ks10-adv-os/

gpgcheck = 0

enabled = 1

[ks10-adv-news-updates]

name = Kylin Linux Advanced Server 10 - Updates

baseurl = http://10.33.0.xx/V10/V10SP3-2403/ks10-adv-updates/

gpgcheck = 0

enabled = 1

 客户端测试:

yum clean all && yum makecache  
# 清除缓存并加载新索引

yum list updates  
# 查看是否能识别到新包

  

posted @ 2025-08-11 13:59  cloud-qing0212  阅读(38)  评论(0)    收藏  举报