mirrors.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/bash
  2. set -euo pipefail
  3. CONFIGDIR=/etc/mirrors
  4. CONFIGFILE=${CONFIGDIR}/config
  5. source ${CONFIGFILE}
  6. LOCKFILE=${LOCKDIR}/$(basename ${0}).lock
  7. [[ -f "${LOCKFILE}" ]] && {
  8. echo "Lock file $LOCKFILE found, skipping.."
  9. exit 0
  10. }
  11. #touch ${LOCKFILE}
  12. trap "/bin/rm -f ${LOCKFILE}" EXIT SIGHUP SIGINT SIGTERM
  13. # Show progress if argument is info
  14. # [[ "$1" == "info" ]] && ROPTS="$ROPTS --info=progress2 -h"
  15. for R in "${MIRRORS[@]}" ; do
  16. RR=( ${R//|/ } )
  17. MIRROR=${RR[0]}
  18. EXCLUDEFILE=$CONFIGDIR/${RR[1]}
  19. TARGETDIR=$TARGET/${RR[2]}
  20. [[ -r "${EXCLUDEFILE}" ]] || {
  21. echo "Exclude file ${EXCLUDEFILE} for mirror ${MIRROR} not found"
  22. continue
  23. }
  24. [[ -d "${TARGETDIR}" ]] || {
  25. echo "Creating target dir ${TARGETDIR} for mirror ${MIRROR}"
  26. mkdir -p ${TARGETDIR}
  27. }
  28. [[ -r "${TARGETDIR}" ]] || {
  29. echo "Target dir ${TARGETDIR} for mirror ${MIRROR} not found"
  30. continue
  31. }
  32. if [[ $MIRROR == rsync* ]]; then
  33. rsync ${ROPTS} -f "merge ${EXCLUDEFILE}" ${MIRROR}/ ${TARGETDIR}/
  34. elif [[ $MIRROR == http* ]]; then
  35. EXCLUDE=`cat ${EXCLUDEFILE}`
  36. wget ${WOPTS} -R "'${EXCLUDE//[$'\t\r\n']/,}'" -P ${TARGETDIR} ${MIRROR}
  37. else
  38. echo "Unknown mirror URL: ${MIRROR}"
  39. fi
  40. done
  41. sync
  42. exit 0