Files
oyo/OYO/opt/durapps/oyo/yoyo-getfastmirror/yoyo-getfastmirror
2023-01-27 01:25:45 +08:00

141 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
VERSION="kokomi"
TEST_NETCONNECT_HOST="www.baidu.com"
SOURCES_MIRRORS_FILE="/etc/yoyo-apt/sources_mirrors.list"
MIRRORS_SPEED_FILE="/etc/yoyo-apt/mirrors_speed.list"
SOURCES_MIRRORS_FILE_URL="https://packages.yzzi.icu/sources_mirrors.list"
function get_mirror_list()
{
wget $SOURCES_MIRRORS_FILE_URL --output-document=$SOURCES_MIRRORS_FILE
}
function get_ping_speed() #return average ping $1 time
{
local speed=`ping -W1 -c1 $1 2> /dev/null | grep "^rtt" | cut -d '/' -f5`
echo $speed
}
function test_mirror_speed() #
{
rm $MIRRORS_SPEED_FILE 2> /dev/null; touch $MIRRORS_SPEED_FILE
cat $SOURCES_MIRRORS_FILE | while read mirror
do
if [ "$mirror" != "" ]; then
echo -e "Ping $mirror c"
local mirror_host=`echo $mirror | cut -d '/' -f3` #change mirror_url to host
local speed=$(get_ping_speed $mirror_host)
if [ "$speed" != "" ]; then
echo "Time is $speed"
echo "$mirror $speed" >> $MIRRORS_SPEED_FILE
else
echo "Connected failed."
fi
fi
done
}
function get_fast_mirror()
{
sort -k 2 -n -o $MIRRORS_SPEED_FILE $MIRRORS_SPEED_FILE
local fast_mirror=`head -n 1 $MIRRORS_SPEED_FILE | cut -d ' ' -f1`
echo $fast_mirror
}
function update_sources()
{
local COMP="main"
local mirror="$1"
local tmp=$(mktemp)
echo "deb $mirror $VERSION $COMP" >> $tmp
sudo mv "$tmp" /etc/apt/sources.list.d/yoyo-os.list
echo -e "Your sources has been updated.n";
}
echo -e "nTesting the network connection.nPlease wait... c"
if [ "$(get_ping_speed $TEST_NETCONNECT_HOST)" == "" ]; then
echo -e "Network is bad.nPlease check your network."; exit 1
else
echo -e "Network is good.n"
mkdir -p /etc/yoyo-apt/
get_mirror_list
test -f $SOURCES_MIRRORS_FILE
if [ "$?" != "0" ]; then
echo -e "$SOURCES_MIRRORS_FILE is not exist.n"; exit 2
else
test_mirror_speed
fast_mirror=$(get_fast_mirror)
if [ "$fast_mirror" == "" ]; then
echo -e "Can't find the fastest software sources. Please check your $SOURCES_MIRRORS_FILEn"
exit 0
fi
update_sources $fast_mirror
fi
fi
exit 0