voidlinux-mirror-speedtest.sh (3124B)
1#!/bin/sh 2 3PKG_PATH="current/glibc-2.32_2.x86_64.xbps" 4SPEED_LIMIT="1048576" 5# https://docs.voidlinux.org/xbps/repositories/mirrors/index.html 6MIRRORLIST="\ 7https://alpha.de.repo.voidlinux.org/ T1 EU: Finland 8https://mirrors.servercentral.com/voidlinux/ T1 USA: Chicago 9https://alpha.us.repo.voidlinux.org/ T1 USA: Kansas City 10https://mirror.ps.kz/voidlinux/ T2 Asia: Almaty, KZ 11https://mirrors.bfsu.edu.cn/voidlinux/ T2 Asia: China 12https://mirrors.cnnic.cn/voidlinux/ T2 Asia: China 13https://mirrors.tuna.tsinghua.edu.cn/voidlinux/ T2 Asia: China 14https://mirror.sjtu.edu.cn/voidlinux/ T2 Asia: China 15https://mirror.maakpain.kro.kr/void/ T2 Asia: Seoul, SK 16https://void.webconverger.org/ T2 Asia: Singapore 17https://mirror.aarnet.edu.au/pub/voidlinux/ T2 AU: Canberra 18https://ftp.swin.edu.au/voidlinux/ T2 AU: Melbourne 19https://void.cijber.net/ T2 EU: Amsterdam, NL 20https://mirror.easylee.nl/voidlinux/ T2 EU: Amsterdam, NL 21http://ftp.dk.xemacs.org/voidlinux/ T2 EU: Denmark 22https://mirrors.dotsrc.org/voidlinux/ T2 EU: Denmark 23https://quantum-mirror.hu/mirrors/pub/voidlinux/ T2 EU: Hungary 24https://voidlinux.qontinuum.space:4443/ T2 EU: Monaco 25http://ftp.debian.ru/mirrors/voidlinux/ T2 EU: Russia 26https://mirror.yandex.ru/mirrors/voidlinux/ T2 EU: Russia 27https://cdimage.debian.org/mirror/voidlinux/ T2 EU: Sweden 28https://ftp.acc.umu.se/mirror/voidlinux/ T2 EU: Sweden 29https://ftp.lysator.liu.se/pub/voidlinux/ T2 EU: Sweden 30https://ftp.sunet.se/mirror/voidlinux/ T2 EU: Sweden 31https://mirror.clarkson.edu/voidlinux/ T2 USA: New York" 32 33show_usage() { 34 : "${progname:="${0##*/}"}" 35 cat <<_EOF | GREP_COLORS='ms=1' egrep --color "$progname|$" 36Usage: $progname show usage info 37 $progname -w [file.csv] save speedtest results to file 38 $progname -r file.csv format speedtest results from file 39 $progname -f file.csv format speedtest results from file and pass to fzf 40 41pkg path: ${PKG_PATH} 42speed limit: $(echo $SPEED_LIMIT | numfmt --to=iec-i --suffix=B/s) 43mirrors for testing: $(echo "$MIRRORLIST" | wc -l) 44_EOF 45} 46 47format_speedtest_results() { 48 cat "$1" | sort -t, -nrk4 | while IFS=, read url info time_appconnect download_speed; do 49 f_time=$(printf "%.2fs" $time_appconnect) 50 f_speed=$(echo $download_speed | numfmt --to=iec-i --suffix=B/s) 51 echo "${url},${info},${f_time},${f_speed}" 52 done | column -s, -t 53} 54 55time_appconnect() { 56 curl --connect-timeout 2 -o/dev/null -sw '%{time_appconnect}' -I $1 57} 58 59download_speed() { 60 curl -Y $SPEED_LIMIT --progress-bar $1 -o/dev/null --write-out "%{speed_download}" 61} 62 63mirror_speedtest() { 64 count=1 65 echo "$MIRRORLIST" | while read -r mirror etc; do 66 pkg_url="${mirror}${PKG_PATH}" 67 info=$(echo $etc | sed 's/,//g') 68 >&2 echo "${count}. $pkg_url" 69 echo "${mirror},${info},$(time_appconnect $pkg_url),$(download_speed $pkg_url)" 70 >&2 echo 71 count=$((count + 1)) 72 done 73} 74 75case $1 in 76 -r) format_speedtest_results $2;; 77 -f) format_speedtest_results $2 | fzf +s;; 78 -w) [ -z $2 ] && { mirror_speedtest; exit 0; } || { mirror_speedtest >"$2"; exit 0; };; 79 *) show_usage;; 80esac 81exit 0