Создание зеркала: //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 ... 8och
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 пользователя root с помощью 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
Думаю, я бы поспорил, можно ли когда-нибудь считать графический интерфейс под Linux традиционным способом. :) Но все равно: твой первый сценарий решает проблему, у меня нет. Синтаксис зеркала уже получает мои немецкие зеркала, или США, или где бы люди ни находились. Второй сценарий использует зеркала стран - кажется, что они имеют наименьшую доступную пропускную способность (видно, что в списке архивных зеркал на панели запуска), третий сценарий предполагает, что быстрое (или ближайшее) зеркало действительно является лучшим. В исходную точку. Я сейчас пишу небольшой apt-spyскрипт. Буду обновлять здесь позже.
до
1
@ До сих пор ваш вопрос был « Как вы справляетесь с простоями? » И « Как я могу помочь улучшить эту ситуацию? ». Я показал, как я работаю, и предложил вам, как вы можете помочь улучшить ... Кроме того, если вы прочитаете мой ответ до конца, вы увидите, что я осознаю, что « это может быть не лучшим решением, но я думаю, что хорошее решение может быть дано таким образом, как в сценариях выше ". И, наконец, если вы заинтересованы в исправлении / улучшении неработающих серверов, здесь это кажется не по теме, и вам следует поговорить с владельцами этих серверов.
Раду Рэдяну
2
Я не думаю, что это не по теме. Различные люди из Canonical / Ubuntu сказали мне добавить мой вопрос здесь. Вот почему я здесь, и я также думаю, почему назначена награда.
до
1
@ Пока, вопрос хороший, но не так, как вы сформулировали его в этих комментариях. Никто не ответит на вопрос «как починить сломанный зеркальный сервер», если он не является администратором на соответствующем сервере.
Раду Рэдяну
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
Раду Рэдяну,
@ RaduRădeanu Я спрашиваю, загрузил ли он его, так как мне интересно что-то упаковать в Debian.
Брайам
@Braiam Я не упаковывал это, но я приветствовал бы это, если бы кто-то сделал это. :)
до
@ Braiam Кстати, это вряд ли будет работать с Debian. ; (Работает только с Ubuntu.
До
2

В Debian 6.0.4 была эта команда:

кв-шпион

Это позволило автоматически найти следующий ближайший доступный сервер и создать новый sources.list

В Ubuntu эта команда, кажется, не существует?

Он все еще существует в Debian 7.0:

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

Затем, после обновления sudo apt-get, вы просто пососете код:

sudo apt-get source apt-spy

dschinn1001
источник
Спасибо за предложение, apt-spy выглядит великолепно. Я не уверен, что это работает хорошо. Каждый раз, когда я устанавливал 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 установить apt-cacher apache2

  2. Отредактируйте /etc/default/apt-cacherи установите autostartзначение 1, чтобы кэш запускался при включении компьютера.
  3. Перезапустите Apache 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 главная ограниченная вселенная multiverse

    Измените ip-of.your.cacheip вашего кэша и the.server.you.likeимя хоста сервера, который вы будете использовать. Вы можете использовать несколько строк.

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

    Получить :: http :: Proxy " http: //ip-of.your.cache: 3142 ";

Braiam
источник
Если бы вы использовали apt-spy по всему миру, это продлилось бы некоторое время ... но вы можете использовать эту команду, например, для
границы
@ dschinn1001 -d testingпахнет Debian.
Брайам
ну тогда: apt-spy -a Европа
dschinn1001
"downvote"? - Я не понизил голосование? - иногда случается, что я случайно щелкаю мышью - я никогда не голосую с целью! так проголосовал за тебя! Спасибо.
dschinn1001
1

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

apt-mirror требуется высокоскоростное интернет-соединение и много дискового пространства

Настроить свое собственное зеркало Ubuntu очень легко с помощью apt-mirror.

1) зайти в репозиторий apt-mirror. Сделайте резервную копию вашего файла sources.list следующим образом:

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

2) Отредактируйте файл sources.list следующим образом:

gksudo gedit /etc/apt/sources.list

3) И вставить следующее в новой строке:

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

4) Давайте обновим индекс пакета

sudo apt-get update

5) И установить apt-mirror

sudo apt-get install apt-mirror

6) Apt-mirror теперь настроен, поэтому давайте расскажем, какие серверы зеркалировать:

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

Конфигурация по умолчанию поместит ваши загруженные файлы в папку / var / spool / apt-mirror. Вот как выглядит файл 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и перезапустите, если хотите продолжить). Хорошо, запустите apt-mirror примерно так:

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

Также посмотрите, как создать локальное зеркало Debian / Ubuntu с помощью apt-mirror

Источник: Используйте Apt-mirror, чтобы создать свое собственное зеркало Ubuntu.

Митч
источник
Если память мне не изменяет, apt-mirrorона доступна в репозиториях Ubuntu.
Брайам
Кстати, не забудьте заметить, что для загрузки полного зеркала нужно много места на HD;)
Брайам
Спасибо за ответ, и это отличный ресурс для настройки зеркала, и я обдумал это, но тогда мне понадобится эта установка как минимум в 3 разных местах. Я знаю, что я привередлив, но я все еще чувствую, что это mirrors.ubuntu.comдолжно сработать. :)
до
@till mirrors.ubuntu.comникогда не разрешит mirrors.ubuntu.com, но ближайший к вам сервер. Проблема в том, что этот сервер ненадежен. Ваша лучшая игра - использование надежного сервера из официального списка.
Брайам
@Braiam есть идеи, почему ненадежные зеркала возвращаются им тогда?
до
1

Я написал скрипт Python под названием apt-select, который будет служить альтернативой CLI методу GUI.

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

Джон Б
источник