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


137

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


3
В регулярных выражениях. символ означает любой символ. Если вы хотите, чтобы оно совпадало с., Вам нужно экранировать его с помощью \, поэтому us.archive [..] должно быть us \ .archive [..]
— Эгиль


2
В моем случае я должен был заменить #знаки с косой чертой ( /). В противном случае я получил sed: -e expression #1, char 53: unterminated «команду».
— Итан Леруа

@EthanLeroy то же самое здесь с Ubuntu 12.04.3
— выход

Должен быть слеш, а не хеш.
— Мэтт Х

Ответы:


22
Паккет нэселект-кв

    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, чтобы узнать скорость соединения с каким-либо местом. Количество прыжков и задержка.


4
netselect-apt не доступен в Ubuntu 12.04
— offby1


8
Это не самый одобренный или лучший ответ, проверьте следующий
— нтг

Какой ответ «следующий», возможно, изменился.
— Gmatht

apt-spy отсутствует в Debian 9, но netselect-apt в порядке
— netawater

147

Вам не нужно делать какие - либо поиска больше , - как 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их соответствующим именем.


Отличный совет. Просто отметьте, что после внесения изменений вам нужно запустить, sudo apt-get updateпрежде чем делать какие-либо изменения, apt-get installчтобы использовать ближайшее зеркало.
— Саймон Ист

2
Связанный: askubuntu.com/q/319433/11244
— до

23
Хороший совет, но бесполезный в моем случае. Он работает на геолокации, давая мне локальный сервер, который намного медленнее, чем я. Важным фактором здесь является временное расстояние сети, а не пространственное расстояние.
— Jarondl

1
в настоящее время не работает: bugs.launchpad.net/ubuntu/+source/apt/+bug/1613184
— марафон

1
@marathon установлен как минимум 18.04+
— Пабло А

49

Вот один способ, который всегда будет работать, используя старое netselectи немного grepволшебства:

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

  • Скачайте и dpkg -i netselectдля вашей архитектуры с сайта 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извлекает эти URL-адреса ftp / http
  • Вот пример выходных данных из Калифорнии, США:

    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 Sweden-EU и зеркало NZ входят в первую тройку из Калифорнии , я тоже ;-) Правда в том, что netselectне всегда выбирается наиболее подходящий URL для отображения, когда отображение нескольких зеркал на один IP; № 3 также известен как nz.archive.ubuntu.com!

9
netselect выбирает зеркала с низкой задержкой udp или icmp. Он не обязательно выбирает зеркала, которые могут увеличить пропускную способность.
— Тобу

@pix Я одобрил ваше редактирование, но это не замена команд, которая приводит к замене строк. Это последующее расщепление поля, которое удалило переводы строки. Подстановка команд удаляет только завершающие символы новой строки.
— Муру

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.
— Пабло А

1
В настоящее время curl -s http://mirrors.ubuntu.com/mirrors.txtвозвращает только одну строку: http://archive.ubuntu.com/ubuntu/которая побеждает цель выбора среди нескольких. : - /
— Стефан Гурихон

да, так что этот метод НГ.
— netawater

Я нашел curlчасть этого ответа полезной, потому что, curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzгде [server_url]указан URL-адрес базового зеркала mirrors.txt, можно сравнивать скорость первых ~ 100 КБ индексного файла с зеркала.
— Jamesc

Это тестирует скорость передачи, что, безусловно, лучше, чем netselect. Он загружает только 10 Кбайт с каждого сервера, что, возможно, не является хорошим показателем постоянной скорости передачи при более быстрых соединениях. Увеличьте это 102400 для тестирования с большей загрузкой
— Фил Миллер

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
— Габриэль Мазетто

это идеальное решение, так как я пробовал другие методы. чтобы сделать noob дружественным, я написал пост, детализирующий этот метод: blog.kmonsoor.com/…
— kmonsoor

Это замечательно, так netselectкак не доступно в более новых версиях Ubuntu
— Tek

Пожалуйста, покажите, как использовать это в своем посте
— Джонатан

@ Джонатан сделал. Полное использование находится в READMEпервой ссылке.
— Джон Б

5

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

sudo npm install -g ffum
ffum

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


ffum не работает: ошибка соединения.
— Джеймс Фу

Это не работает: пустой вывод.
— Хуан Симон

git cloneрепо и запуститьnode ffum
— Майкл

Круто, у меня работает! У меня была ошибка, когда он искал узел вместо nodejs ... также было бы здорово иметь подробное описание каждой протестированной скорости архивирования.
— tweak2

4

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

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

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

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

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


18.04 этот сценарий определяет, когда он вызывается как приложение (как основное ) из терминала .... и просто печатает его результаты в терминал. Удостоверьтесь, чтобы дать этому достаточно времени, чтобы закончить. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
— PatKilg

К сожалению, это не работает правильно. Этот скрипт берет 5 серверов с самым низким пингом, затем оценивает их по пропускной способности, загружая файл ~ 1M (Packages.gz в основном из вашего дистрибутива). Если вы измените скрипт для увеличения его до 25 серверов и загрузите файл 500M, вы получите совершенно другие результаты, которые на этот раз верны.
— Джоселин

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 серверов с самым низким пингом, затем оценивает их по пропускной способности, загружая файл ~ 1M (Packages.gz в основном из вашего дистрибутива). Если вы измените скрипт для увеличения его до 25 серверов и загрузите файл 500M, вы получите совершенно другие результаты, которые на этот раз верны.
— Джоселин

1

Для командной строки вы можете использовать инструмент 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 .


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-aptи apt-spyкоторые не работают с Ubuntu.

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

  1. Используйте APT-получить «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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.