Rocky 9.4安装私有Yum仓库及同步仓库数据(学习笔记)

一、前期准备

1、安装软件包

#安装 createrepo_c httpd dnf-utils
dnf install -y createrepo_c httpd dnf-utils

2、启动http网页服务

systemctl enable --now httpd

3、允许防火墙通过http服务Rocky 9.4安装私有Yum仓库及同步仓库数据

#配置防火墙
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

4、创建仓库目录(可根据实际情况修改)

mkdir -p /data/repos/rocky/9.4/{BaseOS,AppStream}/x86_64/os

5、配置本地yum源(更改为国内源,提高拉去效率)

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/rocky-*.repo

dnf makecache

二、同步仓库包

1、同步BaseOS

reposync --repo=baseos --download-path=/data/repos/rocky/9.4/BaseOS/x86_64/os --download-metadata

同步时间与网络有关(耐心等待)

2、同步AppStream

reposync --repo=appstream --download-path=/data/repos/rocky/9.4/AppStream/x86_64/os --download-metadata

同步时间与网络有关(耐心等待)

3、生成仓库源

# BaseOS
createrepo_c /data/repos/rocky/9.4/BaseOS/x86_64/os

# AppStream(包较多需要等待30s左右)
createrepo_c /data/repos/rocky/9.4/AppStream/x86_64/os

 4、配置Selinux权限(可以选择关闭)及目录权限

#配置目录权限
chown -R apache:apache /data/repos
chmod -R 755 /data/repos

#配置Selinux权限
semanage fcontext -a -t httpd_sys_content_t "/data/repos(/.*)?"
restorecon -Rv /data/repos/

#允许Apache访问网络(如需同步外部仓库)
setsebool -P httpd_can_network_connect 1
#关闭Selinux
setenforce 0        #(临时关闭)
#永久关闭(需重启服务器)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

5、配置http目录

#配置网页目录yumrepo.conf
vim /etc/httpd/conf.d/yumrepo.conf
#内容(Alias为别名)
Alias /repos /data/repos
<Directory /data/repos>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

6、重启httpd

systemctl restart httpd

三、验证仓库是否可用

1、http方式访问yum仓库

http://<仓库IP>/repos,本次实验服务器IP地址为10.100.0.194

2、内网客户机写本地yum仓库进行下载安装测试(需清楚其他仓库,清理方法:移除/etc/yum.repos.d/下所有其他文件或者将文件中得enabled=1改为0)

#编写本地yum仓库
vim /etc/yum.repos.d/local.repo
#内容(IP地址和目录根据实际情况进行修改)
[local-baseos]
name=Local Rocky Linux BaseOS
baseurl=http://10.100.0.194/repos/rocky/9.4/BaseOS/x86_64/os/
enabled=1
gpgcheck=0 

[local-appstream]
name=Local Rocky Linux AppStream
baseurl=http://10.100.0.194/repos/rocky/9.4/AppStream/x86_64/os/
enabled=1
gpgcheck=0

3、下载验证

#安装vsftpd测试
#查询是否安装vsftpd(无返回为未安装)
rpm -qa | grep vsftpd

#清理yum源及重新加载
dnf clean all
dnf makecache

#安装vsftpd
dnf -y install vsftpd

验证成功 

四、部署定时任务同步

1、 找AI编写同步脚本


#!/bin/bash

# 配置部分 - 可轻松修改
REPO_BASE="/data/repos/rocky/9.4"
MIRROR_URL="https://dl.rockylinux.org/pub/rocky/9.4"
REPOS=("BaseOS" "AppStream")
ARCH="x86_64"

# 检查是否以root用户运行
if [ "$(id -u)" -ne 0 ]; then
    echo "错误: 此脚本需要root权限运行" >&2
    exit 1
fi

# 检查必要命令是否存在
for cmd in reposync createrepo_c; do
    if ! command -v $cmd >/dev/null 2>&1; then
        echo "错误: 未找到 $cmd 命令,请先安装" >&2
        exit 1
    fi
done

# 创建目录结构
for repo in "${REPOS[@]}"; do
    mkdir -p "${REPO_BASE}/${repo}/${ARCH}/os"
done

# 同步仓库函数
sync_repo() {
    local repo_name=$1
    local repo_path=$2
    
    echo "开始同步 ${repo_name} 仓库..."
    if reposync --repo="${repo_name,,}" \
                --download-path="${repo_path}" \
                --download-metadata \
                --newest-only \
                --remote-time \
                --downloadcomps; then
        echo "${repo_name} 仓库同步完成"
        return 0
    else
        echo "错误: ${repo_name} 仓库同步失败" >&2
        return 1
    fi
}

# 更新仓库元数据函数
update_repo_metadata() {
    local repo_path=$1
    
    echo "更新仓库元数据..."
    if createrepo_c --update --workers=4 "${repo_path}"; then
        echo "仓库元数据更新完成"
        return 0
    else
        echo "错误: 仓库元数据更新失败" >&2
        return 1
    fi
}

# 主执行流程
for repo in "${REPOS[@]}"; do
    REPO_PATH="${REPO_BASE}/${repo}/${ARCH}/os"
    
    # 同步仓库
    if ! sync_repo "${repo}" "${REPO_PATH}"; then
        continue  # 如果一个仓库失败,继续尝试下一个
    fi
    
    # 更新元数据
    update_repo_metadata "${REPO_PATH}"
done

echo "所有仓库同步任务完成"
#赋执行权限
chmod +x /opt/sync_repos.sh
执行测试
sh /opt/sync_repos.sh

确认可正常使用

2、创建定时任务(可将同步时间先调制2分钟一次,来确认定时任务是否正常执行)

#创建日志文件并附执行权限
mkdir -p /var/log/reposync
chmod 755 /var/log/reposync

#编写定时任务
crontab -e
#内容
# 每天凌晨3点同步仓库,并记录日志
0 3 * * * /usr/local/bin/sync_rocky_repos > /var/log/reposync/sync_$(date +\%Y\%m\%d).log 2>&1

# 每周日凌晨2点清理30天前的旧日志
0 2 * * 0 find /var/log/reposync/ -type f -mtime +30 -delete


#重启crond服务
systemctl restart crond

 测试执行定时任务(确认可正常执行定时任务)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值