Как вы выбираете самое быстрое зеркало из командной строки?

Я хочу обновить мой sources.list файл с самым быстрым сервером из командной строки в новой установке Ubuntu Server. Я знаю, что это легко сделать с графическим интерфейсом, но, кажется, нет простого способа сделать это из командной строки?

12 ответов

Решение
 Паккет нэселект-кв

    dapper (net): выберите самое быстрое зеркало Debian с помощью netselect 
    [Вселенная]
    0.3.ds1-5: все
    hardy (net): выберите самое быстрое зеркало Debian с помощью netselect 
    [Вселенная]
    0.3.ds1-11: все
Паккет ап-шпион

    dapper (admin): записывает файл sources.list на основе тестов пропускной способности 
    [Вселенная]
    3.1-14: amd64 i386 powerpc

Кажется, он не включен в более новую Ubuntu из-за проблем с безопасностью: смотрите: Отчет об ошибках

Но.. Обычно я использую команду ping, чтобы узнать скорость соединения с каким-либо местом. Количество прыжков и задержка.

Вам больше не нужно искать - как объяснил ajmitch, вы можете использовать deb mirror автоматически выбрать лучшее зеркало для вас.

apt-get теперь поддерживает метод mirror, который автоматически выберет хорошее зеркало в зависимости от вашего местоположения. Ввод:

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 магия:

Взлом у терминала-наркомана "найди лучший сервер"!

  • Скачать и dpkg -inetselect для вашей архитектуры с сайта Debian. (это около 125 КБ, без зависимостей)
  • Найдите самые быстрые зеркала Ubuntu из своего местоположения, либо в актуальном состоянии, либо самое большее на шесть часов позже с этим (я объясню это ниже, извините, что в 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 сколько времени тестируется каждое зеркало (по умолчанию 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 извлекает зеркала, которые обновлены или отстают на шесть часов, вместе с 8 строками предыдущего контекста, который включает фактические URL-адреса ftp / http
    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 файл автоматически или с помощью зеркала, выбранного из списка.

Пример использования, который позволяет вам выбрать из 5 зеркал США с самой низкой задержкой для вашей машины:

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

Для командной строки вы можете использовать инструмент Python под названием apt-smart

Пример использования, который позволяет вам перечислить ранжированные зеркала в вашей стране (автоматически обнаруживать):

$ 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 и полагаясь на неточные данные панели запуска.
  • apt-smart поддерживается, в то время как большинство других инструментов оставляют проблемы нефиксированными в течение длительного времени.

Вы можете легко установить apt-smart с помощью pip, подробные инструкции по установке и использованию copy'n'paste смотрите в Project Readme.

Я знаю, что это не дает прямого ответа на вопрос OP, но в версии Ubuntu для настольных ПК /GUI есть кнопка, которая находит лучшее зеркало для вас. Казалось, что это работает довольно хорошо, поэтому я кратко рассмотрел это, но у меня не было времени, чтобы продолжить.

Причина, по которой я это поднял, заключается в том, что я думаю, что было бы довольно просто и удобно использовать его как утилиту командной строки.

Если кому-то интересно, похоже, что тест находится в:

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

Опять же, это примерно так же далеко, как я, но я решил оставить это здесь на случай, если кто-то захочет. Я, вероятно, вернусь к этому, когда у меня будет немного больше времени.

Я разработал простой сценарий nodejs на основе ping, который тестирует серверы, перечисленные в mirrors.ubuntu.com/mirrors.txt, и возвращает самый быстрый:

sudo npm install -g ffum
ffum

Пожалуйста, дайте мне знать, если вы считаете это полезным или у вас есть предложения (=

Команда, которая находит быстрые зеркала

На 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

Другие ответы, включая принятый ответ, больше не действительны (для Ubuntu 11.04 и новее), потому что они рекомендовали пакеты Debian, такие как netselect-apt а также apt-spy которые не работают с Ubuntu.

Ниже приведены два разных рабочих ответа на этот вопрос:

  1. Используйте apt-get 's mirror: метод

    Этот метод запрашивает у сервера Ubuntu список зеркал рядом с вами на основе вашего IP-адреса и выбирает одно из них. Самая простая альтернатива, с незначительным недостатком, когда иногда самое близкое зеркало может быть не самым быстрым.

  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

Если вы хотите, чтобы утилита делала это, вы можете реализовать такую ​​утилиту, как простой скрипт 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

Свойства программного обеспечения по умолчанию. В приложениях GTK и Qt есть утилита "Выбрать лучший сервер", которая использует MirrorTest.py из python3-software-properties. Его также можно использовать из интерфейса командной строки.

  • Установите утилиту тестирования зеркал:
    sudo apt install python3-software-properties --no-install-recommends

  • Используй это:
    LC_ALL=C python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

Однако он тестирует всего 5 серверов с загрузкой всего 100 КБ файла, поэтому результаты не слишком точны.
Для гораздо лучших результатов я сделал патч, использующий 20 серверов, файл 30 МБ и более информативный вывод:

  • Скачайте и примените патч:
    wget -qO- https://gist.githubusercontent.com/shvchk/b81e4579bff13486871f99404c497759/raw/MirrorTest.py.patch | sudo patch -d/ -p0

  • Используйте как обычно:
    LC_ALL=C python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

Пример вывода:

> LC_ALL=C python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py
Running ping tests
Running download tests
Testing mirror.wff-gaming.de
Testing ubuntu.melbourneitmirror.net
Testing linux.xjtuns.cn
Testing mirrors.avalonhosting.services
Testing mirrors.codec-cluster.org
Testing ftp.utexas.edu
Testing mirror.plustech.de
Testing mirror.ratiokontakt.de
Testing mirror2.tuxinator.org
Testing mirror.kumi.systems
Testing ubuntu.cybertips.info
Testing files.tux-users.net
Testing linux.darkpenguin.net
Testing mirrors.aliyun.com
Testing mirror.eu-fr.kamatera.com
Testing ny-mirrors.evowise.com
Testing la-mirrors.evowise.com
Testing mirror.de.leaseweb.net
Testing es-mirrors.evowise.com
Testing uk-mirrors.evowise.com
Testing mirrors.ukfast.co.uk
Testing mirrors.advancedhosters.com
mirror: uk-mirrors.evowise.com - time: 0.48804259300231934
mirror: es-mirrors.evowise.com - time: 0.5114705562591553
mirror: mirror.eu-fr.kamatera.com - time: 0.5532209873199463
mirror: ny-mirrors.evowise.com - time: 0.567798376083374
mirror: linux.darkpenguin.net - time: 0.6391427516937256
mirror: mirror.de.leaseweb.net - time: 0.7773537635803223
mirror: files.tux-users.net - time: 0.957298755645752
mirror: mirror2.tuxinator.org - time: 0.9695150852203369
mirror: la-mirrors.evowise.com - time: 1.1493926048278809
mirror: ubuntu.cybertips.info - time: 1.1670680046081543
mirror: mirrors.aliyun.com - time: 1.2511329650878906
mirror: mirror.ratiokontakt.de - time: 1.2832701206207275
mirror: mirrors.advancedhosters.com - time: 1.8812928199768066
mirror: mirrors.ukfast.co.uk - time: 2.537770986557007
mirror: mirror.plustech.de - time: 11.090754270553589
and the winner is: uk-mirrors.evowise.com

Самый простой и эффективный способ получить самое быстрое зеркало - это использовать apt mirror:// источник, см.

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

Я использую следующее для автоматического выбора зеркал (и отключаю 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
Другие вопросы по тегам