文章目录
- @[toc]
- 事出有因
- 脚本内容
- 前端展示
文章目录
- @[toc]
- 事出有因
- 脚本内容
- 前端展示
事出有因
有两方面原因做了这个事情:
- dockerhub 国内无法访问
- centos 7 要停止社区支持了
结合两个情况,不久的将来,可能国内也就没有对应的 yum 仓库了(现在想找 centos 7 之前的仓库,其实也挺难了);像 docker 和 k8s 的 yum 仓库,谁也不知道以后会发生什么,所以防患于未然,就自己本地同步了一份
因为闲置了一个笔记本,然后就装了 esxi,常开机,自动每天去阿里仓库同步到本地,于是就写了脚本,脚本的运行是有前置条件,需要有
reposync
和createrepo
这两个命令,详细可以看我之前的博客: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 ];theninfo_log "createrepo ${@} success"elseerror_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 的参数是 -pif [ ! -d "${repo_data_dir}/${reponame}" ];thenmkdir ${repo_data_dir}/${reponame}reposync_cmd="reposync -p"else# 如果本地存在目录,表示只需要同步最近的内容,设置 reposync 的参数是 -npreposync_cmd="reposync -np"fi# 开始同步仓库到本地${reposync_cmd} ${repo_data_dir}/${reponame}if [ $? -eq 0 ];theninfo_log "sync ${reponame} success"# centos 有很多的仓库,这里做了独立的处理if [[ "${reponame}"x == "centos"x ]];thenfor repotype in base extras updatesdo# 使用 createrepo 来创建元数据索引createrepo -p ${repo_data_dir}/${reponame}/${repotype}/Packages/check_status "${reponame}/${repotype}"donefi# docker 虽然也有很多,这里只取了稳定版,所以统一处理了if [[ "${reponame}"x != "centos"x ]];thencreaterepo -p ${repo_data_dir}/${reponame}/${reponame}/Packages/check_status "${reponame}"fielseerror_log "sync ${reponame} fail"fi
done# 删除三天前的日志
find ${log_dir} -type f -name "*.log" -mtime +3 | xargs -i rm -f {}
前端展示
html + css 是找 gpt 要的