企业内网自建yum源 仓库 | rsync同步方案

企业内网自建yum源 仓库 | rsync同步方案

码农世界 2024-05-29 前端 95 次浏览 0个评论

文章目录

      • 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
                

转载请注明来自码农世界,本文标题:《企业内网自建yum源 仓库 | rsync同步方案》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,95人围观)参与讨论

还没有评论,来说两句吧...

Top