Come si seleziona il mirror più veloce dalla riga di comando?


137

Voglio aggiornare il mio sources.listfile con il server più veloce dalla riga di comando in una nuova installazione di Ubuntu Server. So che questo è banalmente facile con la GUI, ma non sembra esserci un modo semplice per farlo dalla riga di comando?


3
In espressioni regolari, il. carattere significa qualsiasi personaggio. Se vuoi che corrisponda a., Devi scappare con \, quindi us.archive [..] dovremmo essere noi \ .archive [..]
Egil


2
Nel mio caso ho dovuto sostituire i #segni con barre ( /). Altrimenti ho ricevuto sed: -e expression #1, char 53: unterminated il comando.
Ethan Leroy,

@EthanLeroy stesso qui con Ubuntu 12.04.3
disconnessione il

Dovrebbe essere barra non hash.
Matt H

Risposte:


22
Pakket netselect-apt

    dapper (net): scegli il mirror Debian più veloce con netselect 
    [universo]
    0.3.ds1-5: tutti
    hardy (net): scegli il mirror Debian più veloce con netselect 
    [universo]
    0.3.ds1-11: tutti
Pakket apt-spy

    dapper (admin): scrive un file sources.list basato su test di larghezza di banda 
    [universo]
    3.1-14: amd64 i386 powerpc

Sembra che non sia incluso in Ubuntu più recente a causa di problemi di settarietà: vedi: Segnalazione bug

Ma .. di solito uso solo il ping per scoprire la velocità di una connessione in qualche posizione. Quantità di luppolo e latenza.


4
netselect-apt non sembra essere disponibile in Ubuntu 12.04
fuori dal 1 °


8
Questa non è la più votata, o la risposta migliore più, controlla la prossima
ntg

Quale risposta è la "successiva" potrebbe essere cambiata.
Gmatht,

apt-spy è andato su debian 9, ma netselect-apt è OK
netawater

147

Non devi più effettuare alcuna ricerca: come ha spiegato ajmitch , puoi scegliere automaticamente il mirror migliore per te.deb mirror

apt-get ora supporta un metodo 'mirror' che selezionerà automaticamente un buon mirror in base alla tua posizione. Mettendo:

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

nella parte superiore del /etc/apt/sources.listfile dovrebbe essere tutto ciò che è necessario per farlo scegliere automaticamente un mirror in base alla posizione geografica.

Gli utenti Lucid (10.04), Maverick (10.10), Natty (11.04) e Oneiric (11.10) possono sostituire precisecon il nome appropriato.


Ottimo consiglio Si noti che dopo aver apportato la modifica è necessario eseguire sudo apt-get updateprima di fare qualsiasi apt-get installper utilizzare il mirror più vicino.
Simon East,


23
Bel suggerimento, ma inutile nel mio caso. Funziona sulla geolocalizzazione, dandomi il server locale, che è molto più lento dove sono. La distanza temporale della rete è il fattore importante qui, non la distanza spaziale.
Jarondl


1
@marathon risolto almeno il 18.04+
Pablo A

49

Ecco un modo che funzionerà sempre, usando il buon vecchio netselecte un po 'di grepmagia:

L'hack "trova il miglior server" del tossicodipendente!

  • Scarica e dpkg -i netselectper la tua architettura dal sito Web Debian. (è di circa 125 KB, nessuna dipendenza)
  • Trova i mirror Ubuntu più veloci dalla tua posizione, aggiornati o al massimo sei ore indietro con questo (lo spiegherò di seguito, mi dispiace che non si divida bene in 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 rende un po 'prolisso - vuoi vedere i punti di avanzamento e i messaggi che ti dicono che mirror diversi che si associano allo stesso IP sono stati uniti :)
    2. -sN controlla quanti mirror vuoi alla fine (es. i 10 mirror migliori)
    3. -tN indica per quanto tempo ciascun mirror viene testato in base alla velocità (il valore predefinito è 10; maggiore è il numero, maggiore è il tempo impiegato ma più affidabili saranno i risultati).
  • Questo è il materiale dei backquotes (non incollare, solo per spiegazione)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 "status (UP | SIX)"
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetestrae l'ultimo stato mirror da https://launchpad.net/ubuntu/+archivemirrors .
    2. Il primo grepestrae mirror che sono aggiornati o sei ore indietro, insieme a 8 righe del contesto precedente che include gli URL ftp / http effettivi
    3. Il secondo grepestrae questi URL ftp / http
  • Ecco un esempio di output dalla California, USA:

    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/
    
    • I "ranghi" sono una metrica arbitraria; più basso è di solito migliore.
    • Se ti stai chiedendo perché il mirror kernel.org Svezia-UE e un mirror NZ siano tra i primi tre in California , anche io ;-) La verità è che netselectnon sempre si sceglie l'URL più appropriato da visualizzare quando più mirror si associano a un singolo IP; il numero 3 è anche noto come nz.archive.ubuntu.com!

9
netselect seleziona i mirror con bassa latenza udp o icmp. Non seleziona necessariamente i mirror che possono dare più larghezza di banda.
Tobu,

@pix Ho approvato la tua modifica, ma non è la sostituzione dei comandi che comporta la sostituzione di nuove righe. È la successiva divisione del campo che ha rimosso le nuove righe. La sostituzione dei comandi rimuove solo le nuove righe finali.
Muru,

25

Oneliner che seleziona il miglior mirror (in base alla velocità di download) in base a mirrors.ubuntu.com per il tuo 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
Per avere più opzioni sostituire alla fine: sort -gr | head -3.
Pablo A

1
Attualmente, curl -s http://mirrors.ubuntu.com/mirrors.txtrestituisce solo una riga: http://archive.ubuntu.com/ubuntu/che vanifica lo scopo di scegliere tra diversi. : - /
Stéphane Gourichon,

sì, quindi questo metodo è NG.
netawater,

Ho trovato utile la curlparte di questa risposta perché curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzdov'è [server_url]elencato l'URL del mirror di base mirrors.txt, consente un confronto veloce tra i primi ~ 100K del file indice dal mirror.
Jamesc,

Questo verifica la velocità di trasferimento, che è decisamente un miglioramento rispetto a netselect. Sta solo scaricando 10k da ciascun server, il che potrebbe non essere un'ottima rappresentazione della velocità di trasferimento costante su connessioni più veloci, però. Aumenta quel 102400 per testarlo con un download più grande
Phil Miller,

17

Ecco uno script Python che ho scritto che trova i mirror con la latenza TCP più bassa.

Lo script fornisce inoltre dati sulla larghezza di banda e sullo stato presi dal launchpad e genererà sources.listautomaticamente un nuovo file o usando un mirror scelto da un elenco.

Un esempio di utilizzo che ti consente di scegliere tra 5 mirror statunitensi con la latenza più bassa sul tuo computer:

$ apt-select --country US -t 5 --choose

5
Voglio farti sapere che ho creato un pacchetto debian con il tuo script che è pronto per essere utilizzato in un modo molto semplice e diretto: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto,

questa è una soluzione perfetta, poiché ho provato gli altri metodi. per rendere amichevole il noob, ho scritto un post in dettaglio questo metodo :. blog.kmonsoor.com/…
kmonsoor l'

Questo è fantastico, dal momento che netselectnon è disponibile nelle versioni più recenti di Ubuntu
Tek

Per favore, mostra come usarlo nel tuo post
Jonathan,

@Jonathan fatto. Il pieno utilizzo è nel READMEprimo link.
John B,

5

Ho sviluppato un semplice script nodejs basato su ping che verifica i server elencati su mirrors.ubuntu.com/mirrors.txt e restituisce il più veloce:

sudo npm install -g ffum
ffum

Per favore fatemi sapere se lo trovate utile o avete suggerimenti (=


ffum non funziona: errore di connessione.
James Fu,

Non funziona: svuota l'output.
Juan Simón,

git cloneil repository ed eseguinode ffum
Michael,

Fantastico, funziona per me! Avevo un bug in cui cercava il nodo invece del nodejs ... sarebbe stato bello avere un po 'dettagliato di ogni velocità di archiviazione testata.
tweak2,

4

So che questo non risponde direttamente alla domanda dell'OP, ma c'è un pulsante nella versione desktop / GUI di Ubuntu che trova il mirror migliore per te. Sembrava funzionare abbastanza bene, quindi ho esaminato brevemente, ma non ho avuto il tempo di seguire.

Il motivo per cui lo faccio apparire è perché penso che sarebbe piuttosto semplice e utilizzabile trasformarlo in un'utilità da riga di comando.

Se qualcuno è interessato, il test sembra trovarsi in:

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

Ancora una volta, è tutto per quanto ho ottenuto, ma ho pensato che avrei lasciato questo qui nel caso qualcuno lo volesse. Probabilmente lo riprenderò quando avrò ancora un po 'di tempo.


Il 18.04, questo script rileva quando viene invocato come applicazione (come principale ) da un terminale .... e stampa i suoi risultati sul terminale. Assicurati di dargli abbastanza tempo per completare. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg

Purtroppo non funziona correttamente. Questo script prende i 5 server con il ping più basso, quindi li classifica per larghezza di banda scaricando un file ~ 1M (Packages.gz in main dalla tua dist). Se si modifica lo script per aumentarlo a 25 server e scaricare un file 500M, si ottengono risultati completamente diversi, che questa volta sono corretti.
Giovedì

2

Comando che trova specchi veloci

Su Ubuntu 18.04 ho ottenuto buoni risultati eseguendo

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

Che stampa un elenco di mirror organizzati per "tempo" (non spiegato), e quindi ho usato uno dei mirror con il punteggio più alto.

Più dettagli

Per me, è stato utile testare alcuni dei migliori risultati emessi da quel comando impostandoli come mio mirror /etc/apt/sources.liste poi facendo

time sudo apt update

per vedere quanto tempo è stato necessario per scaricare l'elenco dei pacchetti da quel mirror. Ho testato i primi tre suggerimenti ed erano tutti veloci, ma uno di loro era due volte più veloce degli altri due nel time sudo apt updatetest.

Ecco un esempio di output da 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
Purtroppo non funziona correttamente. Questo script prende i 5 server con il ping più basso, quindi li classifica per larghezza di banda scaricando un file ~ 1M (Packages.gz in main dalla tua dist). Se si modifica lo script per aumentarlo a 25 server e scaricare un file 500M, si ottengono risultati completamente diversi, che questa volta sono corretti.
Giovedì

1

Per la riga di comando, puoi usare uno strumento Python chiamato apt-smart

Un esempio di utilizzo che ti consente di elencare i mirror classificati nel tuo paese (rilevare automaticamente):

$ apt-smart -l

Con -l, o --list-mirrors, otterrai (esempio di output dal server US Travis CI):

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

Naturalmente, apt-smartpuoi anche cambiare la tua sources.list se vuoi:

$ apt-smart -a

Con -a, o--auto-change-mirror per scoprire i mirror disponibili, classificare i mirror in base alla velocità di connessione e aggiornare lo stato e aggiornare /etc/apt/sources.list per utilizzare il miglior mirror disponibile.

Con -co --change-mirror MIRROR_URLper aggiornare /etc/apt/sources.list per utilizzare il MIRROR_URL specificato.

Rispetto ad altri strumenti:

  • apt-smart trova automaticamente dove ti trovi, quindi non è necessario specificare il paese quando viaggi all'estero.
  • apt-smartesegue il download HTTP reale da ciascun mirror per ottenere risultati più accurati (larghezza di banda e stato) e supporta il proxy HTTP, anziché utilizzare pinge fare affidamento su dati imprecisi del launchpad.
  • apt-smart viene mantenuto, mentre la maggior parte degli altri strumenti lascia i problemi non risolti per lungo tempo.

Puoi installarlo facilmente apt-smarttramite pip, per i comandi e gli usi dettagliati per l'installazione e l'uso di copy'n'paste, consulta il file Leggimi del progetto .


0

Uso quanto segue per selezionare automaticamente i mirror (e disabilitare 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

Se si desidera che un'utilità esegua questa operazione, è possibile implementare tale utilità come un semplice script bash come il seguente. Questo potrebbe essere utile se si desidera utilizzare l'utilità senza bisogno di 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

Le altre risposte, inclusa la risposta accettata, non sono più valide (per Ubuntu 11.04 e successive) perché hanno raccomandato pacchetti Debian come netselect-apte apt-spyche non funzionano con Ubuntu.

Di seguito sono disponibili due diverse risposte operative a questa domanda:

  1. Usa il metodo apt-getmirror:

    Questo metodo richiede al server Ubuntu un elenco di mirror vicino a te in base al tuo IP e ne seleziona uno. L'alternativa più semplice, con il rovescio della medaglia che a volte lo specchio più vicino potrebbe non essere il più veloce.

  2. Riga di comando foo utilizzando netselect
    Mostra come utilizzare lo strumento netselect per trovare i server più recenti aggiornati di recente, a livello di rete, non geograficamente. Utilizzare sedper sostituire gli specchi in sources.list.

Utilizzare sedper sostituire gli specchi insources.list

Poiché alcune fonti utilizzano cartelle di addizione come parte del loro percorso, potrebbe essere meglio utilizzare la sintassi del separatore alternativo.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.