slitaz5cn/packages/fast-mirrors.sh

72 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
#自动检测最快软件源脚本
VERSION="5.0"
TEST_NETCONNECT_HOST="www.baidu.com"
SOURCES_MIRRORS_FILE="mirrors.list"
MIRRORS_SPEED_FILE="/tmp/mirrors_speed.list"
function get_ping_speed()
{
local speed=`ping -W1 -c1 $1 2> /dev/null | grep "^rou" | 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 检测中"
local mirror_host=`echo $mirror | cut -d '/' -f3` #change mirror_url to host
local speed=$(get_ping_speed $mirror_host)
if [ "$speed" != "" ]; then
echo "测速时间是 $speed"
echo "$mirror $speed" >> $MIRRORS_SPEED_FILE
else
echo "链接失败."
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 backup_sources()
{
echo -e "备份了你的旧列表.\n"
sudo mv /var/lib/tazpkg/mirror /var/lib/tazpkg/mirror.`date +%F-%R:%S`
}
function update_sources()
{
local mirror="$1"
local tmp=$(mktemp)
echo "$mirror/packages/$VERSION" >> $tmp
sudo cp "$tmp" /var/lib/tazpkg/mirror
sudo mv "$tmp" /tmp/rootfs/var/lib/tazpkg/mirror
echo -e "你的最快软件源已经update.\n";
}
echo -e "\n检测中 network connection.\n请稍候... c"
if [ "$(get_ping_speed $TEST_NETCONNECT_HOST)" == "" ]; then
echo -e "网络不通.\n请检查你的网络."; exit 1
else
echo -e "网络是连通的.\n"
test -f $SOURCES_MIRRORS_FILE
if [ "$?" != "0" ]; then
echo -e "$SOURCES_MIRRORS_FILE 不存在.\n"; exit 2
else
test_mirror_speed
fast_mirror=$(get_fast_mirror)
if [ "$fast_mirror" == "" ]; then
echo -e "无法找到联通的网站数据源,请检查你的列表 $SOURCES_MIRRORS_FILE\n"
exit 0
fi
echo -e "\n$最快的软件源网站已经自动选择,关闭本窗口. c"
backup_sources
update_sources $fast_mirror
sudo tazpkg recharge
fi
fi
exit 0