--- /usr/sbin/mirrorselect.old 2004-11-15 09:38:35.000000000 +0000 +++ /usr/sbin/mirrorselect 2004-12-01 16:04:03.116908826 +0000 @@ -11,7 +11,7 @@ # Ned Ludd SERVERS="1" -VERSION="0.87" +VERSION="0.88" CHECK_VHOSTS="$(which host 2> /dev/null)" DIALOG="$(which dialog 2>/dev/null)" @@ -23,6 +23,8 @@ MIRROR_LIST="" +TIMEOUT="25" + print_usage() { echo "Mirrorselect Usage:" echo "options:" @@ -53,6 +55,7 @@ echo " -c : Prevent \$DISPLAY detection, this will force the use" echo " of dialog instead of Xdialog (if available) in Interactive" echo " mode" + echo " -TX : Set network timeout to X seconds (default is 25)" echo " -v : Display Mirrorselect version" echo echo "Automatic Example:" @@ -173,10 +176,11 @@ exit 1 else CHECKLIST="$(echo $MIRROR_LIST | sed -e 's:http\::\n&:g' -e 's:ftp\::\n&:g' | cut -f1 -d">")" - COUNT=$(echo ${CHECKLIST}|wc -w| tr -d ' ') + COUNT=$(($(echo ${CHECKLIST}|wc -w))) echo "Downloading 100k segments from ${COUNT} server(s)" >&2 - TMPFILE="$(mktemp -p /tmp mirrorselect-deep-XXXXXX)" + TMPFILE="$(mktemp -p /tmp mirrorselect-deep-XXXXXX)" || exit 1 + trap "rm -f ${TMPFILE}; exit 1" 0 1 2 15 YCOUNT=0 for i in ${CHECKLIST} @@ -185,21 +189,19 @@ PERCENT=$(((${YCOUNT}*100)/${COUNT})) print_percent "${PERCENT}" "${i}" STIME=$(date +%s%N) - wget -t 1 -C off -T 25 -O /dev/null - ${i}/distfiles/mirrorselect-test 2>/dev/null + wget -t 1 -C off -T ${TIMEOUT} -O /dev/null - ${i}/distfiles/mirrorselect-test 2>/dev/null RESULT=${?} ETIME=$(date +%s%N) [ ${RESULT} == 0 ] && $(echo "$((${ETIME}-${STIME})) ${RESULT} ${i}" >> ${TMPFILE}) done echo "Sorting by speed " >&2 MIRRORS="$(sort -g < ${TMPFILE} | cut -f3- -d" " | head -n ${SERVERS})" - echo "Cleaning temporary files" >&2 - $(rm -Rf ${TMPFILE}) fi } automatic() { local i - local TMPFILE + local TMPDIR local CHECK_TMP local COUNT local CURRENT_INDEX @@ -221,17 +223,18 @@ echo "Splitting into blocks of ${BLOCK}." >&2 echo "Please note that the smaller the block size the longer this takes..." >&2 - TMPFILE="$(mktemp -p /tmp mirrorselect-split-XXXXXX)" - $(echo ${CHECKLIST} | tr ' ' '\n' | sort -u | split -l ${BLOCK} - ${TMPFILE}-) + TMPDIR="$(mktemp -dp /tmp mirrorselect-split-XXXXXX)" || exit 1 + trap "rm -rf ${TMPDIR}; exit 1" 0 1 2 15 + $(echo ${CHECKLIST} | tr ' ' '\n' | sort -u | split -d -l ${BLOCK} - ${TMPDIR}/) CHECKLIST="" - COUNT="$(ls ${TMPFILE}-* | wc -w)" - CURRENT_INDEX=1 + COUNT=$(($(ls ${TMPDIR} | wc -l))) + CURRENT_INDEX=0 - for i in $(ls ${TMPFILE}-* | sed "s: :\n:g") + for i in ${TMPDIR}/* do - CURRENT_INDEX=$((${CURRENT_INDEX}+1)) PERCENT=$(((${CURRENT_INDEX}*100)/${COUNT})) + CURRENT_INDEX=$((${CURRENT_INDEX}+1)) print_percent ${PERCENT} ${i/*\//} @@ -240,8 +243,7 @@ CHECKLIST="${CHECKLIST} ${CHECK_TMP}" done - echo "Cleaning tmp files and preparing to select fastest servers..." >&2 - $(rm -Rf ${TMPFILE}*) + echo "Preparing to select fastest servers..." >&2 fi if [ -z "${CHECKLIST}" ] ; then @@ -320,33 +322,30 @@ # # Request/original patch by Bret Towe # + NEWMAKECONF="$(mktemp -u /etc/make.conf.mirrorselect_XXXXXX)" || exit 1 if [ "$(grep ${PATTERN} /etc/make.conf)" ] ; then - mv /etc/make.conf /etc/make.conf.old - sed "s#^[ \#]*${PATTERN}.*#${PATTERN}\"${MIRRORS}\"#" /etc/make.conf.old > /etc/make.conf + sed "s#^[ \#]*${PATTERN}.*#${PATTERN}\"${MIRRORS}\"#" /etc/make.conf > ${NEWMAKECONF} else - echo "${PATTERN}\"$MIRRORS\"" >> /etc/make.conf + cat /etc/make.conf > ${NEWMAKECONF} + echo >> ${NEWMAKECONF} + echo "${PATTERN}\"$MIRRORS\"" >> ${NEWMAKECONF} fi # # Its very unlikely that this check will ever fail anymore # Although this is being kept in as a safety net. # - if [ "$(grep ${PATTERN} /etc/make.conf)" ] ; then + if [ "$(grep ${PATTERN} ${NEWMAKECONF})" ] ; then echo "Mirrors set successfully" >&2 - if [ -e /etc/make.conf.old ] ; then - rm /etc/make.conf.old - fi + mv ${NEWMAKECONF} /etc/make.conf else echo "Failed updating /etc/make.conf" - if [ -e /etc/make.conf.old ] ; then - mv /etc/make.conf.old /etc/make.conf - echo "Reverting to original" >&2 - fi + exit 1 fi } -while getopts "ais:rovb:Dc" opt +while getopts "ais:rovb:DcT:" opt do case $opt in a ) MODE="auto";; @@ -358,6 +357,7 @@ D ) DEEP="1";; v ) echo "Mirrorselect version: ${VERSION}"; exit 0;; c ) FORCECONSOLE="1";; + T ) TIMEOUT=$OPTARG;; * ) print_usage; exit 1;; esac done