Tornando mirror: //mirrors.ubuntu.com altamente disponível

22

Somos uma equipe distribuída, e é por isso que nossas VMs usam a configuração mirror:// do Ubuntu. Nosso /etc/apt/sources.list é semelhante ao seguinte:

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

Isso por si só é bastante surpreendente e muito útil para pessoas que trabalham em diferentes locais - menos local personalização, etc. necessário. Reprovação na teoria.

No dia-a-dia, essa configuração falha com muita frequência. Eu quero dizer 2-3 vezes esta semana.

Agora, mirrors.ubuntu.com retorna ftp.uni-bayreuth.de como meu espelho do closet. Infelizmente, parece estar em baixa.

Isso vem acontecendo há algumas horas e o espelho é hospedado por voluntários em uma universidade e hoje sendo uma sexta-feira, minhas esperanças são baixas de que isso seja corrigido em breve.

Todas as conversas, minhas perguntas são:

  • Alguém usa isso?
  • Como você trabalha com o tempo de inatividade? (minha correção rápida é um script de shell)
  • Como posso ajudar a melhorar essa situação?
por Till 12.07.2013 / 23:22

6 respostas

4

Agradeço todas as informações sobre essa questão, mas como ninguém criou uma solução simples que se encaixasse em nossas circunstâncias, decidi corrigir o problema sozinho

.

Eu criei uma ferramenta (especificamente para o Ubuntu) que eu chamo de apt-spy2 .

O principal objetivo desta ferramenta é encontrar um rápido working espelho. Trabalhar é definido pelo fato de o servidor espelho estar disponível e (espero que :) atualizado.

Não faço suposições sobre se o servidor selecionado é necessariamente o mais próximo e o mais rápido. Eu não estou fazendo nenhum ping ou truques de DNS do GEO - mas até agora isso funciona quando algo quebra.

Como funciona - em poucas palavras:

  1. Eu uso o link ou a lista de espelhos do launchpad para recuperar servidores.
  2. Eu faço uma verificação simples em cada (para o Código de status de resposta HTTP).
  3. LBNL, atualizo /etc/apt/sources.list .

Observação: Isso pressupõe que as pessoas sejam legais e adicionem espelhos adicionais (por exemplo, repositórios de terceiros em /etc/apt/sources.list.d . Mas acho que isso significa que há espaço para melhorias.

Você pode obter essa ferramenta da seguinte forma:

$ [sudo] gem install apt-spy2

O cli vem com list , check , fix e help (com informações estendidas sobre como usá-lo).

Eu tentei documentar o máximo possível no README do projeto.

A versão atual é muito conservadora em 0.5.0 .

O código é de código aberto e a licença é liberal. E eu tomo todas as contribuições.

    
por Till 29.09.2013 / 01:23
9
Pessoalmente acho que a melhor maneira de selecionar os melhores espelhos de repositórios do Ubuntu é usar o método GUI:

Agora, para melhorar a situação descrita na pergunta, você precisa definir algumas regras de alguma forma. Essas regras devem atuar em mirrors.ubuntu.com . Eu posso sugerir algumas regras como segue:

  • faça uma lista dos melhores / preferidos espelhos; há muitos espelhos como você pode ver aqui , aqui ou aqui
  • se você encontrou um bom espelho, adicione-o à lista
  • se um espelho estava quebrado ou quebrado algumas vezes, isso significa que não é um bom espelho e você deve removê-lo da lista
  • você pode usar netselect , apt-spy ou apt-fast
  • e outros, dependendo das suas necessidades.

Em seguida, para ver como você pode trabalhar, posso fornecer um método descrito passo a passo com três exemplos de scripts bash. Primeiro script use os espelhos do país em que você está no momento, em vez de mirrors.ubuntu.com/mirrors.txt (para cada país existe um arquivo de texto com espelhos associados; consulte link ):

  • Em um terminal , execute mkdir -p bin - este comando criará um diretório bin no seu home folder se você ainda não tem.
  • Após executar gedit ~/bin/change_sources.sh - isso criará o novo arquivo change_sources.sh em gedit.
  • Copie e cole um dos próximos scripts no novo arquivo criado:
#!/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() }')
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

ou algo semelhante ao que pode ser encontrado no link :

#!/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() }')
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

ou, um script usando netselect (download de aqui , instale as instruções here ) como izx explicou muito bem em esta resposta :

#!/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 }')
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
  • Salve o arquivo e feche-o.
  • Volte para o terminal e execute: chmod +x ~/bin/change_sources.sh - para conceder acesso de execução para o script.
  • Apenas para teste, para executar seu novo script, digite no terminal ~/bin/change_sources.sh . Isso lhe dará um erro, porque você não tem o direito de editar /etc/apt/sources.list . Então, use sudo ~/bin/change_sources.sh
  • Edite o arquivo crontab do usuário root usando o comando sudo crontab -e e adicione a seguinte linha:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • Eu configurei o cron job para cada hora, mas você pode alterar conforme desejar ou como achar melhor. Veja link nesse sentido.
  • Salve o arquivo e verifique a nova entrada do crontab com sudo crontab -l .
  

NOTA: Para reverter as alterações feitas por este script, exclua a tarefa cron   e siga as indicações da imagem acima ou use o próximo comando no terminal:

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

A partir de agora, o arquivo será alterado dinamicamente após encontrar uma alteração do endereço IP.

Pode não ser a melhor solução, mas, na minha opinião, uma boa solução pode ser dada dessa maneira, como nos scripts acima .

    
por Radu Rădeanu 18.07.2013 / 19:54
2

Houve este comando no Debian 6.0.4:

  

apt-spy

Isso fez o trabalho de encontrar o próximo servidor disponível mais próximo e gerar um novo sources.list

No Ubuntu este comando parece não existir?

Ele ainda existe no Debian 7.0 wheezy:

link

Você pode baixar o seu pacote * .deb aqui:

link

... ainda procurando pelas fontes ...

Você obviamente precisa da Debian-7.0-Installation para obter o código fonte após editar sources-list com entrada:

  

deb-src link wheezy main

Então depois do sudo apt-get update você simplesmente sugaria o código com:

  

sudo apt-get fonte apt-spy

    
por dschinn1001 17.07.2013 / 15:21
2

Talvez não esteja usando a solução que você gosta, mas configurar um cache local para os arquivos .deb deve ser ideal quando você faz o download de vários MB de pacote (a maioria deles é igual) e já que você está baixando da mesma servidor, você pode querer sacrificar um PC para fazer o cache e tornar o servidor menos ocupado.

Procedimento

Você deve ser capaz de definir apt-cacher em uma máquina que tenha muito espaço no disco rígido (você precisaria dela). Você pode configurar isso usando o guia do servidor Apt-cacher , mas vamos fazer um rápido resumo.

  1. Instale apt-cacher

    sudo apt-get instala o apt-cacher apache2

  2. Edite /etc/default/apt-cacher e defina o valor autostart para 1, para que seu cache inicie quando a máquina for ligada.
  3. Reinicie o apache sudo /etc/init.d/apache2 restart
  4. Teste seu cache usando http://ip-of.your.cache:3142/apt-cacher .
  5. Você deve permitir que o host use o cache, então edite /etc/apt-cacher/apt-cacher.conf e procure a linha allowed_hosts . Você pode definir sub-redes como 192.168.0.0/24 ou apenas * para todos os hosts
  6. Procure um servidor rápido e confiável . Você pode usar apt-spy para isso (esse comando pode levar horas, já que também testa a velocidade de cada servidor).
  7. Nos seus clientes, você tem duas opções:

    • defina o sources.list da seguinte forma:

    deb link universo principal restrito lúcido multiverso

    Altere o ip-of.your.cache para o ip do seu cache e the.server.you.like para o nome do host do servidor que você usará. Você pode usar várias linhas.

    • Ou configure o apt para usar um proxy: edite /etc/apt/apt.conf.d/01proxy e adicione a linha:

    Adquirir :: http :: Proxy " link ";

por Braiam 21.07.2013 / 19:07
1

Você pode tentar configurar seu próprio espelho do Ubuntu. Dessa forma, as atualizações serão locais.

o apt-mirror precisa de uma conexão de internet de alta velocidade e muito espaço em disco

Configurar o seu próprio mirror do Ubuntu é muito fácil usando o apt-mirror.

1) vá para o repositório apt-mirror. Faça backup do seu arquivo sources.list da seguinte forma:

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

2) Edite o arquivo sources.list da seguinte forma:

gksudo gedit /etc/apt/sources.list

3) E insira o seguinte em uma nova linha:

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

4) Vamos atualizar o índice de pacotes

sudo apt-get update

5) E instale o apt-mirror

sudo apt-get install apt-mirror

6) O Apt-mirror está configurado agora, então vamos dizer quais servidores espelhar:

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

A configuração padrão colocará seus arquivos baixados na pasta / var / spool / apt-mirror. Veja como o arquivo mirror.list se parece:

############# 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

isso espelha apenas pacotes binários, mas se você quiser pacotes fonte, você deve inserir as linhas apropriadas. Eles geralmente assumem a forma:

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

7) Agora, execute apt-mirror . Isso vai demorar um pouco. Não se preocupe se você não pode baixar todos os arquivos de uma só vez, apt-mirror pode retomar downloads (mate-o com a combinação de teclas Ctrl + C e execute-o novamente quando você quiser continuar). Ok, execute o apt-mirror da seguinte forma:

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

Confira também Como criar um espelho Debian / Ubuntu local com o apt-mirror

Fonte: Use Apt-mirror para criar seu próprio espelho do Ubuntu

    
por Mitch 22.07.2013 / 17:05
1

Eu escrevi um script Python chamado apt-select para servir como uma alternativa CLI ao método GUI. / p>

O script consulta cada espelho via TCP, imprime em espelhos stdout com a menor latência e gera um novo arquivo sources.list . Há também várias opções que permitem escolher entre uma lista de espelhos classificados e recuperar informações como quando o espelho foi atualizado pela última vez e sua capacidade de largura de banda.

    
por John B 18.01.2015 / 04:21

Tags