#!/bin/bash set -euo pipefail CONFIGDIR=/etc/mirrors CONFIGFILE=${CONFIGDIR}/config source ${CONFIGFILE} LOCKFILE=${LOCKDIR}/$(basename ${0}).lock [[ -f "${LOCKFILE}" ]] && { echo "Lock file $LOCKFILE found, skipping.." exit 0 } #touch ${LOCKFILE} trap "/bin/rm -f ${LOCKFILE}" EXIT SIGHUP SIGINT SIGTERM # Show progress if argument is info # [[ "$1" == "info" ]] && ROPTS="$ROPTS --info=progress2 -h" for R in "${MIRRORS[@]}" ; do RR=( ${R//|/ } ) MIRROR=${RR[0]} EXCLUDEFILE=$CONFIGDIR/${RR[1]} TARGETDIR=$TARGET/${RR[2]} [[ -r "${EXCLUDEFILE}" ]] || { echo "Exclude file ${EXCLUDEFILE} for mirror ${MIRROR} not found" continue } [[ -d "${TARGETDIR}" ]] || { echo "Creating target dir ${TARGETDIR} for mirror ${MIRROR}" mkdir -p ${TARGETDIR} } [[ -r "${TARGETDIR}" ]] || { echo "Target dir ${TARGETDIR} for mirror ${MIRROR} not found" continue } if [[ $MIRROR == rsync* ]]; then rsync ${ROPTS} -f "merge ${EXCLUDEFILE}" ${MIRROR}/ ${TARGETDIR}/ elif [[ $MIRROR == http* ]]; then EXCLUDE=`cat ${EXCLUDEFILE}` wget ${WOPTS} -R "'${EXCLUDE//[$'\t\r\n']/,}'" -P ${TARGETDIR} ${MIRROR} else echo "Unknown mirror URL: ${MIRROR}" fi done sync exit 0