Faire un miroir: //mirrors.ubuntu.com hautement disponible

26

Nous sommes une équipe distribuée, c'est pourquoi nos machines virtuelles utilisent la mirror://configuration Ubuntu . Notre /etc/apt/sources.listressemble à ceci:

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

En soi, cela est assez étonnant et très utile pour les personnes qui travaillent dans différents endroits - moins de personnalisation locale , etc. nécessaire. Basculement en théorie.

Au quotidien, cette configuration échoue trop souvent. Je veux dire 2-3 fois cette semaine.

En ce moment , mirrors.ubuntu.comretourne ftp.uni-bayreuth.decomme mon miroir placard. Malheureusement, il semble être en baisse.

Cela dure depuis quelques heures et le miroir est hébergé par des bénévoles dans une université et aujourd'hui, étant un vendredi, mes espoirs sont bas que cela se corrige bientôt.

Tous parlent, mes questions sont:

  • Quelqu'un l'utilise-t-il?
  • Comment contournez-vous les temps d'arrêt? (ma solution rapide est un script shell)
  • Comment puis-je aider à améliorer cette situation?
Jusqu'à
la source
@ RaduRădeanu - c'est la première fois que je lis sur netselect ... 8oþ
dschinn1001
@ RaduRădeanu Astuce intéressante! À votre santé! J'essaie d'utiliser la mirror:méthode qui avait le plus de mises à jour dans votre fil. Mon problème est que chaque fois que le miroir le plus rapide tombe en panne, il n'y a pas de basculement et je suis bloqué.
jusqu'au
La création de votre propre miroir Ubuntu est-elle une option?
Mitch
@Till Pouvez-vous me faire savoir si vous pouvez avoir votre propre miroir.
Mitch

Réponses:

10

Personnellement, je pense que la meilleure façon de sélectionner les meilleurs miroirs de référentiels Ubuntu est d'utiliser la méthode GUI:

serveur de téléchargement

Maintenant, pour améliorer la situation décrite dans la question, vous devez définir certaines règles. Ces règles doivent agir mirrors.ubuntu.com. Je peux suggérer quelques règles comme suit:

  • faire une liste des meilleurs miroirs / préférés; il y a beaucoup de miroirs comme vous pouvez le voir ici , ici ou ici
  • si vous avez trouvé un bon miroir, ajoutez-le à la liste
  • si un miroir est tombé en panne ou cassé parfois, cela signifie que ce n'est pas un bon miroir et que vous devez le retirer de la liste
  • vous pouvez utiliser netselect, apt-spyouapt-fast
  • et d'autres, selon vos besoins.

Ensuite, pour voir comment vous pouvez contourner, je peux vous donner une méthode décrite étape par étape avec trois exemples de scripts bash. Le premier script utilise les miroirs du pays dans mirrors.ubuntu.com/mirrors.txtlequel vous vous trouvez actuellement (pour chaque pays, il existe un fichier texte avec des miroirs associés; voir http://mirrors.ubuntu.com/ ):

  • Dans une exécution de terminalmkdir -p bin - cette commande créera un binrépertoire dans votre homedossier si vous ne l'avez pas déjà.
  • Après l'exécution gedit ~/bin/change_sources.sh- cela créera le nouveau fichier change_sources.shdans gedit.
  • Copiez et collez l'un des scripts suivants dans le nouveau fichier créé:
#!/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

ou quelque chose de similaire à ce qui peut être trouvé sur 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

ou, un script utilisant netselect(téléchargez ici , installez les instructions ici ) comme l' explique izx très sympa dans cette réponse :

#!/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
  • Enregistrez le fichier et fermez-le.
  • Retournez dans le terminal et exécutez: chmod +x ~/bin/change_sources.sh- pour accorder l'accès d'exécution au script.
  • Juste pour tester, pour exécuter votre nouveau script, tapez terminal ~/bin/change_sources.sh. Cela vous donnera une erreur, car vous n'avez pas le droit de modifier /etc/apt/sources.list. Alors, utilisezsudo ~/bin/change_sources.sh
  • Modifiez le fichier crontab de l'utilisateur root à l'aide de la sudo crontab -ecommande et ajoutez la ligne suivante:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • J'ai défini le travail cron pour chaque heure, mais vous pouvez changer comme vous le souhaitez ou comme vous pensez que c'est mieux. Voir http://en.wikipedia.org/wiki/Cron dans ce sens.
  • Enregistrez le fichier et vérifiez la nouvelle entrée crontab avec sudo crontab -l.

REMARQUE: Pour annuler les modifications apportées par ce script, supprimez le travail cron et suivez les indications de l'image ci-dessus ou utilisez la commande suivante dans le terminal:

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

À partir de maintenant, le fichier sera modifié dynamiquement après avoir trouvé un changement d'adresse IP.

Ce n'est peut-être pas la meilleure solution, mais, à mon avis, une bonne solution peut être donnée de cette manière comme dans les scripts ci-dessus .

Radu Rădeanu
la source
2
Je suppose que je dirais si une interface graphique sous Linux peut être considérée comme la méthode traditionnelle. :) Mais de toute façon: votre premier script résout un problème, je n'en ai pas. La syntaxe des miroirs obtient déjà mes miroirs allemands, ou américains ou partout où les gens se trouvent. Le deuxième script utilise les miroirs de pays - ils semblent avoir le moins de bande passante disponible (vu que dans la liste des archivemiroirs sur le tableau de bord), le troisième script suppose qu'un miroir rapide (ou le plus proche) est en effet le meilleur. Retour à la case départ. Je suis en apt-spytrain de coder un petit script en ce moment. Mettra à jour ici plus tard.
Jusqu'au
1
@Jusqu'à présent, votre question était " Comment contournez-vous les temps d'arrêt? " Et " Comment puis-je contribuer à améliorer cette situation? ". J'ai montré comment je travaille et je vous ai suggéré comment pouvez-vous aider à vous améliorer ... Aussi, si vous lisez ma réponse jusqu'à la fin, vous pouvez voir que je suis conscient que " Ce n'est peut-être pas la meilleure solution, mais je pense qu'une bonne solution peut être donnée de cette manière comme dans les scripts ci-dessus ". Enfin, si vous souhaitez réparer / améliorer des serveurs cassés, cela semble hors sujet ici et vous devriez plutôt parler avec les propriétaires de ces serveurs.
Radu Rădeanu
2
Je ne pense pas que ce soit hors sujet. Diverses personnes de Canonical / Ubuntu m'ont dit d'ajouter ma question ici. C'est pourquoi je suis ici en premier lieu et je suppose aussi pourquoi une prime est attribuée.
jusqu'au
1
@Jusqu'à oui, la question est bonne, mais pas telle que vous l'avez reformulée dans ces commentaires. Personne ne répondra à "comment réparer un serveur miroir cassé" ici pour autant qu'il ne soit pas administrateur sur le serveur respectif.
Radu Rădeanu
1
Je ne veux pas réparer ce serveur, je veux corriger l'algorithme de sélection et l'absence de basculement.
jusqu'au
4

J'apprécie tous les commentaires sur cette question, mais comme personne n'a trouvé de solution simple qui convienne à notre situation, j'ai décidé de résoudre le problème moi-même.

J'ai créé un outil (spécifiquement pour Ubuntu) que j'appelle apt-spy2.

L'objectif principal de cet outil est de trouver rapidement un miroir qui fonctionne . Le fonctionnement est défini par le fait que le serveur miroir est disponible et (espérons-le :) à jour.

Je ne fais aucune hypothèse quant à savoir si le serveur sélectionné est nécessairement le plus proche et le plus rapide. Je ne fais pas de pings ou de trucs DNS GEO - mais jusqu'à présent, cela fonctionne quand quelque chose se casse.

Comment ça marche - en bref:

  1. J'utilise http://mirrors.ubuntu.com ou la liste des miroirs du tableau de bord pour récupérer des serveurs.
  2. Je fais une vérification simple sur chacun (pour le code d'état de réponse HTTP).
  3. LBNL, je mets à jour /etc/apt/sources.list.

Remarque: cela suppose que les gens jouent bien et mettent des miroirs supplémentaires (par exemple, des référentiels tiers /etc/apt/sources.list.d. Mais je suppose que cela signifie qu'il y a place à amélioration.

Vous pouvez obtenir cet outil comme ceci:

$ [sudo] gem install apt-spy2

Le cli est livré avec list, check, fixet help(avec des informations étendues sur la façon de l' utiliser).

J'ai essayé de documenter autant que possible dans le fichier README du projet .

La version actuelle est très conservatrice 0.5.0.

Le code est open source et la licence est libérale. Et je prends toutes les contributions.

Jusqu'à
la source
L'avez-vous téléchargé dans les référentiels ubuntu?
Braiam
@Braiam Vous pouvez obtenir cet outil comme ceci: sudo gem install apt-spy2
Radu Rădeanu
@ RaduRădeanu Je demande s'il l'a téléchargé, car je suis intéressé à empaqueter quelque chose sur Debian.
Braiam
@Braiam Je ne l'ai pas emballé, mais je l'accueillerais si quelqu'un le faisait. :)
Jusqu'à
@Braiam Btw, il est peu probable que cela fonctionne avec Debian. ; (Fonctionne uniquement avec Ubuntu.
Jusqu'au
2

Il y avait cette commande sur Debian 6.0.4:

apt-spy

Cela a fait le travail pour trouver automatiquement le prochain serveur disponible le plus proche et pour générer une nouvelle source.list

Dans Ubuntu, cette commande ne semble pas exister?

Il existe toujours dans Debian 7.0 Wheezy:

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

Vous pouvez télécharger votre package * .deb ici:

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

... toujours à la recherche des sources ...

Vous avez évidemment besoin de Debian-7.0-Installation pour obtenir le code source après avoir édité la liste des sources avec l'entrée:

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

Ensuite, après la mise à jour sudo apt-get, vous suceriez simplement le code avec:

sudo apt-get source apt-spy

dschinn1001
la source
Merci pour la suggestion, apt-spy a fière allure. Je ne suis pas sûr que cela fonctionne bien. Chaque fois que j'ai installé des trucs debian dans ubuntu, il s'est cassé tôt ou tard à cause d'autres dépendances.
jusqu'au
@Till - c'est toujours quelque chose avec un peu plus de fouilles ... dès que Linux devient plus exigeant.
dschinn1001
1
Construire pour ubuntu: rubygems.org/gems/apt-spy2 et github.com/lagged/apt-spy2
Jusqu'à
@Till Voulez-vous dire: Construisez-le ...! ou l'a construit ...? - Je m'occupe de la prochaine fois - maintenant c'est la pleine lune ici et je suis groggy ...
dschinn1001
tu es rapide !
dschinn1001
2

Peut-être que vous n'utilisez pas la solution que vous aimez, mais la mise en place d'un cache local pour les fichiers .deb devrait être idéale lorsque vous téléchargez plusieurs Mo de package (la plupart d'entre eux, je parie que c'est le même) et puisque vous téléchargez à partir du même serveur, vous pourrait vouloir sacrifier un PC pour faire le cache et rendre le serveur moins occupé.

Procédure

Vous devriez pouvoir installer apt-cacherune machine qui a beaucoup d'espace sur le disque dur (vous en auriez besoin). Vous pouvez le configurer en utilisant le guide du serveur Apt-cacher , mais faisons un résumé rapide.

  1. Installer apt-cacher

    sudo apt-get install apt-cacher apache2

  2. Modifiez /etc/default/apt-cacheret définissez la autostartvaleur sur 1, afin que votre cache démarre lorsque la machine se met sous tension.
  3. Redémarrez apache sudo /etc/init.d/apache2 restart
  4. Testez votre cache à l'aide de http://ip-of.your.cache:3142/apt-cacher.
  5. Vous devez autoriser l'hôte à utiliser le cache, alors modifiez /etc/apt-cacher/apt-cacher.confet recherchez la ligne allowed_hosts. Vous pouvez définir des sous-réseaux comme 192.168.0.0/24ou juste *pour tous les hôtes
  6. Recherchez un serveur rapide et fiable . Vous pouvez l'utiliser apt-spypour cela (cette commande peut prendre des heures car elle teste également la vitesse de chaque serveur).
  7. Chez vos clients, vous avez deux options:

    • définissez le sources.listcomme suit:

    deb http: //ip-of.your.cache: 3142 / the.server.you.like / ubuntu / lucid principal univers restreint multivers

    Modifiez l' ip-of.your.cacheadresse IP de votre cache et the.server.you.likele nom d'hôte du serveur que vous utiliserez. Vous pouvez utiliser plusieurs lignes.

    • Ou définissez apt à utiliser un proxy: éditez /etc/apt/apt.conf.d/01proxyet ajoutez la ligne:

    Acquérir :: http :: Proxy " http: //ip-of.your.cache: 3142 ";

Braiam
la source
Si vous utilisiez apt-spy dans le monde entier, cela durerait un certain temps ... mais vous pouvez utiliser cette commande en limitant par exemple l'Europe en: apt-spy -d testing -a Europe
dschinn1001
@ dschinn1001 -d testingsent Debian.
Braiam
eh bien: apt-spy -a Europe
dschinn1001
"downvote"? - Je n'ai pas downvote? - il arrive parfois que je clique par accident avec ma souris - je ne fais jamais de down-vote avec visée! alors vous avez voté! THX.
dschinn1001
1

Vous pouvez essayer de configurer votre propre miroir Ubuntu. De cette façon, les mises à jour seront locales.

apt-mirror a besoin d'une connexion Internet haut débit et de beaucoup d'espace disque

La configuration de votre propre miroir Ubuntu est très facile en utilisant apt-mirror.

1) allez dans le dépôt apt-mirror. Sauvegardez votre fichier sources.list comme ceci:

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

2) Modifiez le fichier sources.list comme suit:

gksudo gedit /etc/apt/sources.list

3) Et insérez ce qui suit sur une nouvelle ligne:

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

4) Mettons à jour l'index du package

sudo apt-get update

5) Et installez apt-mirror

sudo apt-get install apt-mirror

6) Apt-mirror est maintenant configuré, alors disons quels serveurs mettre en miroir:

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

La configuration par défaut placera vos fichiers téléchargés dans le dossier / var / spool / apt-mirror. Voici à quoi ressemble le fichier 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

cela ne fait que refléter les packages binaires mais si vous voulez des packages source, vous devez insérer les lignes appropriées. Ils prennent généralement la forme:

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

7) Maintenant, cours apt-mirror. Cela va prendre un certain temps. Ne vous inquiétez pas si vous ne pouvez pas télécharger tous les fichiers en une seule fois, apt-mirrorpouvez reprendre les téléchargements (supprimez-le avec la combinaison de touches Ctrl+ Cet réexécutez-le lorsque vous souhaitez continuer). D'accord, exécutez apt-mirror comme ceci:

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

Consultez également Comment créer un miroir Debian / Ubuntu local avec apt-mirror

Source: Utilisez Apt-mirror pour créer votre propre miroir Ubuntu

Mitch
la source
Si la mémoire est bonne, elle apt-mirrorest disponible dans les référentiels ubuntu.
Braiam
BTW, assurez-vous de noter le besoin de beaucoup d'espace sur la HD pour télécharger un miroir complet;)
Braiam
Merci pour la réponse et c'est une excellente ressource pour configurer un miroir et j'y ai pensé, mais j'aurais alors besoin de ce setuo dans au moins 3 endroits différents. Je sais que je suis difficile ici, mais je pense toujours que cela mirrors.ubuntu.comdevrait fonctionner. :)
jusqu'au
@till mirrors.ubuntu.comne résoudra jamais mirrors.ubuntu.com, mais un serveur le plus proche de vous. Le problème est que le serveur qu'il résout n'est pas fiable. Votre meilleur jeu consiste à utiliser un serveur fiable de la liste officielle.
Braiam
@Braiam aucune idée pourquoi des miroirs peu fiables sont retournés par lui alors?
jusqu'au
1

J'ai écrit un script Python appelé apt-select pour servir d'alternative CLI à la méthode GUI.

Le script interroge chaque miroir via TCP, imprime sur les miroirs standard avec la latence la plus faible et génère un nouveau sources.listfichier. Il existe également plusieurs options qui vous permettent de choisir dans une liste de miroirs classés et de récupérer des informations telles que la date de dernière mise à jour du miroir et sa capacité de bande passante.

John B
la source