企业内网自建yum源 仓库 | rsync同步方案
文章目录
1.背景概述
yum源是一个软件仓库,centos7 停更后,建议企业在内网自建软自己的软件仓库,一般有下列步骤:
- 取得软件包文件,可以从安装镜像拷贝,本文使用rsync方式从互联网同步
- 搭建网页文件服务器,本文使用nginx
- 使用createrepo创建索引
- 配置客户端yum.repo文件
2.获取软件文件
2.1 准备同步脚本如下
#!/bin/bash
# 更新yum镜像,调整限速
RsyncCommand="rsync -rvutH -P --delete --delete-after --delay-updates --bwlimit=10000 --exclude-from=/app/yumData/exclude.list"
DIR="/app/yumData"
LogDir="$DIR/logs"
Centos7Base="$DIR/Centos7/x86_64/Base"
Centos7Epel="$DIR/Centos7/x86_64/Epel"
Centos7Salt="$DIR/Centos7/x86_64/Salt"
Centos7Update="$DIR/Centos7/x86_64/Update"
Centos7Docker="$DIR/Centos7/x86_64/Docker"
Centos7Mysql5_7="$DIR/Centos7/x86_64/Mysql/Mysql5.7"
Centos7Mysql8_0="$DIR/Centos7/x86_64/Mysql/Mysql8.0"
MirrorDomain="rsync://rsync.mirrors.ustc.edu.cn"
#exclude="/yumsource/exclude.list"
# 目录不存在就创建
check_dir(){
for dir in $*
do
test -d $dir || mkdir -p $dir
done
}
# 检查rsync同步结果
check_rsync_status(){
if [ $? -eq 0 ]; then
echo "rsync success" >> $1
else
echo "rsync fail" >> $1
fi
}
check_dir $DIR $LogDir $Centos7Base $Centos7Epel $Centos7Salt $Centos7Update $Centos7Docker $Centos7Mysql5_7 $Centos7Mysql8_0
# Base yumrepo
$RsyncCommand "$MirrorDomain"/centos/7/os/x86_64/ $Centos7Base >> "$LogDir/centos7Base.log" 2>&1
check_rsync_status "$LogDir/centos7Base.log"
# Epel yumrepo
$RsyncCommand "$MirrorDomain"/epel/7/x86_64/ $Centos7Epel >> "$LogDir/centos7Epel.log" 2>&1
check_rsync_status "$LogDir/centos7Epel.log"
# SaltStack yumrepo
$RsyncCommand "$MirrorDomain"/salt/yum/redhat/7/x86_64/ $Centos7Salt >> "$LogDir/centos7Salt.log" 2>&1
check_rsync_status "$LogDir/centos7Salt.log"
# ln -s $Centos7Salt/archive/$(ls $Centos7Salt/archive | tail -1) $Centos7Salt/latest
# Docker yumrepo
$RsyncCommand "$MirrorDomain"/docker-ce/linux/centos/7/x86_64/stable/ $Centos7Docker >> "$LogDir/centos7Docker.log" 2>&1
check_rsync_status "$LogDir/centos7Docker.log"
# CentOS update yumrepo
$RsyncCommand "$MirrorDomain"/centos/7/updates/x86_64/ $Centos7Update >> "$LogDir/centos7Update.log" 2>&1
check_rsync_status "$LogDir/centos7Update.log"
# MySQL 5.7 yumrepo
$RsyncCommand "$MirrorDomain"/mysql-repo/yum/mysql-5.7-community/el/7/x86_64/ $Centos7Mysql5_7 >> "$LogDir/centos7Mysql5.7.log" 2>&1
check_rsync_status "$LogDir/centos7Mysql5.7.log"
# MySQL 8.0 yumrepo
$RsyncCommand "$MirrorDomain"/mysql-repo/yum/mysql-8.0-community/el/7/x86_64/ $Centos7Mysql8_0 >> "$LogDir/centos7Mysql8.0.log" 2>&1
check_rsync_status "$LogDir/centos7Mysql8.0.log"
2.2 准备例外文件清单
#填入例外文件内容
SRPMS
aarch64
ppc64
ppc64le
debug
repodata
EFI
LiveOS
images
isolinux
CentOS_BuildTag
EULA
GPL
RPM-GPG-KEY-CentOS-7
RPM-GPG-KEY-CentOS-Testing-7
drpms
如果你需要过滤指定版本或者文件名,比如mysql,也可以使用下面的方法
mysql-*-8.0.35*
*-5.7.1*
2.3 统计源端大小
反复比对源端目录和需要的目录,调整例外清单,只同步想要的文件
无脑全同步太占用空间不说还有可能被封IP
rsync --exclude-from=/yumsource/exclude.list --info=stats2 -h -r rsync://rsync.mirrors.ustc.edu.cn/repo/docker-ce/linux/centos/7/x86_64/stable
#可选的例外或者 包含
-- exclude '/var/log/*'
--exclude-from=/yumsource/exclude.list
-- include "docker-ce-26*"
-- include "docker-ce-cli-26*"
也可以添加下面的代码先判断大小,询问后,再决定要不要同步
# Epel9 yumrepo
#$RsyncCommand "$MirrorDomain"/epel/7/x86_64/ $Centos7Epel >> "$LogDir/centos7Epel.log" 2>&1
echo "统计大小"
read -p "请按任意键开始同步大小..." -n 1
$RsyncSize "$MirrorDomain"/epel/9/Everything/x86_64/
read -p "请按任意键开始同步..." -n 1
echo "开始同步epel9"
$RsyncCommand "$MirrorDomain"/epel/9/Everything/x86_64/ $Rocky9Epel
check_rsync_status "$LogDir/Rocky9Epel.log"
如需定期同步,可以设置任务计划
2.3 运行脚本开始同步文件
3. 创建网页服务
3.1 安装nginx并启用
yum -y install nginx
systemctl start nginx
systemctl enable nginx
3.2 修改ngnix配置文件
cd /etc/nginx/conf.d
vi yam.conf
#以下是文件代码
server {
listen 80;
server_name 请修改我;
access_log /var/log/yum.log;
、
location / {
root /app/yumData/;
autoindex on; #开启索引功能
autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
autoindex_localtime on;
}
}
#保存退出
nginx -s reload
在浏览器上访问下域名能否打开,如果打开有问题,请确保权限
nginx 所属,或者直接chown -R 755到目录,或者setenforce 0
4 创建repo索引和客户文件
4.1 创建repo索引
同步完成后,进入文件夹,创建repo索引
如果你是全同步可以跳过这一步,但一般都是过滤同步,所以建议重建
#进入目录,使用createrepo
cd /app/yumData/Centos7/x86_64
createrepo Base/
如果有更新可以使用更新参数
createrepo --update Base/
4.2 创建客户端文件
在服务器上编写好这些repo文件,并建议把他们上传到/app/yumData/repolist目录中,以供用户下载
docker
vi docker.repo
[docker7-ce-stable]
name=docker7-ce-stable
baseurl=http://请修改我/Centos7/x86_64/Docker/
gpgcheck=0
enabled=1
base
vi centos7.repo
[base]
name=CentOS7-base
baseurl=http://请修改我/Centos7/x86_64/Base/
gpgcheck=0
enabled=1
[epel]
name=CentOS7-epel
baseurl=http://请修改我/Centos7/x86_64/Base/
gpgcheck=0
enabled=1
[extras]
name=CentOS7-extras
baseurl=http://请修改我/centos/extras/
gpgcheck=0
enabled=1
[updates]
name=CentOS7-updates
baseurl=http://请修改我/centos/updates/
gpgcheck=0
enabled=1
4.3 客户端下载repo文件
使用wget 将ngnix上的.repo文件下载到 /etc/yum.repos.d/
清除yum缓存
yum clean all; yum makecache
列出包内容
yum repolist all
yum list available
安装一个软件测试下
yum -y install tcping
原文地址:https://blog.csdn.net/wangrui1573/article/details/139114026
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!