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

137

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

Evan
источник
3
В регулярных выражениях. символ означает любой символ. Если вы хотите, чтобы оно совпадало с., Вам нужно экранировать его с помощью \, поэтому us.archive [..] должно быть us \ .archive [..]
Эгиль
Связанный: askubuntu.com/questions/37753/…
Хорхе Кастро
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, чтобы узнать скорость соединения с каким-либо местом. Количество прыжков и задержка.

Rinzwind
источник
4
netselect-apt не доступен в Ubuntu 12.04
offby1
правильно: см. здесь bugs.launchpad.net/ubuntu/+source/netselect/+bug/337377
Rinzwind
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их соответствующим именем.

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

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

tentaculo
источник
ffum не работает: ошибка соединения.
Джеймс Фу
Это не работает: пустой вывод.
Хуан Симон
git cloneрепо и запуститьnode ffum
Майкл
Круто, у меня работает! У меня была ошибка, когда он искал узел вместо nodejs ... также было бы здорово иметь подробное описание каждой протестированной скорости архивирования.
tweak2
4

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

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

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

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

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

copeland3300
источник
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
NTC2
источник
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
iheggie
источник
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
gmatht
источник
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
k0pernikus
источник