Як у командному рядку вибрати найшвидше дзеркало?


137

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


3
У регулярних виразах символ означає будь-який символ. Якщо ви хочете, щоб він відповідав а., Вам потрібно уникнути його з \, тому us.archive [..] має бути нами \ .archive [..]
Egil


2
У моєму випадку мені довелося замінити #знаки косою рисою ( /). Інакше я отримав sed: -e expression #1, char 53: unterminated "команду".
Етан Лерой

@EthanLeroy те саме тут і з Ubuntu 12.04.3
вихід з системи

Повинно бути косою рисою.
Метт

Відповіді:


22
Pakket netselect-apt

    dapper (net): виберіть найшвидше дзеркало Debian за допомогою netselect 
    [Всесвіт]
    0,3.ds1-5: всі
    витривалий (нетто): виберіть найшвидше дзеркало Debian за допомогою netselect 
    [Всесвіт]
    0,3.ds1-11: усі
Pakket apt-шпигун

    dapper (адміністратор): записує файл source.list на основі тестів на пропускну здатність 
    [Всесвіт]
    3.1-14: amd64 i386 powerpc

Не входить у новіший Ubuntu через проблеми з безпекою, схоже: див .: Звіт про помилки

Але .. Зазвичай я просто використовую ping, щоб дізнатися швидкість з'єднання до якогось місця. Кількість хмелю та затримка.


4
netselect-apt, здається, не доступний в Ubuntu 12.04
неділю

правильно: дивіться тут bugs.launchpad.net/ubuntu/+source/netselect/+bug/337377
Rinzwind

8
Це не найвигідніший або найкращий варіант відповіді, перевірте наступне
ntg

Яка відповідь "наступна", можливо, змінилася.
gmatht

apt-шпигун більше немає в debian 9, але netselect-apt все в порядку
netawater

147

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

apt-get тепер підтримує метод «дзеркала», який автоматично вибере хороше дзеркало залежно від вашого місцезнаходження. Введення:

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
@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витягує ці 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 Швеція-ЄС та дзеркало 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/який перемагає мету вибору серед кількох. : - /
Stéphane Gourichon

так, таким способом є НГ.
netawater

Я вважаю curlчастину цієї відповіді корисною, оскільки curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzтам, де [server_url]вказана основна URL-адреса дзеркала mirrors.txt, можна порівняти швидкість першого дзеркала ~ 100 К індексного файлу з дзеркала.
jamesc

Це тестує швидкість передачі, що, безумовно, є покращенням порівняно з netselect. Це завантаження лише 10k з кожного сервера, що, можливо, не є прекрасним відображенням стійкої швидкості передачі при більш швидких з'єднаннях. Збільшити тест на 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

Покажіть, будь ласка, як це використовувати у своєму дописі
Джонатан

@Jonathan зроблено. Повне використання знаходиться READMEна першому посиланні.
Джон Б

5

Я розробив простий сценарій nodejs на основі ping, який тестує сервери, перелічені на mirrors.ubuntu.com/mirrors.txt і повертає найшвидший:

sudo npm install -g ffum
ffum

Будь ласка, повідомте мене, якщо ви вважаєте це корисним чи є якісь пропозиції (=


ffum не працює: Помилка підключення.
Джеймс Фу

Не працює: порожній вихід.
Хуан Сімон

git cloneрепо та біжиnode ffum
Майкл

Дивовижно, працює для мене! У мене була помилка, де вона шукала вузол замість nodejs ... також було б круто мати деякий багатослівний опис кожної перевіреної швидкості архіву.
tweak2

4

Я знаю, що це не відповідає безпосередньо на запитання ОП, але у версії Ubuntu на робочому столі / графічному інтерфейсі є кнопка, яка знаходить найкраще дзеркало для вас. Здавалося, це працює досить добре, тому я коротко переглянув це, але не встиг слідкувати.

Причина, яку я підношу, полягає в тому, що я думаю, що це було б досить прямо вперед і зручно зробити це утилітою командного рядка.

Якщо когось цікавить, тест, здається, знаходиться в:

/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 серверів з найнижчим рівнем ping, а потім набирає їх за пропускною здатністю, завантажуючи файл ~ 1М (в основному 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 серверів з найнижчим рівнем ping, а потім набирає їх за пропускною здатністю, завантажуючи файл ~ 1М (в основному 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ви також можете змінити свій source.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.