当前位置: 首页>>技术问答>>正文


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

, , ,

问题描述

我想在全新的Ubuntu服务器安装中使用命令行中速度最快的服务器更新我的sources.list文件。我知道这对GUI来说非常简单,但似乎没有一种简单的方法可以从命令行执行它?

There are two different working answers to this question below:

  1. Use apt-get‘s mirror: method
    This method asks the Ubuntu server for a list of mirrors near you based on your IP, and selects one of them. The easiest alternative, with the minor downside that sometimes the closest mirror may not be the fastest.
  2. Command-line foo using netselect
    Shows you how to use the netselect tool to find the fastest recently updated servers from you — network-wise, not geographically. Use sed to replace mirrors in sources.list.

The other answers, including the accepted answer, are no longer valid (for Ubuntu 11.04 and newer) because they recommended Debian packages such as netselect-apt and apt-spy which do not work with Ubuntu.

使用sed替换sources.list中的镜像

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

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

最佳解决方案

Pakket netselect-apt

    dapper (net): Choose the fastest Debian mirror with netselect 
    [universe]
    0.3.ds1-5: all
    hardy (net): Choose the fastest Debian mirror with netselect 
    [universe]
    0.3.ds1-11: all

Pakket apt-spy

    dapper (admin): writes a sources.list file based on bandwidth tests 
    [universe]
    3.1-14: amd64 i386 powerpc

不包括在较新的Ubuntu中,因为它看起来像种族隔离问题:请参阅:Bug report

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

次佳解决方案

您不必再进行任何搜索 – 因为ajmitch具有explained,您可以使用deb mirror自动为您选择最佳的镜像。

apt-get now supports a ‘mirror’ method that will automatically select a good mirror based on your location. Putting:

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 

on the top in your /etc/apt/sources.list file should be all that is needed to make it automatically pick a mirror for you based on your geographical location.

Lucid (10.04), Maverick (10.10), Natty (11.04), and Oneiric (11.10) users can replace precise with the appropriate name.

第三种解决方案

以下是一种可以始终工作的方式,使用古老的netselect和一些grep魔术:

terminal-addict的“找到最好的服务器”破解!

  • 下载和dpkg -i netselect为您的架构from the Debian website.(它大约125 KB,没有依赖关系)

  • 从你所在的位置找到最快的Ubuntu镜像,或者是up-to-date,或者最多6个小时后面(我会在下面解释它,对不起,它在Markdown中不会很好地分离)sudo 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是每个镜像speed-tested多长时间(默认值是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提取后面的up-to-date或six-hours镜像,以及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的/

    • “ranks”是一个任意度量标准;更低通常更好。

    • 如果您想知道为什么kernel.org Sweden-EU镜像和NZ镜像在加利福尼亚州排名前三位,那么我也是这样;事实是,netselect并不总是选择最合适的URL来显示多个镜像映射到单个IP; 3号也被称为nz.archive.ubuntu.com

第四种方案

这里是我写的Python script,它可以找到TCP延迟最低的镜像。

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

第五种方案

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

第六种方案

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

sudo npm install -g ffum
ffum

请让我知道,如果你觉得它有用或有任何建议(=

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/454.html,未经允许,请勿转载。