如何从命令行中选择最快的镜像?

我想在新的Ubuntu Server安装中使用命令行中最快的服务器更新我的sources.list文件。 我知道GUI很简单,但似乎没有一种简单的方法可以从命令行执行此操作?

  Pakket netselect-apt

     dapper(net):用netselect选择最快的Debian镜像 
     [宇宙]
     0.3.ds1-5:全部
     hardy(net):用netselect选择最快的Debian镜像 
     [宇宙]
     0.3.ds1-11:全部
 Pakket apt-spy

     dapper(admin):根据带宽测试写入sources.list文件 
     [宇宙]
     3.1-14:amd64 i386 powerpc

由于存在seseurity问题,未包含在较新的Ubuntu中:请参阅: 错误报告

但是..我通常只使用ping来找出连接到某个位置的速度。 跳数和延迟量。

您不必再进行任何搜索 – 正如ajmitch所解释的那样 ,您可以使用deb mirror自动为您挑选最佳镜像。

apt-get 现在支持 “镜像”方法,该方法将根据您的位置自动选择一个好的镜像。 把:

 deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse 

/etc/apt/sources.list文件的顶部应该是使其根据您的地理位置自动为您选择镜像所需的全部内容。

Lucid(10.04),Maverick(10.10),Natty(11.04)和Oneiric(11.10)用户可以用适当的名称替换precise

这是一种始终有效的方法,使用好的旧netselect和一些grep魔法:

终端成瘾者的“找到最好的服务器”黑客!

  • 从Debian网站下载和dpkg -i netselect为您的架构。 (它大约125 KB,没有依赖项)
  • 从你所在的位置找到最快的Ubuntu镜像,或者最新或者最多落后6个小时(我将在下面解释,抱歉它在Markdown中没有很好地拆分)

      sudo netselect -v -s10 -t20`wget -q -O-http://launchpad.net/ubuntu/+archivemirrors |  grep -P -B8“statusUP | statusSIX”|  grep -o -P“(f | ht)tp:// [^ \”] *“`
    
  • netselect

    1. -v使它有点冗长 – 你想看到进度点和消息告诉你映射到相同IP的不同镜像被合并:)
    2. -sN控制你想要的镜子数量(例如前10个镜子)
    3. -tN是每个镜像速度测试的时间长度(默认值为10;数字越大,所需的时间越长,但结果越可靠。)
  • 这是反引号(不粘贴,只是为了解释)

     wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
     |  grep -P -B8“状态(UP | SIX)” 
     |  grep -o -P“(f | ht)tp:// [^ \”] *“ 
    
    1. wget从https://launchpad.net/ubuntu/+archivemirrors中提取最新的镜像状态。
    2. 第一个grep提取最新或后面六个小时的镜像,以及包含实际ftp / http URL的8行先前上下文
    3. 第二个grep提取这些ftp / http URL
  • 以下是美国加利福尼亚州的示例输出:

     60 ftp://mirrors.se.eu.kernel.org/ubuntu/
     70 http://ubuntu.alex-vichev.info/
     77 http://ftp.citylink.co.nz/ubuntu/
     279 http://ubuntu.mirrors.tds.net/pub/ubuntu/
     294 http://mirror.umd.edu/ubuntu/
     332 http://mirrors.rit.edu/ubuntu/
     364 ftp://pf.archive.ubuntu.com/ubuntu/
     378 http://mirror.csclub.uwaterloo.ca/ubuntu/
     399 ftp://ubuntu.mirror.frontiernet.net/ubuntu/
     455 http://ubuntu.mirror.root.lu/ubuntu/
    
    • “等级”是任意度量; 较低通常更好。
    • 如果你想知道为什么kernel.org瑞典 – 欧盟镜像和新西兰镜子在加利福尼亚排在前三位,那么我也是如此;-)事实上, netselect并不总是选择最合适的URL来显示当多个镜像映射到单个IP时; 3号也被称为nz.archive.ubuntu.com

Oneliner选择最佳(通过下载速度)镜像基于mirrors.ubuntu.com为您的IP。

 curl -s http://mirrors.ubuntu.com/mirrors.txt | xargs -n1 -I {} sh -c 'echo `curl -r 0-102400 -s -w %{speed_download} -o /dev/null {}/ls-lR.gz` {}' |sort -g -r |head -1| awk '{ print $2 }' 

这是我编写的Python脚本 ,它找到了TCP延迟最低的镜像。

该脚本还提供从启动板获取的带宽和状态数据,并将自动生成新的sources.list文件或使用从列表中选择的镜像。

我开发了一个简单的基于ping的nodejs脚本,用于测试在mirrors.ubuntu.com/mirrors.txt上列出的服务器,并返回最快的一个:

 sudo npm install -g ffum ffum 

如果您发现它有用或有任何建议,请告诉我(=

我知道这并没有直接回答OP的问题,但是Ubuntu的桌面/ GUI版本中有一个按钮可以找到最适合你的镜像。 它似乎工作得很好,所以我简要地调查了一下,但没有时间跟进。

我提出它的原因是因为我认为将它变成命令行实用程序非常简单直接。

如果有人有兴趣,测试似乎位于:

 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py 

再说一次,这就是我的意思,但是我想我会把它留在这里以防万一有人想要它。 当我有更多的时间时,我可能会重新选择它。

我使用以下命令自动选择镜像(并禁用deb-src)

 sudo sed -i -e 's%http://archive.ubuntu.com/ubuntu%mirror://mirrors.ubuntu.com/mirrors.txt%' -e 's/^deb-src/#deb-src/' /etc/apt/sources.list 

如果您希望实用程序执行此操作,您可以将此实用程序实现为如下所示的简单bash脚本。 如果要在不需要pip / nodejs的情况下使用该实用程序,这可能很有用。

 #!/bin/bash if [ -z "$1" ] then echo Usage: sudo $0 http://mirrors.ubuntu.com/mirrors.txt echo OR consider one of... for mirror in `wget http://mirrors.ubuntu.com/mirrors.txt -O - 2> /dev/null` do ( host=`echo $mirror |sed s,.*//,,|sed s,/.*,,` echo -e `ping $host -c1 | grep time=|sed s,.*time=,,`:' \t\t'$mirror ) & done wait exit 1 fi OLD_SOURCE=`cat /etc/apt/sources.list | grep ^deb\ | head -n1 | cut -d\ -f2` [ -e /etc/apt/sources.list.orig ] || cp /etc/apt/sources.list /etc/apt/sources.list.orig cp /etc/apt/sources.list /etc/apt/sources.list.tmp sed "s,$OLD_SOURCE,$1," < /etc/apt/sources.list.tmp > /etc/apt/sources.list 

其他答案,包括已接受的答案,不再有效(对于Ubuntu 11.04及更新版本),因为他们推荐使用Debian软件包,例如netselect-aptapt-spy ,它们不能与Ubuntu一起使用。

下面这个问题有两个不同的工作答案:

  1. 使用apt-getmirror:方法

    此方法根据您的IP要求Ubuntu服务器提供您附近的镜像列表,并选择其中一个。 最简单的替代方案,有一个小的缺点,有时最近的镜子可能不是最快的。

  2. 命令行foo使用netselect
    向您展示如何使用netselect工具查找最近最快更新的服务器 – 网络方面,而不是地理位置。 使用sed替换sources.list镜像。

使用sed替换sources.list镜像

由于某些源使用附加文件夹作为其路径的一部分,因此使用备用分隔符语法可能更好。

 sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list 

获得最快镜像的最简单有效的方法是使用apt mirror:// source,参见

https://mvogt.wordpress.com/2011/03/21/the-apt-mirror-method/

好的终端程序在这里:

 # apt-get install netselect-apt Available Options stable|testing|unstable|experimental|woody|sarge|etch|sid Specify which distribution of Debian to use. By default stable is used. -s, --sources While generating OUTFILE include also deb-src lines to use with ''apt-get source'' to obtain Debian source packages. -i, --infile INFILE Use INFILE instead of mirrors_full for reading mirror list. The file must be in the same format as mirrors_full. -o, --outfile OUTFILE Use OUTFILE instead of sources.list. -n, --nonfree Include also non-free section while generating OUTFILE. -f, --ftp Use FTP mirrors instead of HTTP and generate OUTFILE accordingly. Examples If you want non-free repos use the following command # netselect-apt -n