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 |