文章目录
- 1.背景概述
- 2.获取软件文件
- 2.1 准备同步脚本如下
- 2.2 准备例外文件清单
- 2.3 统计源端大小
- 2.3 运行脚本开始同步文件
- 3. 创建网页服务
- 3.1 安装nginx并启用
- 3.2 修改ngnix配置文件
- 4 创建repo索引和客户文件
- 4.1 创建repo索引
- 4.2 创建客户端文件
- 4.3 客户端下载repo文件
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
还没有评论,来说两句吧...