¿Cómo selecciona el espejo más rápido desde la línea de comando?

137

Quiero actualizar mi sources.listarchivo con el servidor más rápido desde la línea de comandos en una nueva instalación de Ubuntu Server. Sé que esto es trivialmente fácil con la GUI, pero no parece haber una manera simple de hacerlo desde la línea de comandos.

Evan
fuente
3
En expresiones regulares, el. carácter significa cualquier personaje. Si desea que coincida con a., Debe escapar con \, así que us.archive [..] debería ser us \ .archive [..]
Egil
Relacionado: askubuntu.com/questions/37753/…
Jorge Castro
2
En mi caso tuve que reemplazar los #signos con barras ( /). De lo contrario, tengo sed: -e expression #1, char 53: unterminated el 'comando'.
Ethan Leroy
@EthanLeroy lo mismo aquí con Ubuntu 12.04.3
cierre sesión el
Debe ser barra oblicua no hash.
Matt H

Respuestas:

22
Pakket netselect-apt

    dapper (net): elija el espejo Debian más rápido con netselect 
    [universo]
    0.3.ds1-5: todos
    hardy (net): elija el espejo Debian más rápido con netselect 
    [universo]
    0.3.ds1-11: todos
Pakket apt-spy

    apuesto (administrador): escribe un archivo sources.list basado en pruebas de ancho de banda 
    [universo]
    3.1-14: amd64 i386 powerpc

No se incluye en Ubuntu más nuevo debido a problemas de seguridad parece: ver: Informe de error

Pero ... normalmente solo uso ping para averiguar la velocidad de una conexión a alguna ubicación. Cantidad de lúpulo y latencia.

Rinzwind
fuente
44
netselect-apt no parece estar disponible en Ubuntu 12.04
offby1
8
Esta no es la más votada, o la mejor respuesta, marque la siguiente
ntg
Qué respuesta es la "siguiente" podría haber cambiado.
gmatht
apt-spy desapareció en debian 9, pero netselect-apt está bien
netawater
147

Ya no tiene que hacer ninguna búsqueda: como ha explicado ajmitch , puede usar para que el mejor espejo sea elegido automáticamente.deb mirror

apt-get ahora admite un método 'espejo' que seleccionará automáticamente un buen espejo en función de su ubicación. Poniendo:

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

en la parte superior de su /etc/apt/sources.listarchivo debe estar todo lo que se necesita para que elija automáticamente un espejo en función de su ubicación geográfica.

Los usuarios de Lucid (10.04), Maverick (10.10), Natty (11.04) y Oneiric (11.10) pueden reemplazar precisecon el nombre apropiado.

badp
fuente
Gran consejo Solo tenga en cuenta que después de realizar el cambio, debe ejecutar sudo apt-get updateantes de hacer cualquier cosa apt-get installpara que use su espejo más cercano.
Simon East
2
Relacionado: askubuntu.com/q/319433/11244
Hasta el
23
Buen consejo, pero inútil en mi caso. Funciona en geolocalización, dándome el servidor local, que es muuuucho más lento donde estoy. La distancia temporal de la red es el factor importante aquí, no la distancia espacial.
jarondl
1
@marathon corregido al menos el 18.04+
Pablo A
49

Aquí hay una manera que siempre funcionará, usando buenos viejos netselecty algo de grepmagia:

¡El hack de "encontrar el mejor servidor" del adicto a la terminal!

  • Descargue y dpkg -i netselectpara su arquitectura desde el sitio web de Debian. (se trata de 125 KB, sin dependencias)
  • Encuentre los espejos Ubuntu más rápidos desde su ubicación, ya sea actualizados o como máximo seis horas atrás con esto (lo explicaré a continuación, lo siento, no se divide bien en 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 lo hace un poco detallado: desea ver puntos de progreso y mensajes que le indiquen que se combinaron diferentes mapeos de espejos a la misma IP :)
    2. -sN controla cuántos espejos desea al final (por ejemplo, los 10 mejores espejos)
    3. -tN es cuánto tiempo se prueba la velocidad de cada espejo (el valor predeterminado es 10; cuanto mayor es el número, más tiempo se tarda pero más confiables son los resultados).
  • Este es el material de las comillas inversas (no pegue, solo para explicación)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    El | grep -P -B8 "estado (ARRIBA | SEIS)"
    El | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetextrae el último estado de espejo de https://launchpad.net/ubuntu/+archivemirrors .
    2. Los primeros grepextractos reflejan espejos que están actualizados o con seis horas de retraso, junto con 8 líneas de contexto anterior que incluye las URL ftp / http reales
    3. El segundo grepextrae estas URL ftp / http
  • Aquí hay un ejemplo de salida de California, EE. UU .:

    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/
    
    • Los "rangos" son una métrica arbitraria; más bajo es generalmente mejor.
    • Si se pregunta por qué el espejo kernel.org Suecia-UE y un espejo NZ se encuentran entre los tres primeros de California , bueno, yo también ;-) La verdad es que netselectno siempre elige la URL más apropiada para mostrar cuando múltiples espejos se asignan a una sola IP; el número 3 también se conoce como nz.archive.ubuntu.com!
ish
fuente
99
netselect selecciona espejos que tienen baja latencia udp o icmp. No necesariamente recoge espejos que pueden dar más ancho de banda.
Tobu
@pix Aprobé tu edición, pero no es la sustitución de comandos lo que hace que se reemplacen las nuevas líneas. Es la división de campo posterior que eliminó las nuevas líneas. La sustitución de comandos solo elimina las nuevas líneas finales.
muru
25

Oneliner que selecciona el mejor espejo (por velocidad de descarga) basado en mirrors.ubuntu.com para su 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
fuente
2
Para tener más opciones reemplazan al final: sort -gr | head -3.
Pablo A
1
Actualmente, curl -s http://mirrors.ubuntu.com/mirrors.txtsolo devuelve una línea: lo http://archive.ubuntu.com/ubuntu/que anula el propósito de elegir entre varias. : - /
Stéphane Gourichon
sí, entonces este método es NG.
netawater
La curlparte de esta respuesta me pareció útil porque curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzdónde [server_url]está la URL del espejo base en la lista mirrors.txt, permite una comparación de velocidad de los primeros ~ 100K del archivo de índice del espejo.
jamesc
Esto prueba la velocidad de transferencia, que definitivamente es una mejora con respecto a netselect. Sin embargo, solo está descargando 10k de cada servidor, lo que puede no ser una gran representación de la velocidad de transferencia constante en conexiones más rápidas. Aumente ese 102400 para probar con una descarga más grande
Phil Miller
17

Aquí hay un script de Python que escribí que encuentra espejos con la latencia TCP más baja.

El script también proporciona datos de ancho de banda y estado tomados de la plataforma de lanzamiento , y generará un nuevo sources.listarchivo automáticamente o usando un espejo elegido de una lista.

Un ejemplo de uso que le permite elegir entre 5 espejos de EE. UU. Con la latencia más baja para su máquina:

$ apt-select --country US -t 5 --choose
John B
fuente
55
Quiero hacerle saber que he creado un paquete Debian con su script que está listo para ser usado de una manera muy fácil y directa: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto
Esta es una solución perfecta, ya que he probado los otros métodos. para hacer amigable a los novatos, he escrito una publicación que detalla este método: blog.kmonsoor.com/…
kmonsoor
Esto es genial, ya netselectque no está disponible en las versiones más nuevas de Ubuntu
Tek
Muestra cómo usarlo en tu publicación
Jonathan
@ Jonathan hecho. El uso completo se encuentra en READMEel primer enlace.
John B
5

Desarrollé un simple script nodejs basado en ping que prueba los servidores enumerados en mirrors.ubuntu.com/mirrors.txt y devuelve el más rápido:

sudo npm install -g ffum
ffum

Avíseme si le resulta útil o tiene alguna sugerencia (=

tentaculo
fuente
ffum no funciona: error de conexión.
James Fu
No funciona: salida vacía.
Juan Simón
git cloneel repositorio y correnode ffum
Michael
¡Impresionante, funciona para mí! Tuve un error en el que estaba buscando nodo en lugar de nodejs ... también sería genial tener algo detallado de cada velocidad de archivo probada.
tweak2
4

Sé que esto no responde directamente a la pregunta del OP, pero hay un botón en la versión de escritorio / GUI de Ubuntu que encuentra el mejor espejo para usted. Parecía funcionar bastante bien, así que lo examiné brevemente, pero no tuve tiempo de hacer un seguimiento.

La razón por la que lo menciono es porque creo que sería bastante sencillo y utilizable convertirlo en una utilidad de línea de comandos.

Si alguien está interesado, la prueba parece estar ubicada en:

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

De nuevo, eso es lo más lejos que llegué, pero pensé que dejaría esto aquí en caso de que alguien lo quisiera. Probablemente lo recupere cuando tenga un poco más de tiempo.

copeland3300
fuente
El 18.04, este script detecta cuándo se invoca como una aplicación (como principal ) desde un terminal ... y simplemente imprime sus resultados en el terminal. Asegúrese de darle suficiente tiempo para completar. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg
Lamentablemente no funciona correctamente. Este script toma los 5 servidores con el ping más bajo, luego los califica por ancho de banda descargando un archivo ~ 1M (Packages.gz en main desde su dist). Si modifica el script para aumentarlo a 25 servidores y descarga un archivo de 500M, obtendrá resultados completamente diferentes, que esta vez son correctos.
Jocelyn
2

Comando que encuentra espejos rápidos

En Ubuntu 18.04 obtuve buenos resultados ejecutando

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

Eso imprime una lista de espejos organizados por "tiempo" (no explicado), y luego utilicé uno de los espejos que clasificó más alto.

Más detalles

Para mí, fue útil probar algunos de los resultados principales de ese comando configurándolos como mi espejo /etc/apt/sources.listy luego haciendo

time sudo apt update

para ver cuánto tiempo llevó descargar la lista de paquetes desde ese espejo. Probé las tres sugerencias principales y todas fueron rápidas, pero una de ellas fue dos veces más rápida que las otras dos en la time sudo apt updateprueba.

He aquí un ejemplo del resultado 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
fuente
1
Lamentablemente no funciona correctamente. Este script toma los 5 servidores con el ping más bajo, luego los califica por ancho de banda descargando un archivo ~ 1M (Packages.gz en main desde su dist). Si modifica el script para aumentarlo a 25 servidores y descarga un archivo de 500M, obtendrá resultados completamente diferentes, que esta vez son correctos.
Jocelyn
1

Para la línea de comando, puede usar una herramienta de Python llamada apt-smart

Un ejemplo de uso que le permite enumerar espejos clasificados dentro de su país (detectar automáticamente):

$ apt-smart -l

Con -l, o --list-mirrors, obtendrá (salida de ejemplo del 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

Por supuesto, apt-smarttambién puede cambiar su sources.list si desea:

$ apt-smart -a

Con -a, o --auto-change-mirrorpara descubrir las réplicas disponibles, clasifíquelas según la velocidad de conexión y el estado de actualización y actualice /etc/apt/sources.list para utilizar la mejor réplica disponible.

Con -c, o --change-mirror MIRROR_URLpara actualizar /etc/apt/sources.list para usar el MIRROR_URL dado.

En comparación con otras herramientas:

  • apt-smart encuentra automáticamente dónde se encuentra, por lo que no necesita especificar el país cuando viaja al extranjero.
  • apt-smartrealiza una descarga HTTP real desde cada espejo para obtener resultados más precisos (ancho de banda y estado) y es compatible con el proxy HTTP, en lugar de usar pingy confiar en los datos inexactos de la plataforma de lanzamiento.
  • apt-smart se mantiene, mientras que la mayoría de las otras herramientas dejan los problemas sin resolver durante mucho tiempo.

Puede instalar fácilmente a apt-smarttravés de pip, para obtener información detallada sobre los comandos y usos de instalación de copiar y pegar, consulte el archivo Léame del proyecto .

Martin X
fuente
0

Uso lo siguiente para seleccionar automáticamente los espejos (y deshabilitar 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
fuente
0

Si desea que una utilidad haga esto, puede implementar dicha utilidad como un simple script bash como el siguiente. Esto puede ser útil si desea utilizar la utilidad sin necesidad 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
fuente
0

Las otras respuestas, incluida la respuesta aceptada, ya no son válidas (para Ubuntu 11.04 y posteriores) porque recomendaron paquetes de Debian como netselect-apty apt-spyque no funcionan con Ubuntu.

Hay dos respuestas de trabajo diferentes a esta pregunta a continuación:

  1. Utilice el método de apt-getmirror:

    Este método le pide al servidor Ubuntu una lista de espejos cerca de usted en función de su IP, y selecciona uno de ellos. La alternativa más fácil, con el inconveniente menor de que a veces el espejo más cercano puede no ser el más rápido.

  2. Foo de línea de comandos usando netselect
    Le muestra cómo usar la herramienta netselect para encontrar los servidores actualizados más recientemente por usted, en términos de red, no geográficamente. Úselo sedpara reemplazar los espejos adentro sources.list.

Use sedpara reemplazar espejos ensources.list

Dado que algunas fuentes usan carpetas adicionales como parte de su ruta, podría ser mejor usar la sintaxis de separador alternativo.

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