Я хочу обновить файл sources.list с помощью самого быстрого сервера из командной строки в новой установке Ubuntu Server. Я знаю, что это просто трилогично с графическим интерфейсом, но, кажется, нет простого способа сделать это из командной строки?
Другие ответы, включая принятый ответ, более недействительны (для Ubuntu 11.04 и новее), потому что они рекомендовали пакеты Debian, такие как netselect-apt
и apt-spy
, которые не работают с Ubuntu.
Ниже приведены два разных рабочих ответов:
mirror:
Этот метод запрашивает сервер Ubuntu для списка зеркал рядом с вами на основе вашего IP-адреса и выбирает один из них. Самая легкая альтернатива, с незначительным недостатком, что иногда самое близкое зеркало может быть не самым быстрым. sed
для замены зеркал в sources.list
. sed
для замены зеркал в sources.list
. Поскольку некоторые источники используют дополнительные папки как часть их пути было бы лучше использовать синтаксис альтернативного разделителя.
sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list
Oneliner, который выбирает лучшее (по скорости загрузки) зеркало на основе mirror.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 }'
Вот один из способов, который всегда будет работать, используя старые добрые netselect
и некоторые grep
магии:
dpkg -i
netselect
для своей архитектуры с сайта Debian. (это около 125 КБ, без зависимостей) 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 "status(UP|SIX)" | grep -o -P "(f|ht)tp://[^\"]*"
wget
отображает последний статус зеркала с https://launchpad.net/ubuntu/+arch ivemirrors . Первые grep
извлекают зеркала, которые обновлены или находятся в шести часах позади, а также 8 строк предыдущего контекста, который включает фактические URL ftp / http. Второй 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 находятся в тройке лучших из California , ну, я тоже ;-) Правда в том, что
netselect
t всегда выбирайте наиболее подходящий URL для отображения, когда несколько зеркал сопоставляются с одним IP; номер 3 также известен как nz.archive.ubuntu.com
! приятная терминальная программа здесь:
# apt-get install netselect-apt
Available Options
stable|testing|unstable|experimental|woody|sarge|etch|sid Specify which distribution of Debian to use. By default stable is used.
-s, --sources
While generating OUTFILE include also deb-src lines to use with ‘‘apt-get source’’ to obtain Debian source packages.
-i, --infile INFILE
Use INFILE instead of mirrors_full for reading mirror list. The file must be in the same format as mirrors_full.
-o, --outfile OUTFILE
Use OUTFILE instead of sources.list.
-n, --nonfree
Include also non-free section while generating OUTFILE.
-f, --ftp
Use FTP mirrors instead of HTTP and generate OUTFILE accordingly.
Examples
If you want non-free repos use the following command
# netselect-apt -n
Самый простой и эффективный способ получить самое быстрое зеркало - использовать источник apt mirror://
, см.
https://mvogt.wordpress.com/2011/03/21/ -кв-зеркально метод /
Вам больше не нужно заниматься поиском - поскольку 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
для использования вашего ближайшего зеркала.
– Simon East
29 June 2013 в 22:03
Я знаю, что это напрямую не отвечает на вопрос OP, но есть кнопка в версии Ubuntu на рабочем столе / графическом интерфейсе, которая находит лучшее зеркало для вас. Это, казалось, сработало очень хорошо, поэтому я вкратце рассмотрел его, но не успел следить.
Причина, по которой я это вызвала, состоит в том, что я думаю, что это будет довольно прямолинейно и полезно превратите его в утилиту командной строки.
Если кому-то интересно, тест, похоже, находится в:
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py
Опять же, это примерно так, как я получил, но я Я решил оставить это здесь, если кто-то захочет этого. Я, вероятно, заберу его, когда у меня еще немного времени.
$ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py
& gt; [top 5 omitted] and the winner is: ny-mirrors.evowise.com
– PatKilg
9 June 2018 в 21:07
Если вы хотите использовать эту утилиту, вы можете реализовать такую утилиту, как простой сценарий 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
Я использую следующее для автоматического выбора зеркал (и отключить 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
Вот скрипт Python , который я написал, находит зеркала с наименьшей задержкой TCP.
Скрипт также предоставляет данные о пропускной способности и состоянии, взятые из пусковой панели и автоматически сгенерирует новый файл sources.list
или используя зеркало, выбранное из списка.
netselect
недоступен в новых версиях Ubuntu
– Tek
18 February 2018 в 11:23
Я разработал простой скрипт nodejs на основе ping, который проверяет серверы, перечисленные на mirror.ubuntu.com/mirrors.txt, и возвращает самый быстрый из них:
sudo npm install -g ffum
ffum
Пожалуйста, дайте мне знать, если вы найдете это полезно или имеет какие-либо предложения (=
Другие ответы, включая принятый ответ, более недействительны (для Ubuntu 11.04 и новее), потому что они рекомендовали пакеты Debian, такие как netselect-apt
и apt-spy
, которые не работают с Ubuntu.
Ниже приведены два разных рабочих ответов:
mirror:
Этот метод запрашивает сервер Ubuntu для списка зеркал рядом с вами на основе вашего IP-адреса и выбирает один из них. Самая легкая альтернатива, с незначительным недостатком, что иногда самое близкое зеркало может быть не самым быстрым. sed
для замены зеркал в sources.list
. sed
для замены зеркал в sources.list
. Поскольку некоторые источники используют дополнительные папки как часть их пути было бы лучше использовать синтаксис альтернативного разделителя.
sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list
Oneliner, который выбирает лучшее (по скорости загрузки) зеркало на основе mirror.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 }'
curl -s http://mirrors.ubuntu.com/mirrors.txt
возвращает только одну строку: http://archive.ubuntu.com/ubuntu/
, которая поражает цель выбора среди нескольких. : - /
– Stéphane Gourichon
26 June 2017 в 16:35
curl
этого ответа, потому что curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gz
, где [server_url]
- это базовый зеркальный URL, указанный в mirrors.txt
, позволяет сравнивать скорость первого ~ 100K индексного файла с зеркала.
– jamesc
12 March 2018 в 16:57
приятная терминальная программа здесь:
# apt-get install netselect-apt
Available Options
stable|testing|unstable|experimental|woody|sarge|etch|sid Specify which distribution of Debian to use. By default stable is used.
-s, --sources
While generating OUTFILE include also deb-src lines to use with ‘‘apt-get source’’ to obtain Debian source packages.
-i, --infile INFILE
Use INFILE instead of mirrors_full for reading mirror list. The file must be in the same format as mirrors_full.
-o, --outfile OUTFILE
Use OUTFILE instead of sources.list.
-n, --nonfree
Include also non-free section while generating OUTFILE.
-f, --ftp
Use FTP mirrors instead of HTTP and generate OUTFILE accordingly.
Examples
If you want non-free repos use the following command
# netselect-apt -n