I want to update my
sources.list file with the fastest server from the command line in a fresh Ubuntu Server install. I know this is trivially easy with the GUI, but there doesn't seem to be a simple way to do it from from the command line?
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
Not included in newer Ubuntu due to secturity issues it seems: see: Bug report
But .. I normally just use ping to find out the speed of a connection to some location. Amount of hops and latency.
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.listfile 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
precisewith the appropriate name.
Here's one way that will always work, using good old
netselect and some
The terminal-addict's "find best server" hack!
- Download and
netselectfor your architecture from the Debian website. (it's about 125 KB, no dependencies)
Find the fastest Ubuntu mirrors from your location, either up-to-date or at most six hours behind with this (I'll explain it below, sorry it doesn't split up nicely in 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://[^\"]*"`
-vmakes it a little verbose -- you want to see progress dots and messages telling you different mirrors mapping to the same IP were merged :)
-sNcontrols how many mirrors you want at the end (e.g. top 10 mirrors)
-tNis how long each mirror is speed-tested (default is 10; the higher the number, the longer it takes but the more reliable the results.)
This is the backquotes stuff (don't paste, just for explanation)
wget -q -O- https://launchpad.net/ubuntu/+archivemirrors | grep -P -B8 "status(UP|SIX)" | grep -o -P "(f|ht)tp://[^\"]*"
wgetpulls the latest mirror status from https://launchpad.net/ubuntu/+archivemirrors.
- The first
grepextracts mirrors that are up-to-date or six-hours behind, along with 8 lines of previous context which includes the actual ftp/http URLs
- The second
grepextracts these ftp/http URLs
Here's a sample output from California, USA:
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/
- The "ranks" are an arbitrary metric; lower is usually better.
- If you're wondering why the kernel.org Sweden-EU mirror and an NZ mirror are in the top three from California, well, so am I ;-) The truth is that
netselectdoesn't always choose the most appropriate URL to display when multiple mirrors map to a single IP; number 3 is also known as
Here is a Python script I wrote that finds mirrors with the lowest TCP latency.
The script also provides bandwidth and status data taken from launchpad, and will generate a new
sources.list file automatically or using a mirror chosen from a list.
A usage example that lets you choose from 5 US mirrors with the lowest latency to your machine:
$ apt-select --country US -t 5 --choose
I know this doesn't directly answer the OP's question, but there's a button in the desktop/GUI version of Ubuntu that finds the best mirror for you. It seemed to work pretty well, so I looked into it briefly, but didn't have time to follow up.
The reason I bring it up is because I think it would be pretty straight forward and usable to make it into a command line utility.
If anyone is interested, the test seems to be located in:
Again, that's about as far as I got, but I figured I'd leave this here in case anyone wanted it. I'll probably pick back up on it when I have a little more time.
For the command line, you can use a Python tool called apt-smart
A usage example that lets you list ranked mirrors within your country (automatically detect):
$ apt-smart -l
--list-mirrors, you will get ( example output from Travis CI U.S. server ):
--------------------------------------------------------------------------------------------------------- | 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 can also change your sources.list if you want to:
$ apt-smart -a
-a , or
--auto-change-mirror to discover available mirrors, rank the mirrors by connection speed and update status and update /etc/apt/sources.list to use the best available mirror.
-c , or
--change-mirror MIRROR_URL to update /etc/apt/sources.list to use the given MIRROR_URL.
Compared with other tools:
apt-smartautomatically finds where you are so you don't need to specify the country when you travel abroad.
apt-smartdoes real HTTP download from each mirror to get more accurate results ( bandwidth & status ) and supports HTTP proxy, rather than using
pingand relying on launchpad 's inaccurate data.
apt-smartis being maintained, whereas most other tools leave issues unfix for a long time.
You can easily install
pip, for detailed copy'n'paste install commands and usages please see Project Readme.
Command That Finds Fast Mirrors
On Ubuntu 18.04 I got good results by running
That prints a list of mirrors organized by "time" (not explained), and then I used one of the mirrors it ranked highest.
For me, it was useful to test a few of the top results output by that command by setting them as my mirror in
/etc/apt/sources.list and then doing
time sudo apt update
to see how long it took to download the package list from that mirror. I tested the top three suggestions and they were all fast, but one of them was twice as fast as the other two in the
time sudo apt update test.
Here's an example output from
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
The easiest and efficient way to get the fastest mirror is to use the apt
mirror:// source, see
If you want a utility to do this you could implement such a utility as a simple bash script like the following. This might be useful if you want to use the utility without needing 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
The other answers, including the accepted answer, are no longer valid (for Ubuntu 11.04 and newer) because they recommended Debian packages such as
apt-spy which do not work with Ubuntu.
There are two different working answers to this question below:
- Use apt-get's
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.
- 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
sedto replace mirrors in
sed to replace mirrors in
Since some sources use addition folders as part of their path it might be better to use the alternate separator syntax.
sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list