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


137

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


3
在正则表达式中,。字符表示任何字符。如果您希望它与。匹配,则需要用\对其进行转义,因此us.archive [..]应该是us \ .archive [..]
Egil


2
就我而言,我必须#用斜杠(/)代替标牌。否则我会得到sed: -e expression #1, char 53: unterminated 命令。
伊桑·莱罗伊

@EthanLeroy与Ubuntu 12.04.3相同-在2014
注销

应该斜线而不是哈希。
Matt H

Answers:


22
包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

由于安全性问题,似乎未包含在较新的Ubuntu中:请参阅:错误报告

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


4
netselect-apt在Ubuntu 12.04中似乎不可用
offby1 2013年


8
这不是最受好评的,也不是最佳答案,请检查下一个
ntg 2015年

哪个答案是“下一个”可能已更改。
gmatht

apt-spy在debian 9上消失了,但是netselect-apt没问题
netawater

147

您不再需要进行任何搜索-正如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为适当的名称。


大提示。请注意,进行更改后,您需要先运行sudo apt-get update才能apt-get install使用最近的镜像。
西蒙东


23
不错的提示,但对我而言无济于事。它可以在地理位置上工作,从而为我提供了本地服务器,这比我所在的位置慢很多。在这里,网络时间距离是重要的因素,而不是空间距离。
jarondl


1
@marathon至少固定在18.04+
Pablo

49

这是永远有效的一种方法,它使用了古老netselect而又grep神奇的方法:

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

  • 从Debian网站下载并dpkg -i netselect为您的体系结构(大约125 KB,无依赖项)
  • 使用此工具从您所在的位置查找最快的Ubuntu镜像,无论是最新的镜像还是最多延迟六个小时的镜像(我将在下面进行解释,对不起,它在Markdown中无法很好地分解)

    须藤netselect -v -s10 -t20`wget -q -O- https://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“ status(UP | SIX)”
    | grep -o -P“(f | ht)tp:// [^ \”] *“
    
    1. wgethttps://launchpad.net/ubuntu/+archivemirrors中获取最新的镜像状态。
    2. 第一个grep提取最新的镜像或落后六个小时的镜像,以及先前上下文的8行,其中包括实际的ftp / http URL
    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瑞典-EU镜像和NZ镜像在加利福尼亚排名前三,那么我也是;-)事实是,netselect并非总是选择最合适的URL来显示多个镜像映射到单个IP;3号也被称为nz.archive.ubuntu.com

9
netselect选择具有低udp或icmp延迟的镜像。它不一定选择可以提供更多带宽的镜像。
东武

@pix我批准了您的编辑,但不是命令替换会导致换行符被替换。后来的字段拆分删除了换行符。命令替换仅删除尾随的换行符。
muru

25

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  }'

2
要有更多选项,请最后替换: sort -gr | head -3
Pablo A

1
当前, curl -s http://mirrors.ubuntu.com/mirrors.txt仅返回一行:http://archive.ubuntu.com/ubuntu/这违背了在几行中进行选择的目的。: - /
斯特凡纳·古里科

是的,所以此方法为NG。
netawater

我发现curl此答案的部分很有帮助,因为curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gz[server_url]中列出的基本镜像URL在哪里mirrors.txt,它可以比较镜像中索引文件的前100K。
jamesc

这将测试传输速度,这绝对是对netselect的改进。从每台服务器仅下载10k,但这可能不能很好地表示更快连接时稳定的传输速度。增加102400以进行更大的下载进行测试
Phil

17

这是我编写的Python脚本,该脚本查找具有最低TCP延迟的镜像。

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

一个使用示例,使您可以从5个美国镜像中选择对机器的延迟最少的镜像:

$ apt-select --country US -t 5 --choose

5
我想告诉您,我已经用您的脚本制作了一个debian软件包,准备以非常简单直接的方式使用它:github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto

这是一个完美的解决方案,因为我尝试了其他方法。为了使菜鸟友好,我写了一篇详细介绍此方法的文章: blog.kmonsoor.com/…– kmonsoor
2016年

这很棒,因为netselect在较新版本的Ubuntu中不可用
Tek

请在您的帖子中显示如何使用它
乔纳森(Jonathan),

@乔纳森完成了。完整用法README在第一个链接中。
John B

5

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

sudo npm install -g ffum
ffum

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


ffum不起作用:连接错误。
詹姆斯·傅

它不起作用:空输出。
JuanSimón13年

git clone回购和运行node ffum
Michael

太好了,为我工作!我有一个错误,它正在寻找节点而不是nodejs ...对每个经过测试的存档速度都有一些冗长的描述也很酷。
tweak2

4

我知道这并不能直接回答OP的问题,但是Ubuntu /台式机/ GUI版本中有一个按钮可以为您找到最佳镜像。它似乎运行得很好,所以我简要地研究了一下,但是没有时间跟进。

之所以提出它,是因为我认为将其制作为命令行实用程序非常简单并且可以使用。

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

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

再说一次,就我所知,但我想我会把它留在这里,以防有人要。等我多一点时间后,我可能会再考虑一下。


在18.04上,此脚本检测何时从终端将其作为应用程序(作为main)调用。...并将其结果打印到终端。确保给它足够的时间来完成。$ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg

遗憾的是,它无法正常工作。该脚本采用5个ping最低的服务器,然后通过下载〜1M文件(来自dist的main中的Packages.gz)按带宽对它们进行评分。如果您修改脚本以将其增加到25个服务器并下载500M文件,则会得到完全不同的结果,这次是正确的。
Jocelyn

2

查找快速镜像的命令

Ubuntu 18.04上,我通过运行获得了不错的结果

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

它将打印按“时间”(未说明)组织的镜像列表,然后我使用排名最高的镜像之一。

更多细节

对我来说,测试该命令输出的一些顶级结果很有用,方法是将它们设置为我的镜像/etc/apt/sources.list,然后执行

time sudo apt update

查看从该镜像下载软件包列表花费了多长时间。我测试了前三个建议,它们都很快速,但是其中一个是time sudo apt update测试中其他两个的两倍。

这是来自的示例输出python /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

mirror: es-mirrors.evowise.com - time: 0.183778047562
mirror: it-mirrors.evowise.com - time: 0.18604683876
mirror: la-mirrors.evowise.com - time: 0.192630052567
mirror: ny-mirrors.evowise.com - time: 0.208723068237
mirror: mirrors.accretive-networks.net - time: 0.385910987854
mirror: mirror.team-cymru.org - time: 0.46785402298
mirror: mirrors.psu.ac.th - time: 1.64231991768
and the winner is: es-mirrors.evowise.com

1
遗憾的是,它无法正常工作。该脚本采用5个ping最低的服务器,然后通过下载〜1M文件(来自dist的main中的Packages.gz)按带宽对它们进行评分。如果您修改脚本以将其增加到25个服务器并下载500M文件,则会得到完全不同的结果,这次是正确的。
乔斯林

1

对于命令行,您可以使用称为apt-smart的Python工具

一个使用示例,让您列出您所在国家/地区中排名最高的镜像(自动检测):

$ apt-smart -l

使用-l--list-mirrors,您将获得(来自Travis CI US服务器的示例输出):

---------------------------------------------------------------------------------------------------------
| Rank | Mirror URL                            | Available? | Updating? | Last updated    | Bandwidth   |
---------------------------------------------------------------------------------------------------------
|    1 | http://mirrors.gigenet.com/ubuntua... | Yes        | No        | Up to date      | 1.73 MB/s   |
|    2 | http://mirror.genesisadaptive.com/... | Yes        | No        | Up to date      | 1.68 MB/s   |
|    3 | http://ubuntu.mirrors.tds.net/pub/... | Yes        | No        | Up to date      | 1.4 MB/s    |
|    4 | http://repos.forethought.net/ubuntu   | Yes        | No        | Up to date      | 1.35 MB/s   |
|    5 | http://repo.miserver.it.umich.edu/... | Yes        | No        | Up to date      | 937.62 KB/s |
...
|   75 | http://mirror.cc.vt.edu/pub2/ubuntu   | Yes        | No        | 1 day behind    | 659.67 KB/s |
|   76 | http://mirror.atlantic.net/ubuntu     | Yes        | No        | 2 days behind   | 351.26 KB/s |
|   77 | http://mirror.lstn.net/ubuntu         | Yes        | No        | 4 days behind   | 806.81 KB/s |
|   78 | http://mirrors.usinternet.com/ubun... | Yes        | No        | 4 weeks behind  | 514.31 KB/s |
|   79 | http://mirrors.arpnetworks.com/Ubuntu | Yes        | No        | 19 weeks behind | 418.94 KB/s |
|   80 | http://mirrors.ocf.berkeley.edu/ub... | Yes        | Yes       | Up to date      | 446.07 KB/s |
---------------------------------------------------------------------------------------------------------
Full URLs which are too long to be shown in above table:
1: http://mirrors.gigenet.com/ubuntuarchive
2: http://mirror.genesisadaptive.com/ubuntu
3: http://ubuntu.mirrors.tds.net/pub/ubuntu
5: http://repo.miserver.it.umich.edu/ubuntu
...
78: http://mirrors.usinternet.com/ubuntu/archive
80: http://mirrors.ocf.berkeley.edu/ubuntu

当然,apt-smart如果您要执行以下操作,也可以更改您的sources.list:

$ apt-smart -a

使用-a--auto-change-mirror查找可用的镜像,请按连接速度对镜像进行排名并更新状态,并更新/etc/apt/sources.list以使用最佳的可用镜像。

使用-c--change-mirror MIRROR_URL更新/etc/apt/sources.list以使用给定的MIRROR_URL。

与其他工具相比:

  • apt-smart 会自动找到您的位置,因此您出国旅行时无需指定国家/地区。
  • apt-smart从每个镜像真正下载HTTP以获得更准确的结果(带宽和状态),并支持HTTP代理,而不是使用ping和依赖Launchpad的不准确数据。
  • apt-smart 正在维护,而大多数其他工具则使问题长期困扰。

您可以轻松地apt-smart通过安装pip,有关复制粘贴安装命令和用法的详细信息,请参阅Project Readme


0

我使用以下内容自动选择镜像(并禁用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

0

如果您希望某个实用程序执行此操作,则可以将此类实用程序实现为简单的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

0

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

以下是此问题的两个不同的工作答案:

  1. 使用apt-getmirror:方法

    该方法根据您的IP向Ubuntu服务器询问您附近的镜像列表,然后选择其中一个。最简单的选择,但缺点是有时最近的镜像可能不是最快的镜像。

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

使用sed来代替镜子sources.list

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.