Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 73545
Collapse All | Expand All

(-)/usr/sbin/mirrorselect.old (-27 / +27 lines)
Lines 11-17 Link Here
11
# Ned Ludd <solar@gentoo.org>
11
# Ned Ludd <solar@gentoo.org>
12
12
13
SERVERS="1"
13
SERVERS="1"
14
VERSION="0.87"
14
VERSION="0.88"
15
15
16
CHECK_VHOSTS="$(which host 2> /dev/null)"
16
CHECK_VHOSTS="$(which host 2> /dev/null)"
17
DIALOG="$(which dialog 2>/dev/null)"
17
DIALOG="$(which dialog 2>/dev/null)"
Lines 23-28 Link Here
23
23
24
MIRROR_LIST=""
24
MIRROR_LIST=""
25
25
26
TIMEOUT="25"
27
26
print_usage() {
28
print_usage() {
27
	echo "Mirrorselect Usage:"
29
	echo "Mirrorselect Usage:"
28
	echo "options:"
30
	echo "options:"
Lines 53-58 Link Here
53
	echo "	-c	: Prevent \$DISPLAY detection, this will force the use"
55
	echo "	-c	: Prevent \$DISPLAY detection, this will force the use"
54
	echo "		  of dialog instead of Xdialog (if available) in Interactive"
56
	echo "		  of dialog instead of Xdialog (if available) in Interactive"
55
	echo "		  mode"
57
	echo "		  mode"
58
	echo "	-TX	: Set network timeout to X seconds (default is 25)"
56
	echo "	-v	: Display Mirrorselect version"
59
	echo "	-v	: Display Mirrorselect version"
57
	echo
60
	echo
58
	echo "Automatic Example:"
61
	echo "Automatic Example:"
Lines 173-182 Link Here
173
		exit 1
176
		exit 1
174
	else
177
	else
175
		CHECKLIST="$(echo $MIRROR_LIST | sed -e 's:http\::\n&:g' -e 's:ftp\::\n&:g' | cut -f1 -d">")"
178
		CHECKLIST="$(echo $MIRROR_LIST | sed -e 's:http\::\n&:g' -e 's:ftp\::\n&:g' | cut -f1 -d">")"
176
		COUNT=$(echo ${CHECKLIST}|wc -w| tr -d ' ')
179
		COUNT=$(($(echo ${CHECKLIST}|wc -w)))
177
		
180
		
178
		echo "Downloading 100k segments from ${COUNT} server(s)" >&2
181
		echo "Downloading 100k segments from ${COUNT} server(s)" >&2
179
		TMPFILE="$(mktemp -p /tmp mirrorselect-deep-XXXXXX)"
182
		TMPFILE="$(mktemp -p /tmp mirrorselect-deep-XXXXXX)" || exit 1
183
		trap "rm -f ${TMPFILE}; exit 1" 0 1 2 15
180
		
184
		
181
		YCOUNT=0
185
		YCOUNT=0
182
		for i in ${CHECKLIST}
186
		for i in ${CHECKLIST}
Lines 185-205 Link Here
185
			PERCENT=$(((${YCOUNT}*100)/${COUNT}))
189
			PERCENT=$(((${YCOUNT}*100)/${COUNT}))
186
			print_percent "${PERCENT}" "${i}"
190
			print_percent "${PERCENT}" "${i}"
187
			STIME=$(date +%s%N)
191
			STIME=$(date +%s%N)
188
			wget -t 1 -C off -T 25 -O /dev/null - ${i}/distfiles/mirrorselect-test 2>/dev/null
192
			wget -t 1 -C off -T ${TIMEOUT} -O /dev/null - ${i}/distfiles/mirrorselect-test 2>/dev/null
189
			RESULT=${?}
193
			RESULT=${?}
190
			ETIME=$(date +%s%N)
194
			ETIME=$(date +%s%N)
191
			[ ${RESULT} == 0 ] && $(echo "$((${ETIME}-${STIME})) ${RESULT} ${i}" >> ${TMPFILE})
195
			[ ${RESULT} == 0 ] && $(echo "$((${ETIME}-${STIME})) ${RESULT} ${i}" >> ${TMPFILE})
192
		done
196
		done
193
		echo "Sorting by speed                                                                " >&2
197
		echo "Sorting by speed                                                                " >&2
194
		MIRRORS="$(sort -g < ${TMPFILE} | cut -f3- -d" " | head -n ${SERVERS})"
198
		MIRRORS="$(sort -g < ${TMPFILE} | cut -f3- -d" " | head -n ${SERVERS})"
195
		echo "Cleaning temporary files" >&2
196
		$(rm -Rf ${TMPFILE})
197
	fi
199
	fi
198
}
200
}
199
201
200
automatic() {
202
automatic() {
201
	local i
203
	local i
202
	local TMPFILE
204
	local TMPDIR
203
	local CHECK_TMP
205
	local CHECK_TMP
204
	local COUNT
206
	local COUNT
205
	local CURRENT_INDEX
207
	local CURRENT_INDEX
Lines 221-237 Link Here
221
			echo "Splitting into blocks of ${BLOCK}." >&2
223
			echo "Splitting into blocks of ${BLOCK}." >&2
222
			echo "Please note that the smaller the block size the longer this takes..." >&2
224
			echo "Please note that the smaller the block size the longer this takes..." >&2
223
			
225
			
224
			TMPFILE="$(mktemp -p /tmp mirrorselect-split-XXXXXX)"
226
			TMPDIR="$(mktemp -dp /tmp mirrorselect-split-XXXXXX)" || exit 1
225
			$(echo ${CHECKLIST} | tr ' ' '\n' | sort -u | split -l ${BLOCK} - ${TMPFILE}-)
227
			trap "rm -rf ${TMPDIR}; exit 1" 0 1 2 15
228
			$(echo ${CHECKLIST} | tr ' ' '\n' | sort -u | split -d -l ${BLOCK} - ${TMPDIR}/)
226
			CHECKLIST=""
229
			CHECKLIST=""
227
			
230
			
228
			COUNT="$(ls ${TMPFILE}-* | wc -w)"
231
			COUNT=$(($(ls ${TMPDIR} | wc -l)))
229
			CURRENT_INDEX=1
232
			CURRENT_INDEX=0
230
			
233
			
231
			for i in $(ls ${TMPFILE}-* | sed "s: :\n:g")
234
			for i in ${TMPDIR}/*
232
			do
235
			do
233
				CURRENT_INDEX=$((${CURRENT_INDEX}+1))
234
				PERCENT=$(((${CURRENT_INDEX}*100)/${COUNT}))
236
				PERCENT=$(((${CURRENT_INDEX}*100)/${COUNT}))
237
				CURRENT_INDEX=$((${CURRENT_INDEX}+1))
235
				
238
				
236
				print_percent ${PERCENT} ${i/*\//}
239
				print_percent ${PERCENT} ${i/*\//}
237
				
240
				
Lines 240-247 Link Here
240
				CHECKLIST="${CHECKLIST} ${CHECK_TMP}"
243
				CHECKLIST="${CHECKLIST} ${CHECK_TMP}"
241
			done
244
			done
242
			
245
			
243
			echo "Cleaning tmp files and preparing to select fastest servers..." >&2
246
			echo "Preparing to select fastest servers..." >&2
244
			$(rm -Rf ${TMPFILE}*)
245
		fi
247
		fi
246
248
247
		if [ -z "${CHECKLIST}" ] ; then
249
		if [ -z "${CHECKLIST}" ] ; then
Lines 320-352 Link Here
320
	#
322
	#
321
	# Request/original patch by Bret Towe <btowe@gbis.com>
323
	# Request/original patch by Bret Towe <btowe@gbis.com>
322
	#
324
	#
325
	NEWMAKECONF="$(mktemp -u /etc/make.conf.mirrorselect_XXXXXX)" || exit 1
323
    	if [ "$(grep ${PATTERN} /etc/make.conf)" ] ; then
326
    	if [ "$(grep ${PATTERN} /etc/make.conf)" ] ; then
324
		mv /etc/make.conf /etc/make.conf.old 
327
		sed "s#^[ \#]*${PATTERN}.*#${PATTERN}\"${MIRRORS}\"#" /etc/make.conf > ${NEWMAKECONF}
325
		sed "s#^[ \#]*${PATTERN}.*#${PATTERN}\"${MIRRORS}\"#" /etc/make.conf.old > /etc/make.conf
326
	else
328
	else
327
		echo "${PATTERN}\"$MIRRORS\"" >> /etc/make.conf
329
		cat /etc/make.conf > ${NEWMAKECONF}
330
		echo >> ${NEWMAKECONF}
331
		echo "${PATTERN}\"$MIRRORS\"" >> ${NEWMAKECONF}
328
	fi
332
	fi
329
333
330
	#
334
	#
331
	#	Its very unlikely that this check will ever fail anymore
335
	#	Its very unlikely that this check will ever fail anymore
332
	#	Although this is being kept in as a safety net.
336
	#	Although this is being kept in as a safety net.
333
	#
337
	#
334
	if [ "$(grep ${PATTERN} /etc/make.conf)" ] ; then 
338
	if [ "$(grep ${PATTERN} ${NEWMAKECONF})" ] ; then 
335
		echo "Mirrors set successfully" >&2
339
		echo "Mirrors set successfully" >&2
336
		if [ -e /etc/make.conf.old ] ; then
340
		mv ${NEWMAKECONF} /etc/make.conf
337
			rm /etc/make.conf.old
338
		fi
339
	else
341
	else
340
		echo "Failed updating /etc/make.conf"
342
		echo "Failed updating /etc/make.conf"
341
		if [ -e /etc/make.conf.old ] ; then
343
		exit 1
342
			mv /etc/make.conf.old /etc/make.conf
343
			echo "Reverting to original" >&2
344
		fi
345
	fi    
344
	fi    
346
}
345
}
347
346
348
347
349
while getopts "ais:rovb:Dc" opt
348
while getopts "ais:rovb:DcT:" opt
350
do
349
do
351
  case $opt in
350
  case $opt in
352
    a     ) MODE="auto";;
351
    a     ) MODE="auto";;
Lines 358-363 Link Here
358
    D     ) DEEP="1";;
357
    D     ) DEEP="1";;
359
    v     ) echo "Mirrorselect version: ${VERSION}"; exit 0;;
358
    v     ) echo "Mirrorselect version: ${VERSION}"; exit 0;;
360
    c	  ) FORCECONSOLE="1";;
359
    c	  ) FORCECONSOLE="1";;
360
    T	  ) TIMEOUT=$OPTARG;;
361
    *     ) print_usage; exit 1;;
361
    *     ) print_usage; exit 1;;
362
  esac
362
  esac
363
done
363
done

Return to bug 73545