自学内容网 自学内容网

企业内网自建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)!