ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

搭建内网Yum源服务器[使用rsync同步更新]

2020-10-18 16:50:26  阅读:176  来源: 互联网

标签:-% rsync log centos +% Yum date 内网


分享一个内网Yum同步脚本,可同时支持Centos6、Centos7(当然调整一下verlist参数也可以支持Centos8),可通过计划任务每天自动同步,经过多次修改完善,目前己稳定运行一年多。

1、rsync.sh脚本

#!/bin/bash

rsync="rsync -avrtH --bwlimit=10240 --delete --delete-delay --delay-updates"

# bakup sources 
# mirror_centos="rsync://mirror.xtom.com.hk/repo/centos"
# mirror_epel="rsync://mirror.xtom.com.hk/repo/epel"
mirror_centos="rsync://mirrors.tuna.tsinghua.edu.cn/centos"
mirror_epel="rsync://mirrors.tuna.tsinghua.edu.cn/epel"

local="/yum-repo/data"
verlist="6 7"
archlist="x86_64"

#only for centos
baselist="os updates extras centosplus"

echo "Start rsync at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
LOCK_FILE="/var/log/yum_repo_rsync.pid"

YUM_REPO_RSYNC_PID=$$
if [ -f $LOCK_FILE ]; then
    get_pid=`/bin/cat $LOCK_FILE`
    get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
    if [ $get_system_pid -eq 0 ]; then
        #thread is gone,but lock file exist
    echo $YUM_REPO_RSYNC_PID>$LOCK_FILE
    else
    #thread exist,need check if thread is hangls
    time_now=`date +%s`
    time_lock=`stat -c %Y $LOCK_FILE`
    if [ $[ $time_now - $time_lock ] -gt 172800 ];then
        #if last task start over two days ,maybe is hang, kill it 
            kill -9 $get_pid
        echo $YUM_REPO_RSYNC_PID>$LOCK_FILE
        else
            echo "Update(rsync) process is running now!" &>> /var/log/rsync_$(date +%Y%m%d).log
            exit 1
    fi
    fi
else
    echo $YUM_REPO_RSYNC_PID>$LOCK_FILE
fi

echo "[1] Start sync centos GPG-KEY at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
mkdir -p $local/centos/
$rsync $mirror_centos/RPM-GPG-KEY-CentOS-6 $local/centos/ &>> /var/log/rsync_$(date +%Y%m%d).log
$rsync $mirror_centos/RPM-GPG-KEY-CentOS-7 $local/centos/ &>> /var/log/rsync_$(date +%Y%m%d).log

echo "[2] Start sync centos repo at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
for ver in $verlist
do
    for arch in $archlist
    do
        for base in $baselist
        do
            remote=$mirror_centos/$ver/$base/$arch/
        localdir=$local/centos/$ver/$base/$arch/
        echo "[3] Start sync [ $remote ]->[ $localdir ] at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
            mkdir -p $localdir
            $rsync $remote $localdir &>> /var/log/rsync_$(date +%Y%m%d).log
        done
    done
done

echo "[4] Start sync centos 7 openstack cloud repo  at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
mkdir -p $local/centos/7/cloud/x86_64/
$rsync $mirror_centos/7/cloud/x86_64/ $local/centos/7/cloud/x86_64/ &>> /var/log/rsync_$(date +%Y%m%d).log

echo "[5] Start sync epel GPG-KEY at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
mkdir -p $local/epel/
$rsync $mirror_epel/RPM-GPG-KEY-EPEL-6 $local/epel/ &>> /var/log/rsync_$(date +%Y%m%d).log
$rsync $mirror_epel/RPM-GPG-KEY-EPEL-7 $local/epel/ &>> /var/log/rsync_$(date +%Y%m%d).log

echo "[6] Start sync epel repo at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
for ver in $verlist
do
    for arch in $archlist
    do
        remote=$mirror_epel/$ver/$arch/
        localdir=$local/epel/$ver/$arch/
        echo "[7] Start sync [ $remote ]->[ $localdir ] at $(date +"%Y-%m-%d %H:%M:%S") ..." &>> /var/log/rsync_$(date +%Y%m%d).log
        mkdir -p $localdir
        $rsync $remote $localdir &>> /var/log/rsync_$(date +%Y%m%d).log
    done
done

#clean lock file
`/bin/rm -rf $LOCK_FILE`

echo "All repo sync end at $(date +"%Y-%m-%d %H:%M:%S") !" &>> /var/log/rsync_$(date +%Y%m%d).log
exit 1
2、计划任务设置,每天1:30开始自动同步
echo " 30  1  *  *  *   root    /yum-repo/rsync.sh" >>/etc/crontab
3、安装nginx(过程略),并修改nginx配置,启用文件目录服务
vi /etc/nginx/conf.d/default.conf

server {
     listen 80;
#     server_name localhost;

     location /
     {
        root /yum-repo/data/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
     }

     location /nginx_status
     {
        stub_status on;
        access_log off;
        allow 192.168.0.0/16;
        deny all;
     }
}
4、在Yum服务器根目录放置内网源配置文件,192.168.0.1为Yum服务器地址,根据实际情况替换。
vi /yum-repo/data/CentOS-Internal.repo

# CentOS-Internal.repo

[base-internal]
name=CentOS-$releasever-internal
baseurl=http://192.168.0.1/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://192.168.0.1/centos/RPM-GPG-KEY-CentOS-$releasever

#released updates
[updates-internal]
name=CentOS-$releasever-internal
baseurl=http://192.168.0.1/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://192.168.0.1/centos/RPM-GPG-KEY-CentOS-$releasever

#additional packages that may be useful
[extras-internal]
name=CentOS-$releasever-internal
baseurl=http://192.168.0.1/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://192.168.0.1/centos/RPM-GPG-KEY-CentOS-$releasever

[epel-internal]
name=CentOS-Epel-$releasever-internal
baseurl=http://192.168.0.1/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=http://192.168.0.1/epel/RPM-GPG-KEY-EPEL-$releasever
5、内网使用
cd /etc/yum.repos.d/
wget http://192.168.0.1/CentOS-Internal.repo
yum repolist

标签:-%,rsync,log,centos,+%,Yum,date,内网
来源: https://blog.51cto.com/dusthunter/2542255

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有