Como você seleciona o espelho mais rápido na linha de comando?

137

Quero atualizar meu sources.listarquivo com o servidor mais rápido na linha de comando em uma nova instalação do Ubuntu Server. Eu sei que isso é trivialmente fácil com a GUI, mas não parece haver uma maneira simples de fazer isso na linha de comando?

Evan
fonte
3
Em expressões regulares, o. caractere significa qualquer caractere. . Se você quer que ele corresponder a um, você precisa escapar com \, então us.archive [..] deve ser us \ .archive [..]
Egil
Veja também: askubuntu.com/questions/37753/…
Jorge Castro
2
No meu caso, tive que substituir os #sinais por barras ( /). Caso contrário, eu tenho sed: -e expression #1, char 53: unterminated o comando 's'.
Ethan Leroy
@EthanLeroy é o mesmo aqui com o Ubuntu 12.04.3
logoff
Deve ser barra não hash.
Matt H

Respostas:

22
Pakket netselect-apt

    dapper (net): Escolha o espelho Debian mais rápido com netselect 
    [universo]
    0.3.ds1-5: todos
    hardy (net): Escolha o espelho Debian mais rápido com netselect 
    [universo]
    0.3.ds1-11: todos
Pakket apt-spy

    dapper (admin): grava um arquivo sources.list com base em testes de largura de banda 
    [universo]
    3.1-14: amd64 i386 powerpc

Não está incluído no Ubuntu mais recente devido a problemas de segurança, parece: veja: Relatório de Bug

Mas .. Eu normalmente apenas uso o ping para descobrir a velocidade de uma conexão com algum local. Quantidade de saltos e latência.

Rinzwind
fonte
4
não netselect-apt não parece estar disponível no Ubuntu 12.04
offby1
8
Esta não é a mais votada nem a melhor resposta, verifique a próxima
ntg
Qual resposta é a "próxima" pode ter mudado.
precisa saber é
apt-spy está desaparecido no debian 9, mas netselect-apt é OK
netawater
147

Você não tem que fazer qualquer busca mais - como ajmitch tem explicado , você pode usar deb mirrorpara ter o melhor espelho escolheu para você automaticamente.

O apt-get agora suporta um método 'espelho' que selecionará automaticamente um bom espelho com base na sua localização. Colocando:

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

na parte superior do /etc/apt/sources.listarquivo, deve ser tudo o que é necessário para que ele escolha automaticamente um espelho para você, com base na sua localização geográfica.

Os usuários Lucid (10.04), Maverick (10.10), Natty (11.04) e Oneiric (11.10) podem ser substituídos precisepelo nome apropriado.

badp
fonte
Ótima dica. Observe que, depois de fazer a alteração, você precisa executar sudo apt-get updateantes de fazer qualquer apt-get installcoisa para usar o espelho mais próximo.
Simon East
2
Relacionados: askubuntu.com/q/319433/11244
Até
23
Ótima dica, mas inútil no meu caso. Ele funciona em geolocalização, fornecendo o servidor local, que é muito mais lento onde estou. A distância temporal da rede é o fator importante aqui, não a distância espacial.
31413 jarondl
11
atualmente quebrado: bugs.launchpad.net/ubuntu/+source/apt/+bug/1613184
marathon
11
@marathon corrigido pelo menos em 18.04+
Pablo A
49

Aqui está uma maneira que sempre funcionará, usando boa netselecte velha grepmagia:

O hacker do terminal-addict "encontre o melhor servidor"!

  • Faça o download e dpkg -i netselectpara a sua arquitetura no site da Debian. (tem cerca de 125 KB, sem dependências)
  • Encontre os espelhos mais rápidos do Ubuntu a partir da sua localização, atualizados ou no máximo seis horas atrás com isso (explicarei abaixo, desculpe, mas não se divide muito bem no 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 torna um pouco detalhado - você deseja ver pontos de progresso e mensagens informando que diferentes espelhos mapeados para o mesmo IP foram mesclados :)
    2. -sN controla quantos espelhos você deseja no final (por exemplo, os 10 principais espelhos)
    3. -tN é quanto tempo cada espelho é testado em velocidade (o padrão é 10; quanto maior o número, mais tempo leva, mas mais confiáveis ​​são os resultados).
  • Este é o material das aspas (não cole, apenas para explicação)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 "status (PARA CIMA | SEIS)"
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetobtém o status de espelho mais recente em https://launchpad.net/ubuntu/+archivemirrors .
    2. O primeiro grepextrai espelhos atualizados ou com seis horas de atraso, juntamente com 8 linhas de contexto anterior, que incluem os URLs ftp / http reais
    3. O segundo grepextrai esses URLs ftp / http
  • Aqui está um exemplo de saída da Califórnia, EUA:

    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/
    
    • As "fileiras" são uma métrica arbitrária; mais baixo é geralmente melhor.
    • Se você está se perguntando por que o espelho kernel.org Suécia-UE e um espelho NZ estão entre os três primeiros da Califórnia , eu também ;-) A verdade é que netselectnem sempre escolhe o URL mais apropriado para exibir quando vários espelhos são mapeados para um único IP; número 3 também é conhecido como nz.archive.ubuntu.com!
ish
fonte
9
O netselect seleciona espelhos com baixa latência udp ou icmp. Não necessariamente escolhe espelhos que podem oferecer mais largura de banda.
Tobu 13/10
O @pix aprovou sua edição, mas não é a substituição de comandos que resulta na substituição de novas linhas. É a divisão de campo subsequente que removeu as novas linhas. A substituição de comando remove apenas as novas linhas à direita.
muru
25

Oneliner que seleciona o melhor espelho (por velocidade de download) com base no mirrors.ubuntu.com para o seu 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  }'
KAndy
fonte
2
Para ter mais opções de substituir no final: sort -gr | head -3.
Pablo A
11
Atualmente, curl -s http://mirrors.ubuntu.com/mirrors.txtretorna apenas uma linha: http://archive.ubuntu.com/ubuntu/que anula o objetivo de escolher entre várias. : - /
Stéphane Gourichon
sim, então esse método é NG.
Netawater
Achei a curlparte desta resposta útil porque curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzonde [server_url]está o URL do espelho base listado em mirrors.txt, permite uma comparação rápida dos primeiros ~ 100K do arquivo de índice do espelho.
21818 jamesc
Isso testa a velocidade de transferência, o que é definitivamente uma melhoria em relação à seleção de nets. Ele está apenas baixando 10k de cada servidor, o que pode não ser uma ótima representação da velocidade constante de transferência em conexões mais rápidas. Aumente esse 102400 para testar com um download maior
Phil Miller
17

Aqui está um script Python que escrevi que encontra espelhos com a menor latência de TCP.

O script também fornece largura de banda e dados de status obtidos da barra de ativação e gerará um novo sources.listarquivo automaticamente ou usando um espelho escolhido em uma lista.

Um exemplo de uso que permite escolher entre 5 espelhos americanos com a menor latência da sua máquina:

$ apt-select --country US -t 5 --choose
John B
fonte
5
Quero que você saiba que criei um pacote debian com seu script que está pronto para ser usado de uma maneira muito fácil e direta: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto
Esta é uma solução perfeita, pois tentei os outros métodos. para tornar o noob amigável, escrevi um post detalhando esse método :. blog.kmonsoor.com/…
kmonsoor 11/11
Isso é ótimo, já que netselectnão está disponível nas versões mais recentes do Ubuntu.
Tek
Por favor, mostre como usá-lo em seu post
Jonathan
@Jonathan done. O uso completo está no READMEprimeiro link.
John B #
5

Desenvolvi um script nodejs simples baseado em ping que testa os servidores listados em mirrors.ubuntu.com/mirrors.txt e retorna o mais rápido:

sudo npm install -g ffum
ffum

Entre em contato se achar útil ou tiver alguma sugestão (=

tentáculo
fonte
O ffum não funciona: Erro de conexão.
James Fu
Não funciona: saída vazia.
Juan Simón
git cloneo repo e corrernode ffum
Michael
Impressionante, funciona para mim! Eu tive um bug em que ele estava procurando nó em vez de nodejs ... também seria legal ter um pouco detalhado de cada velocidade de arquivamento testada.
tweak2
4

Eu sei que isso não responde diretamente à pergunta do OP, mas há um botão na versão desktop / GUI do Ubuntu que encontra o melhor espelho para você. Parecia funcionar muito bem, então eu examinei brevemente, mas não tive tempo para acompanhar.

A razão pela qual eu trouxe isso à tona é porque acho que seria bastante direto e utilizável transformá-lo em um utilitário de linha de comando.

Se alguém estiver interessado, o teste parece estar localizado em:

/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

Novamente, isso foi o mais longe que cheguei, mas imaginei que deixaria isso aqui caso alguém quisesse. Provavelmente voltarei a conversar quando tiver mais tempo.

copeland3300
fonte
No 18.04, esse script detecta quando é chamado como um aplicativo (como principal ) de um terminal .... e apenas imprime seus resultados no terminal. Certifique-se de dar tempo suficiente para concluir. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg
Infelizmente, não funciona corretamente. Esse script pega os 5 servidores com o ping mais baixo e depois os classifica por largura de banda baixando um arquivo ~ 1M (Packages.gz em main a partir do seu dist). Se você modificar o script para aumentá-lo para 25 servidores e baixar um arquivo de 500 milhões, obtém resultados completamente diferentes, que estão corretos neste momento.
Jocelyn
2

Comando que encontra espelhos rápidos

No Ubuntu 18.04 , obtive bons resultados executando

 python /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

Isso imprime uma lista de espelhos organizados por "tempo" (não explicados) e, em seguida, usei um dos espelhos mais bem classificados.

Mais detalhes

Para mim, foi útil testar alguns dos principais resultados desse comando, definindo-os como meu espelho /etc/apt/sources.liste, em seguida, executando

time sudo apt update

para ver quanto tempo levou para baixar a lista de pacotes desse espelho. Testei as três principais sugestões e todas foram rápidas, mas uma delas foi duas vezes mais rápida que as outras duas no time sudo apt updateteste.

Aqui está um exemplo de saída de 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
ntc2
fonte
11
Infelizmente, não funciona corretamente. Esse script pega os 5 servidores com o ping mais baixo e depois os classifica por largura de banda baixando um arquivo ~ 1M (Packages.gz em main a partir do seu dist). Se você modificar o script para aumentá-lo para 25 servidores e baixar um arquivo de 500 milhões, obtém resultados completamente diferentes, que estão corretos neste momento.
Jocelyn
1

Para a linha de comando, você pode usar uma ferramenta Python chamada apt-smart

Um exemplo de uso que permite listar espelhos classificados em seu país (detectar automaticamente):

$ apt-smart -l

Com -l, ou --list-mirrorsvocê obterá (exemplo de saída do servidor 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

Obviamente, você apt-smarttambém pode alterar seu sources.list se desejar:

$ apt-smart -a

Com -aou--auto-change-mirror para descobrir os espelhos disponíveis, classifique os espelhos pela velocidade da conexão e atualize o status e atualize /etc/apt/sources.list para usar o melhor espelho disponível.

Com -c, ou --change-mirror MIRROR_URLpara atualizar /etc/apt/sources.list para usar o MIRROR_URL fornecido.

Comparado com outras ferramentas:

  • apt-smart localiza automaticamente onde você está, assim você não precisa especificar o país quando viaja para o exterior.
  • apt-smartfaz download HTTP real de cada espelho para obter resultados mais precisos (largura de banda e status) e suporta proxy HTTP, em vez de usar pinge confiar nos dados imprecisos da barra de ativação.
  • apt-smart está sendo mantido, enquanto a maioria das outras ferramentas deixa os problemas sem correção por um longo tempo.

Você pode instalar facilmente apt-smartvia pip, para obter comandos e usos detalhados de instalação do copy'n'paste, consulte o Leia-me do Projeto .

Martin X
fonte
0

Eu uso o seguinte para selecionar automaticamente os espelhos (e desativar o 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
iheggie
fonte
0

Se você quiser que um utilitário faça isso, poderá implementá-lo como um script bash simples como o seguinte. Isso pode ser útil se você desejar usar o utilitário sem precisar de 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
gmatht
fonte
0

As outras respostas, incluindo a resposta aceita, não são mais válidas (para o Ubuntu 11.04 e versões mais recentes) porque recomendaram pacotes Debian como netselect-apte apt-spyque não funcionam com o Ubuntu.

Existem duas respostas de trabalho diferentes para esta pergunta abaixo:

  1. Use o método apt-getmirror:

    Este método solicita ao servidor Ubuntu uma lista de espelhos perto de você com base no seu IP e seleciona um deles. A alternativa mais fácil, com a menor desvantagem de que às vezes o espelho mais próximo pode não ser o mais rápido.

  2. Linha de comando foo usando netselect
    Mostra como usar a ferramenta netselect para encontrar os servidores que você atualizou recentemente mais rapidamente - em termos de rede, não geograficamente. Use sedpara substituir os espelhos sources.list.

Use sedpara substituir espelhos emsources.list

Como algumas fontes usam pastas adicionais como parte do caminho, pode ser melhor usar a sintaxe do separador alternativo.

sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list
k0pernikus
fonte