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

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

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

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

deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiversedeb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiversedeb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiversedeb 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 -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 "status(UP|SIX)" \| grep -o -P "(f|ht)tp://[^\"]*"
    1. wget извлекает последний статус зеркала из https://launchpad.net/ubuntu /+архивные зеркала.
    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 Швеция-зеркало ЕС и зеркало Новой Зеландии входят в тройку лидеров из Калифорния, ну, я тоже ;-) Истина заключается в том, что 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  }'
Pakket netselect-apt dapper (net): Выберите самое быстрое зеркало Debian с помощью netselect [universe] 0.3.ds1-5: все hardy (net): Выберите самое быстрое зеркало Debian с помощью netselect [universe] 0.3.ds1-11: все
Pakket apt-spy dapper (администратор): пишет источник.файл списка на основе тестов пропускной способности [universe] 3.1-14: amd64 i386 powerpc

Похоже, не включено в более новую Ubuntu из-за проблем с безопасностью: см.: Сообщение об ошибке

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

Вот такой Скрипт на Python Я написал, что находит зеркала с наименьшей задержкой TCP.

Сценарий также предоставляет данные о пропускной способности и состоянии, взятые из панель запуска, и будет генерировать новый sources.list файл автоматически или с помощью зеркала, выбранного из списка.

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

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

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

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

$ apt-smart -l

С -l, или --list-mirrors, вы получите ( пример вывода с сервера Travis CI в США ):

---------------------------------------------------------------------------------------------------------| 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/ubuntuarchive2: http://mirror.genesisadaptive.com/ubuntu3: http://ubuntu.mirrors.tds.net/pub/ubuntu5: http://repo.miserver.it.umich.edu/ubuntu...78: http://mirrors.usinternet.com/ubuntu/archive80: http://mirrors.ocf.berkeley.edu/ubuntu

Конечно, apt-smart вы также можете изменить свои источники.список, если вы хотите:

$ apt-smart -a

С -a , или --auto-change-mirror чтобы найти доступные зеркала, ранжируйте зеркала по скорости соединения и статусу обновления, а также обновите /etc/apt/sources.список для использования наилучшего доступного зеркала.

С -c , или --change-mirror MIRROR_URL чтобы обновить /etc/apt/sources.список для использования данного MIRROR_URL.

По сравнению с другими инструментами:

  • apt-smart автоматически определяет, где вы находитесь, поэтому вам не нужно указывать страну, когда вы выезжаете за границу.
  • apt-smart выполняет реальную загрузку HTTP с каждого зеркала для получения более точных результатов (пропускная способность и статус) и поддерживает HTTP-прокси, а не использует ping и полагаться на неточные данные launchpad.
  • apt-smart поддерживается, в то время как большинство других инструментов оставляют проблемы незафиксированными в течение длительного времени.

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

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

sudo npm install -g ffumffum

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

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

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

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

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

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

Команда, Которая Находит Быстрые Зеркала

На 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.183778047562mirror: it-mirrors.evowise.com - time: 0.18604683876mirror: la-mirrors.evowise.com - time: 0.192630052567mirror: ny-mirrors.evowise.com - time: 0.208723068237mirror: mirrors.accretive-networks.net - time: 0.385910987854mirror: mirror.team-cymru.org - time: 0.46785402298mirror: mirrors.psu.ac.th - time: 1.64231991768and the winner is: es-mirrors.evowise.com

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

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

В моем случае мне пришлось заменить знаки # косыми чертами (/). В противном случае я получил sed: -e expression #1, char 53: unterminated s’ command`.

Связанные: repository - How can I get apt to use a mirror close to me, or choose a faster mirror? - Ask Ubuntu

@EthanLeroy то же самое здесь с Ubuntu 12.04.3

Должна быть косая черта, а не хэш.