#!/bin/bash RSYNC="rsync -4 --contimeout 5 --no-motd --list-only" # try to choose close ubuntu mirror which support rsync protocol # https://bugs.launchpad.net/fuel/+bug/1459252 # A minor modificiation of Michal Skalski's original Makefile version # to only consider repos where no repo updates are in progress (as # that may have us hanging quite a while otherwise). If no suitable # local mirror can be found after four attempts, the default archive # is returned instead. return_url=0 while [ "$1" != "" ]; do case $1 in -u | --url ) shift return_url=1 ;; # Shift all the parameters down by one esac shift done cnt=0 while [ $cnt -lt 4 ] do for url in $(curl -s http://mirrors.ubuntu.com/mirrors.txt) do host=$(echo $url | cut -d'/' -f3) if $RSYNC "${host}::ubuntu/." &> /dev/null then if ! $RSYNC "${host}::ubuntu/Archive-Update-in-Progress*" &> /dev/null then if [ "$return_url" = "1" ]; then echo "$url" exit 0 else echo "$host" exit 0 fi fi fi done cnt=$[cnt + 1] sleep 15 done if [ "$return_url" = "1" ]; then echo "http://archive.ubuntu.com/ubuntu/" else echo "archive.ubuntu.com" fi