一、前期准备
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
测试执行定时任务(确认可正常执行定时任务)