Hacer espejo: //mirrors.ubuntu.com altamente disponible


26

Somos un equipo distribuido, por eso nuestras máquinas virtuales usan la mirror://configuración de Ubuntu . Nuestro /etc/apt/sources.listaspecto es el siguiente:

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

Esto en sí mismo es bastante sorprendente y muy útil para las personas que trabajan en diferentes ubicaciones: menos personalización local , etc., necesaria. Fail-over en teoría.

En el día a día, esta configuración falla con demasiada frecuencia. Quiero decir 2-3 veces esta semana.

En este momento mirrors.ubuntu.comvuelve ftp.uni-bayreuth.decomo mi espejo del armario. Desafortunadamente, parece estar abajo.

Esto ha estado sucediendo durante algunas horas y el espejo está alojado por voluntarios en una universidad y hoy es viernes, tengo muchas esperanzas de que esto se corrija pronto.

Todos hablan, mis preguntas son:

  • ¿Alguien usa esto?
  • ¿Cómo se soluciona el tiempo de inactividad? (mi solución rápida es un script de shell)
  • ¿Cómo puedo ayudar a mejorar esta situación?


@ RaduRădeanu - es la primera vez que leo sobre netselect ... 8oþ
dschinn1001

@ RaduRădeanu Sugerencia interesante! ¡Aclamaciones! Estoy tratando de usar el mirror:método que tuvo más actualizaciones en su hilo. Mi problema es que siempre que falla el espejo más rápido, no hay conmutación por error y estoy atascado.
Hasta el

¿Crear su propio Ubuntu Mirror es una opción?
Mitch

@ Hasta ¿Puedes decirme si puedes tener tu propio espejo?
Mitch

Respuestas:


10

Personalmente, creo que la mejor manera de seleccionar los mejores espejos de repositorios de Ubuntu es usar el método GUI:

servidor de descarga

Ahora, para mejorar la situación descrita en la pregunta, debe establecer algunas reglas de alguna manera. Estas reglas deben actuar en consecuencia mirrors.ubuntu.com. Puedo sugerir algunas reglas de la siguiente manera:

  • haga una lista de los espejos mejores / preferidos; hay muchos espejos como puedes ver aquí , aquí o aquí
  • si encontró un buen espejo, agréguelo a la lista
  • si un espejo se cayó o se rompió a veces, significa que no es un buen espejo y debe eliminarlo de la lista
  • puedes usar netselect, apt-spyoapt-fast
  • y otros, según sus requisitos.

A continuación, para ver cómo puede evitarlo, puedo darle un método descrito paso a paso con tres ejemplos de scripts bash. El primer script usa los espejos del país en el que se encuentra en este momento en lugar de mirrors.ubuntu.com/mirrors.txt(para cada país hay un archivo de texto con espejos asociados; consulte http://mirrors.ubuntu.com/ ):

  • En una ejecución de terminalmkdir -p bin : este comando creará un bindirectorio en su homecarpeta si aún no lo tiene.
  • Después de la ejecución gedit ~/bin/change_sources.sh: esto creará el nuevo archivo change_sources.shen gedit.
  • Copie y pegue uno de los siguientes scripts en el nuevo archivo creado:
#!/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

o algo similar a lo que se puede encontrar en 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

o, un script que usa netselect(descarga desde aquí , instala las instrucciones aquí ) como izx explicó muy bien en esta respuesta :

#!/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
  • Guarde el archivo y ciérrelo.
  • Vuelva a la terminal y ejecute: chmod +x ~/bin/change_sources.sh- para otorgar acceso de ejecución para el script.
  • Solo para probar, para ejecutar su nuevo script, escriba terminal ~/bin/change_sources.sh. Le dará un error, porque no tiene derecho a editar /etc/apt/sources.list. Entonces, usasudo ~/bin/change_sources.sh
  • Edite el archivo crontab del usuario raíz con el sudo crontab -ecomando y agregue la siguiente línea:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • He configurado el trabajo cron para cada hora, pero puedes cambiarlo como desees o como creas que es mejor. Ver http://en.wikipedia.org/wiki/Cron en este sentido.
  • Guarde el archivo y verifique la nueva entrada crontab con sudo crontab -l.

NOTA: Para revertir los cambios realizados por este script, elimine el trabajo cron y siga las indicaciones de la imagen de arriba o use el siguiente comando en la terminal:

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

A partir de ahora, el archivo cambiará dinámicamente después de encontrar un cambio en la dirección IP.

Puede que no sea la mejor solución, pero, en mi opinión, se puede dar una buena solución de esta manera, como en los scripts anteriores .


2
Supongo que discutiría si una interfaz gráfica de usuario en Linux se puede considerar de la manera tradicional. :) Pero de todos modos: tu primer script resuelve un problema, no tengo. La sintaxis de espejo ya tiene mis espejos alemanes, o de EE. UU. O donde sea que esté la gente. La segunda secuencia de comandos utiliza los espejos de país: parecen tener el menor ancho de banda disponible (vimos que en la lista de duplicados de archivo en la plataforma de lanzamiento), la tercera secuencia de comandos supone que un espejo rápido (o el más cercano) es el mejor. Volver al punto de partida. Estoy codificando un pequeño apt-spyscript en este momento. Se actualizará aquí más tarde.
Hasta el

1
@Hasta entonces, su pregunta fue " ¿Cómo se soluciona el tiempo de inactividad? " Y " ¿Cómo puedo ayudar a mejorar esta situación? ". Mostré cómo trabajo y le sugerí cómo puede ayudar a mejorar ... Además, si lee mi respuesta hasta el final, puede ver que soy consciente de que " Puede que no sea la mejor solución, pero creo que que una buena solución se puede dar de esta manera como en los scripts anteriores " Finalmente, si está interesado en arreglar / mejorar servidores rotos, esto parece fuera de tema aquí y debería hablar con los propietarios de esos servidores.
Radu Rădeanu

2
No creo que esté fuera de tema. Varias personas de Canonical / Ubuntu me dijeron que agregara mi pregunta aquí. Es por eso que estoy aquí en primer lugar y creo que también por qué hay una recompensa asignada.
Hasta el

1
@ Hasta Sí, la pregunta es buena, pero no como la reformulaste en estos comentarios. Nadie responderá a "cómo reparar un servidor espejo roto" aquí, siempre que no sea un administrador en el servidor respectivo.
Radu Rădeanu

1
No quiero arreglar ese servidor, quiero arreglar el algoritmo de selección y la falta de conmutación por error.
Hasta el

4

Agradezco todos los comentarios sobre esta pregunta, pero como a nadie se le ocurrió una solución simple que se adaptara a nuestras circunstancias, decidí solucionar el problema yo mismo.

Creé una herramienta (específicamente para Ubuntu) que llamo apt-spy2.

El objetivo principal de esta herramienta es encontrar un espejo de trabajo rápido. El funcionamiento se define por el hecho de que el servidor espejo está disponible y (con suerte :) actualizado.

No hago suposiciones sobre si el servidor seleccionado es necesariamente el más cercano y el más rápido. No estoy haciendo ningún ping ni trucos de DNS GEO, pero hasta ahora esto funciona cuando algo se rompe.

Cómo funciona: en pocas palabras:

  1. Uso http://mirrors.ubuntu.com o la lista de mirrors de launchpad para recuperar servidores.
  2. Hago una simple verificación en cada uno (para el Código de estado de respuesta HTTP).
  3. LBNL, actualizo /etc/apt/sources.list.

Tenga en cuenta: Esto supone que las personas juegan bien y ponen espejos adicionales (por ejemplo, repositorios de terceros /etc/apt/sources.list.d. Pero supongo que eso significa que hay margen de mejora.

Puede obtener esta herramienta de esta manera:

$ [sudo] gem install apt-spy2

La CLI viene con list, check, fixy help(soporte con información sobre cómo usarlo).

Traté de documentar tanto como sea posible en el archivo README del proyecto .

La versión actual es muy conservadora 0.5.0.

El código es de código abierto y la licencia es liberal. Y tomo todas las contribuciones.


¿Subiste esto a los repositorios de ubuntu?
Braiam

@Braiam Puede obtener esta herramienta así: sudo gem install apt-spy2
Radu Rădeanu

@ RaduRădeanu Le pregunto si lo subió, ya que estoy interesado en empaquetar algo para Debian.
Braiam

@Braiam No lo empaqué, pero lo agradecería si alguien lo hiciera. :)
Hasta el

@Braiam Btw, es poco probable que esto funcione con Debian. ; (Solo funciona con Ubuntu.
Hasta el

2

Había este comando en Debian 6.0.4:

apt-spy

Esto hizo el trabajo para encontrar el siguiente servidor disponible más cercano de forma automática y generar una nueva fuente.

¿En Ubuntu este comando parece no existir?

Todavía existe en Debian 7.0 wheezy:

https://launchpad.net/debian/wheezy/+source/apt-spy/+copyright

Puede descargar su paquete * .deb aquí:

http://packages.debian.org/sid/apt-spy

... sigo buscando las fuentes ...

Obviamente necesita Debian-7.0-Installation para obtener el código fuente después de editar la lista de fuentes con la entrada:

deb-src http://http.debian.net/debian wheezy main

Luego, después de sudo apt-get update, simplemente chuparía el código con:

sudo apt-get source apt-spy


Gracias por la sugerencia, apt-spy se ve muy bien. No estoy seguro de que funcione bien. Cada vez que instalé cosas de Debian en Ubuntu, se rompió tarde o temprano debido a otras dependencias.
Hasta el

@ Hasta ahora, siempre es algo con un poco más de excavación ... tan pronto como Linux se vuelve más exigente.
dschinn1001


@ Hasta ¿Te refieres a: Construirlo ...! o lo construyó ...? -
Cuido la

eres rápido !
dschinn1001

2

Tal vez no use la solución que le gusta, pero configurar un caché local para los archivos .deb debería ser ideal cuando descargue varios MB de paquete (la mayoría de ellos apuesto a que son los mismos) y ya que está descargando desde el mismo servidor, usted podría querer sacrificar una PC para hacer el caché y hacer que el servidor esté menos ocupado.

Procedimiento

Debería poder configurar apt-cacheren una máquina que tenga mucho espacio en el disco duro (lo necesitaría). Puede configurar esto utilizando la guía del servidor Apt-cacher , pero hagamos un resumen rápido.

  1. Instalar apt-cacher

    sudo apt-get install apt-cacher apache2

  2. Edite /etc/default/apt-cachery establezca el autostartvalor en 1, de modo que su caché se inicie cuando se encienda la máquina.
  3. Reiniciar apache sudo /etc/init.d/apache2 restart
  4. Prueba tu caché usando http://ip-of.your.cache:3142/apt-cacher.
  5. Debe permitir que el host use el caché, así que edite /etc/apt-cacher/apt-cacher.confy busque la línea allowed_hosts. Puede configurar subredes como 192.168.0.0/24o solo *para todos los hosts
  6. Busque un servidor rápido y confiable . Puede usarlo apt-spypara esto (este comando puede llevar horas, ya que también prueba la velocidad de cada servidor).
  7. En tus clientes tienes dos opciones:

    • establece lo sources.listsiguiente:

    deb http: //ip-of.your.cache: 3142 / the.server.you.like / ubuntu / lucid principal restringido universo multiverso

    Cambie la dirección ip-of.your.cacheIP de su caché y the.server.you.likeel nombre de host del servidor que usará. Puedes usar varias líneas.

    • O configure apt para usar un proxy: edite /etc/apt/apt.conf.d/01proxyy agregue la línea:

    Adquirir :: http :: Proxy " http: //ip-of.your.cache: 3142 ";


Si usa apt-spy en todo el mundo, duraría un tiempo ... pero puede usar este comando limitando a, por ejemplo, Europa: apt-spy -d testing -a Europe
dschinn1001

@ dschinn1001 -d testinghuele a Debian.
Braiam

bien entonces: apt-spy -a Europe
dschinn1001

"voto negativo"? - No hice voto negativo? - A veces sucede que hago clic por accidente con el mouse. ¡así que te voté! Gracias.
dschinn1001

1

Puedes intentar configurar tu propio espejo de Ubuntu. De esa manera las actualizaciones serán locales.

apt-mirror necesita una conexión a internet de alta velocidad y mucho espacio en disco

Configurar su propio espejo Ubuntu es muy fácil usando apt-mirror.

1) ir al repositorio de apt-mirror. Haga una copia de seguridad de su archivo sources.list así:

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

2) Edite el archivo sources.list así:

gksudo gedit /etc/apt/sources.list

3) E inserte lo siguiente en una nueva línea:

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

4) Actualicemos el índice del paquete

sudo apt-get update

5) e instalar apt-mirror

sudo apt-get install apt-mirror

6) Apt-mirror ahora está configurado, así que digamos qué servidores reflejar:

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

La configuración predeterminada colocará los archivos descargados en la carpeta / var / spool / apt-mirror. Así es como se ve el archivo 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

esto solo refleja los paquetes binarios, pero si desea paquetes fuente, debe insertar las líneas apropiadas. Usualmente toman la forma:

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

7) Ahora, corre apt-mirror. Esto va a tomar bastante tiempo. No se preocupe si no puede descargar todos los archivos de una sola vez, apt-mirrorpuede reanudar las descargas (elimínelo con la combinación de teclas Ctrl+ Cy vuelva a ejecutarlo cuando desee continuar). Bien, ejecuta apt-mirror así:

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

Consulte también Cómo crear un espejo local de Debian / Ubuntu con apt-mirror

Fuente: Use Apt-mirror para crear su propio Ubuntu Mirror


Si la memoria me sirve bien, apt-mirrorestá disponible en los repositorios de ubuntu.
Braiam

Por cierto, asegúrese de tener en cuenta la necesidad de mucho espacio en el HD para descargar un espejo completo;)
Braiam

Gracias por la respuesta y es un gran recurso para configurar un espejo y lo he considerado, pero luego necesitaría este setuo en al menos 3 ubicaciones diferentes. Sé que soy exigente aquí, pero todavía siento que mirrors.ubuntu.comdebería funcionar. :)
Hasta el

@till mirrors.ubuntu.comnunca se resolverá mirrors.ubuntu.com, sino un servidor más cercano a usted. El problema es que el servidor que resuelve no es confiable. Su mejor juego es usar un servidor confiable de la lista oficial.
Braiam

@Braiam, ¿alguna idea de por qué los espejos poco confiables son devueltos?
Hasta el

1

He escrito un script de Python llamado apt-select para que sirva como una alternativa CLI al método GUI.

El script consulta cada espejo a través de TCP, imprime en espejos estándar con la latencia más baja y genera un nuevo sources.listarchivo. También hay múltiples opciones que le permiten elegir de una lista de espejos clasificados y recuperar información como cuándo se actualizó por última vez el espejo y su capacidad de ancho de banda.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.