事出有因

有两方面原因做了这个事情:

  • dockerhub 国内无法访问
  • centos 7 要停止社区支持了

结合两个情况,不久的将来,可能国内也就没有对应的 yum 仓库了(现在想找 centos 7 之前的仓库,其实也挺难了);像 docker 和 k8s 的 yum 仓库,谁也不知道以后会发生什么,所以防患于未然,就自己本地同步了一份

因为闲置了一个笔记本,然后就装了 esxi,常开机,自动每天去阿里仓库同步到本地,于是就写了脚本,脚本的运行是有前置条件,需要有 reposynccreaterepo 这两个命令,详细可以看我之前的博客:CentOS7 搭建 yum 源仓库(阿里源)

脚本内容

脚本我也上传了一份到我的 gitee:chen2ha/shell_script,可以去 gitee 自取,包括前端展示用的 html 我也放上去了

#!/usr/bin/env bash
# 获取脚本当前所在路径
base_dir="$(cd `dirname $0`;pwd)"
# 定义 repo 文件的路径
repofile_dir="${base_dir}/repofiles"
# 定义日志的路径
log_dir="${base_dir}/logs"
# 获取当前时间
now_time="$(date +%F)"
# 日志内的时间格式
now_time_hms="%FT%H_%M_%S"
# 定义日志文件名称
log_file="${log_dir}/${now_time}.log"
# 仓库同步的路径
repo_data_dir='/data/nginx'
# 默认的 yum 源 repo 文件的路径
repo_src_dir='/etc/yum.repos.d'

# 定义错误日志内容格式
function error_log () {
  local log_time_style="$(date +${now_time_hms})"
  echo "[ERR] [${log_time_style}] [$@]" >> ${log_file}
}

# 定义标准日志内容格式
function info_log () {
  local log_time_style="$(date +${now_time_hms})"
  echo "[INF] [${log_time_style}] [$@]" >> ${log_file}
}

# createrepo 后的确认检查
function check_status () {
  if [ $? -eq 0 ];then
    info_log "createrepo ${@} success"
  else
    error_log "createrepo ${@} fail"
  fi
}

# 日志目录不存在就创建
[ -d "${log_dir}" ] || mkdir -p "${log_dir}"

# 循环同步 yum 仓库,要和 repofile_dir 的文件名称一样
for reponame in centos docker-ce epel kubernetes
do
  # 删除 repo 文件
  rm -f ${repo_src_dir}/*.repo
  # 复制 repo 文件模板到 repo 文件目录下
  cp ${repofile_dir}/${reponame}.repo ${repo_src_dir}/

  # 如果本地不存在目录,表示第一次同步,创建目录并设置 reposync 的参数是 -p
  if [ ! -d "${repo_data_dir}/${reponame}" ];then
    mkdir ${repo_data_dir}/${reponame}
    reposync_cmd="reposync -p"
  else
    # 如果本地存在目录,表示只需要同步最近的内容,设置 reposync 的参数是 -np
    reposync_cmd="reposync -np"
  fi

  # 开始同步仓库到本地
  ${reposync_cmd} ${repo_data_dir}/${reponame}
  if [ $? -eq 0 ];then
    info_log "sync ${reponame} success"

    # centos 有很多的仓库,这里做了独立的处理
    if [[ "${reponame}"x == "centos"x ]];then
      for repotype in base extras updates
      do
        # 使用 createrepo 来创建元数据索引
        createrepo -p ${repo_data_dir}/${reponame}/${repotype}/Packages/
        check_status "${reponame}/${repotype}"
      done
    fi

    # docker 虽然也有很多,这里只取了稳定版,所以统一处理了
    if [[ "${reponame}"x != "centos"x ]];then
      createrepo -p ${repo_data_dir}/${reponame}/${reponame}/Packages/
      check_status "${reponame}"
    fi
  else
    error_log "sync ${reponame} fail"
  fi
done

# 删除三天前的日志
find ${log_dir} -type f -name "*.log" -mtime +3 | xargs -i rm -f {}

前端展示

html + css 是找 gpt 要的

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐