Створення дзеркала: //mirrors.ubuntu.com високодоступний


26

Ми розподілена команда, саме тому наші віртуальні машини використовують mirror://налаштування Ubuntu . Ми /etc/apt/sources.listвиглядаємо так:

deb mirror://mirrors.ubuntu.com/mirrors.txt lucid main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-security main restricted universe multiverse

Це саме по собі є надзвичайно дивовижним та дуже корисним для людей, які працюють у різних місцях - менше місцевих налаштувань тощо. Відмова в теорії.

Щоденно ця установка виходить з ладу занадто часто. Я хочу сказати 2-3 рази на цьому тижні.

Зараз mirrors.ubuntu.comповертається ftp.uni-bayreuth.deяк дзеркало мого шафи. На жаль, це, здається, вниз.

Це триває вже кілька годин, і дзеркало приймають волонтери в університеті, і сьогодні, в п'ятницю, я сподіваюся, що це скоро виправиться.

Усі розмови, мої запитання:

  • Хтось цим користується?
  • Як ви працюєте в час простою? (мій швидкий виправлення - це сценарій оболонки)
  • Як я можу допомогти покращити цю ситуацію?


@ RaduRădeanu - це перший раз, коли я читаю про netselect ... 8oþ
dschinn1001

@ RaduRădeanu Цікава порада! Ура! Я намагаюся використовувати mirror:метод, який мав найбільше оновлень у вашій нитці. Моя проблема полягає в тому, що кожного разу, коли найшвидше дзеркало виходить з ладу, тоді немає відмови і я застряг.
До

Чи створюється власне дзеркало Ubuntu?
Мітч

@Till Ви можете мені повідомити, чи можете ви мати своє власне дзеркало.
Мітч

Відповіді:


10

Особисто я вважаю, що найкращий спосіб вибрати найкращі дзеркала репозиторіїв Ubuntu - це використовувати метод GUI:

сервер завантаження

Тепер, щоб покращити ситуацію, описану у питанні, потрібно якось встановити деякі правила. Ці правила повинні діяти mirrors.ubuntu.com. Я можу запропонувати деякі правила наступним чином:

  • скласти список найкращих / бажаних дзеркал; дзеркал дуже багато, як ви можете бачити тут , тут або тут
  • якщо ви знайшли хороше дзеркало, додайте його до списку
  • якщо дзеркало було порушено або зламане іноді, це означає, що це недобре дзеркало, і його слід видалити зі списку
  • ви можете використовувати netselect, apt-spyабоapt-fast
  • та інші, залежно від ваших вимог.

Далі, щоб побачити, як можна обійтись, я можу дати вам описаний метод крок за кроком з трьома прикладами скриптів bash. Спочатку використовуйте дзеркала з країни, в якій ви перебуваєте в даний момент, а не mirrors.ubuntu.com/mirrors.txtдля кожної країни - текстовий файл із дзеркалами, пов'язаними; див. Http://mirrors.ubuntu.com/ ):

  • У запуску терміналуmkdir -p bin - ця команда зробить binкаталог у вашій homeпапці, якщо у вас його ще немає.
  • Після запуску gedit ~/bin/change_sources.sh- це створить новий файл change_sources.shу gedit.
  • Скопіюйте та вставте один із наступних сценаріїв у новому створеному файлі:
#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print toupper($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb mirror://mirrors.ubuntu.com/$country.txt $release main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-security main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

або щось подібне до того, що можна знайти на веб-сайті http://repogen.simplylinux.ch/ :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print tolower($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Main Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe  multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe multiverse

## Ubuntu Update Repos for $ip
deb http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

або, використовуючи скрипта netselect(скачати з тут , інструкції по установці тут ) , як izx пояснив Верри добре в цій відповіді :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

url=$(netselect \
    `wget -q -O- https://launchpad.net/ubuntu/+archivemirrors \
        | grep -P -B8 "statusUP|statusSIX" \
        | grep -o -P "(f|ht)tp.*\"" \
        | tr '"\n' '  '` \
    | awk '{print $2}')
release=$(lsb_release -sc)

if [ "$url" == "" ] ; then
    exit 0
fi

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

cp -f $file $old_file

printf "## Ubuntu Best Repos
deb http://extras.ubuntu.com/ubuntu $release main
deb-src http://extras.ubuntu.com/ubuntu $release main
deb $url $release main universe restricted multiverse
deb http://security.ubuntu.com/ubuntu/ $release-security restricted universe main multiverse
deb $url $release-updates restricted universe main multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0
  • Збережіть файл і закрийте його.
  • Поверніться до терміналу і запустіть: chmod +x ~/bin/change_sources.sh- надати виконувати доступ до сценарію.
  • Просто для тестування, щоб запустити новий сценарій, наберіть термінал ~/bin/change_sources.sh. Це призведе до помилки, оскільки ви не маєте права редагувати /etc/apt/sources.list. Отже, використовуйтеsudo ~/bin/change_sources.sh
  • Відредагуйте файл crontab кореневого користувача за допомогою sudo crontab -eкоманди та додайте наступний рядок:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • Я встановив роботу cron на кожну годину, але ви можете змінити, як хочете, або як вважаєте, що краще. Див. Http://en.wikipedia.org/wiki/Cron у цьому сенсі.
  • Збережіть файл і перевірте нову запис crontab sudo crontab -l.

ПРИМІТКА. Щоб відновити зміни, внесені цим сценарієм, видаліть завдання cron та виконайте вказівки із наведеного вище малюнка або використовуйте наступну команду в терміналі:

cp -f /etc/apt/sources.list.bak /etc/apt/sources.list

Відтепер файл буде динамічно змінено після того, як він знайде зміну IP-адреси.

Це може бути не найкращим рішенням, але, на мою думку, хороше рішення можна дати таким чином, як у вищезазначених сценаріях .


2
Я думаю, я б заперечував, якщо gui на Linux можна вважати традиційним способом. :) Але все одно: Ваш перший сценарій вирішує проблему, у мене немає. Дзеркальний синтаксис вже отримує мої німецькі дзеркала, або США, або де б люди не були. Другий сценарій використовує дзеркала країни - вони, мабуть, мають найменшу пропускну здатність (бачимо, що у списку архівів дзеркал на панелі запуску), третій сценарій передбачає, що швидке (або найближче) дзеркало - це справді найкраще. Назад до квадратного. Я кодую невеликий apt-spyсценарій прямо зараз. Буде оновлено тут пізніше.
До

1
@ Доки ваше запитання було " Як ви працюєте в час простою? " Та " Як я можу допомогти покращити цю ситуацію? ". Я показав, як я працюю, і запропонував тобі, як ти можеш допомогти вдосконалитись ... Також, якщо ти прочитаєш мою відповідь до кінця, ти можеш побачити, що я знаю, що " Це може бути не найкращим рішенням, але я думаю що хороше рішення можна дати таким чином, як у вищезазначених сценаріях ". Нарешті, якщо вам цікаво виправити / вдосконалити зламані сервери, це здається тут поза темою, і вам слід замість цього поговорити з власниками цих серверів.
Radu Rădeanu

2
Я не думаю, що це поза темою. Різні канонічні / Ubuntu люди сказали мені, щоб додати тут своє запитання. Тому я тут в першу чергу, і, мабуть, також, чому присвоєно щедрості.
До

1
@ Доки так, питання добре, але не так, як ви переформулювали його в цих коментарях. Тут ніхто не відповість на тему "як виправити зламаний дзеркальний сервер", якщо це не адміністратор на відповідному сервері.
Radu Rădeanu

1
Я не хочу виправляти цей сервер, я хочу виправити алгоритм вибору та відсутність відмови.
До

4

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

Я створив інструмент (спеціально для Ubuntu), який я викликаю apt-spy2.

Основна мета цього інструменту - швидко знайти робоче дзеркало. Робота визначається тим, що дзеркальний сервер доступний і (сподіваємось :) оновлений).

Я не приймаю жодних припущень щодо того, чи вибраний сервер обов'язково є найближчим та найшвидшим. Я не виконую жодних пінгів чи трюків GEO DNS - але поки це працює, коли щось ламається.

Як це працює - в двох словах:

  1. Я використовую список дзеркал http://mirrors.ubuntu.com або список дзеркал запуску для запуску серверів.
  2. Я перевіряю кожен (для коду статусу відповіді HTTP).
  3. LBNL, я оновлюю /etc/apt/sources.list .

Будь ласка, запиши: Це передбачає, що люди грають добре і ставлять додаткові дзеркала (наприклад, сторонні сховища /etc/apt/sources.list.d. Але я думаю, це означає, що є можливість для вдосконалення.

Ви можете отримати цей інструмент так:

$ [sudo] gem install apt-spy2

Кліп приходить list,check , fixі help(з розширеною інформацією про те , як використовувати).

Я намагався документувати якомога більше у проекті README .

Поточна версія дуже консервативна 0.5.0.

Код є відкритим кодом, а ліцензія - ліберальною. І я беру всі внески.


Ви завантажили це в сховища ubuntu?
Брайам

@Braiam Цей інструмент можна отримати так: sudo gem install apt-spy2
Radu Rădeanu

@ RaduRădeanu я запитую, чи він його завантажив, оскільки мені цікаво щось упакувати в Debian.
Брайам

@Braiam Я не пакував його, але я б радий, якщо хтось це зробив. :)
До

@Braiam Btw, це навряд чи буде працювати з Debian. ; (Працює лише з Ubuntu.
До

2

На Debian 6.0.4 була така команда:

спритний-шпигун

Це зробило завдання знайти наступний найближчий доступний сервер автоматично і створити новий source.list

У Ubuntu ця команда, здається, не існує?

Він все ще існує в Debian 7.0 wheezy:

https://launchpad.net/debian/wheezy/+source/apt-spy/+copyright

Ви можете завантажити свій * .deb пакет тут:

http://packages.debian.org/sid/apt-spy

... все ще шукає джерела ...

Вам, очевидно, потрібна Debian-7.0-Installation, щоб отримати вихідний код після редагування списку джерел із записом:

deb-src http://http.debian.net/debian wheezy main

Тоді після оновлення sut apt-get ви просто висмоктуєте код:

sudo apt-get source apt-шпигун


Дякую за пропозицію, спритний шпигун справді чудово виглядає. Я не впевнений, що це працює добре. Кожен раз, коли я встановлював debian речі в ubuntu, він рано чи пізно ламався через інші залежності.
До

@Till - це завжди щось із трохи більше копання ... як тільки Linux стає більш вимогливим.
dschinn1001

1
Створіть його для ubuntu: rubygems.org/gems/apt-spy2 та github.com/lagged/apt-spy2
до

@ Доки ти не маєш на увазі: Побудуй це ...! чи Побудували його ...? - Я доглядаю наступного разу - зараз тут повний місяць, і я
громію

ти швидкий!
dschinn1001

2

Можливо, не використовуйте рішення, яке вам подобається, але налаштування локального кешу для файлів .deb має бути ідеальним при завантаженні декількох МБ пакету (в основному з них я думаю, що вони однакові), і оскільки ви завантажуєте з того самого сервера, ви може захотіти пожертвувати ПК, щоб зробити кеш і зробити сервер менш зайнятим.

Порядок

Ви повинні мати можливість встановити apt-cacherмашину, яка має багато місця на жорсткому диску (вона вам знадобиться). Ви можете налаштувати це за допомогою посібника сервера Apt-cacher , але дозволяє швидко відновити.

  1. Встановити apt-cacher

    sudo apt-get install apt-cacher apache2

  2. Відредагуйте /etc/default/apt-cacherта встановіть autostartзначення на 1, щоб кеш запустився, коли машина увімкнеться.
  3. Перезапустіть апаш sudo /etc/init.d/apache2 restart
  4. Перевірте кеш за допомогою http://ip-of.your.cache:3142/apt-cacher.
  5. Ви повинні дозволити хосту використовувати кеш, тому редагуйте /etc/apt-cacher/apt-cacher.confта шукайте рядок allowed_hosts. Ви можете встановити підмережі як 192.168.0.0/24або просто *для всіх хостів
  6. Шукайте швидкий і надійний сервер навколо . Ви можете використовувати apt-spyдля цього (ця команда може зайняти години, оскільки вона також перевіряє швидкість кожного сервера).
  7. У своїх клієнтів у вас є два варіанти:

    • встановіть sources.listнаступне:

    deb http: //ip-of.your.cache: 3142 / the.server.you.like / ubuntu / lucid головний універсал з обмеженим доступом

    Змініть на ip-of.your.cacheip вашого кешу та the.server.you.likeна ім'я хоста сервера, який ви будете використовувати. Можна використовувати кілька рядків.

    • Або встановіть apt для використання проксі: редагуйте /etc/apt/apt.conf.d/01proxyта додайте рядок:

    Придбати :: http :: проксі " http: //ip-of.your.cache: 3142 ";


Якщо ви використовуєте apt-spy у всьому світі, це тривало б деякий час ... але ви можете використовувати цю команду, що межує з, наприклад, Європою: apt-spy -d testing -a Europe
dschinn1001

@ dschinn1001 -d testingпахне Debian.
Брайам

ну тоді: apt-spy -a Europe
dschinn1001

"downvote"? - Я не зробив жодної голоси? - буває, що випадково клацаю мишкою - я ніколи не беру участь в голосуванні з метою! так голосували вас! Дякую.
dschinn1001

1

Ви можете спробувати налаштувати власне дзеркало Ubuntu. Таким чином оновлення будуть локальними.

apt-дзеркало потребує високошвидкісного підключення до Інтернету та багато місця на диску

Налаштувати власне дзеркало Ubuntu дуже просто за допомогою apt-дзеркала.

1) перейдіть у сховище дзеркальних приміщень. Створіть резервну копію файлу source.list так:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

2) Відредагуйте файл source.list так:

gksudo gedit /etc/apt/sources.list

3) І вставте наступне у новому рядку:

deb http://apt-mirror.sourceforge.net/ apt-mirror

4) Оновимо індекс упаковки

sudo apt-get update

5) І встановіть дзеркало apt

sudo apt-get install apt-mirror

6) Тепер налаштовано дзеркало Apt, тому давайте розповімо, на яких серверах дзеркало:

sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.old
gksudo gedit /etc/apt/mirror.list

Конфігурація за замовчуванням помістить завантажені файли у папку / var / spool / apt-зеркало. Ось як виглядає файл mirror.list:

############# config ##################
#
set base_path /media/silo/repo
#
# if you change the base path you must create the directories below with write privlages
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch <running host architecture>
set nthreads 20
set tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -security main restricted universe multiverse
clean http://archive.ubuntu.com/ubuntu

це лише дзеркальні двійкові пакети, але якщо ви хочете вихідні пакети, вам слід вставити відповідні рядки. Зазвичай вони приймають форму:

deb-src http://gh.archive.ubuntu.com/ubuntu/ lucid main restricted

7) Тепер біжи apt-mirror. Це займе досить багато часу. Не хвилюйтесь, якщо ви не можете завантажити всі файли за один раз, ви apt-mirrorможете відновити завантаження (вбити його комбінацією клавіш Ctrl+ Cта повторно запустити, коли потрібно продовжити). Гаразд, запустіть влучне дзеркало так:

sudo apt-mirror /etc/apt/mirror.list

Також перегляньте, як створити локальне дзеркало Debian / Ubuntu за допомогою дзеркала

Джерело: Використовуйте дзеркало Apt для створення власного дзеркала Ubuntu


Якщо пам'ять служить мені правильно, apt-mirrorдоступна в сховищах ubuntu.
Брайам

BTW, не забудьте відзначити необхідність багато місця в HD для завантаження повного дзеркала;)
Braiam

Дякую за відповідь, і це чудовий ресурс для налаштування дзеркала, і я це врахував, але тоді мені знадобиться ця настройка як мінімум у трьох різних місцях. Я знаю, що я тут прискіпливий, але все ще відчуваю, що mirrors.ubuntu.comтреба працювати. :)
До

@till mirrors.ubuntu.comніколи не вирішить mirrors.ubuntu.com, але найближчий до вас сервер. Проблема в тому, що сервер, який він вирішує, є ненадійним. Ваша краща гра - це використання надійного сервера з офіційного списку.
Брайам

@Braiam будь-яка ідея, чому тоді повертаються ненадійні дзеркала?
До

1

Я написав сценарій Python під назвою apt-select, який слугує альтернативою CLI методу GUI.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.