Как вы выбираете самое быстрое зеркало из командной строки?
Я хочу обновить мой 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 -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
:-v
делает его немного многословным - вы хотите видеть точки прогресса и сообщения о том, что разные зеркала, отображающие один и тот же IP, были объединены:)-sN
контролирует, сколько зеркал вы хотите в конце (например, 10 лучших зеркал)-tN
сколько времени тестируется каждое зеркало (по умолчанию 10; чем больше число, тем дольше оно длится, но тем более надежны результаты).
Это кавычки (не вставляйте, просто для объяснения)
wget -q -O- https://launchpad.net/ubuntu/+archivemirrors | grep -P -B8 "статус (UP|SIX)" | grep -o -P "(f|ht)tp://[^\"]*"
wget
извлекает последний статус зеркала из https://launchpad.net/ubuntu/+archivemirrors.- Первый
grep
извлекает зеркала, которые обновлены или отстают на шесть часов, вместе с 8 строками предыдущего контекста, который включает фактические URL-адреса ftp / http - Второй
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.
Ниже приведены два разных рабочих ответа на этот вопрос:
- Используйте apt-get 's
mirror:
методЭтот метод запрашивает у сервера Ubuntu список зеркал рядом с вами на основе вашего IP-адреса и выбирает одно из них. Самая простая альтернатива, с незначительным недостатком, когда иногда самое близкое зеркало может быть не самым быстрым.
- Командная строка 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