|
@@ -0,0 +1,52 @@
|
|
|
|
|
+#!/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
|