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

2024-05-29 1955阅读

文章目录

      • 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 停更后,建议企业在内网自建软自己的软件仓库,一般有下列步骤:

                企业内网自建yum源 仓库 | rsync同步方案
                (图片来源网络,侵删)
                • 取得软件包文件,可以从安装镜像拷贝,本文使用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"
                  Centos7S
                  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
                  
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]