web-dev-qa-db-fra.com

Rendre miroir: //mirrors.ubuntu.com hautement disponible

Nous sommes une équipe distribuée, c'est pourquoi nos ordinateurs virtuels utilisent la configuration Ubuntu mirror://. Notre /etc/apt/sources.list se présente comme suit:

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

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

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

mirrors.ubuntu.com renvoie ftp.uni-bayreuth.de en tant que mon miroir de placard. Malheureusement, il semble être en panne.

Cela dure depuis quelques heures et le miroir est hébergé par des volontaires d'une université et aujourd'hui, vendredi, mes espoirs sont faibles que cela soit corrigé rapidement.

Tous parlent, mes questions sont:

  • Est-ce que quelqu'un l'utilise?
  • Comment travaillez-vous autour des temps d'arrêt? (ma solution rapide est un script shell)
  • Comment puis-je aider à améliorer cette situation?
25
Till

J'apprécie toutes les contributions sur cette question, mais comme personne n'a proposé de solution simple et adaptée à 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 fonctionnel . Le travail 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 ni pings ni astuces GEO DNS - mais jusqu'à présent, cela fonctionne quand quelque chose se casse.

Comment ça marche - en un mot:

  1. J'utilise http://mirrors.ubuntu.com ou liste des miroirs du tableau de bord pour récupérer les serveurs.
  2. Je fais une simple vérification 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 joueurs jouent à Nice et mettent des miroirs supplémentaires (par exemple, des référentiels tiers dans /etc/apt/sources.list.d. Mais je suppose que cela signifie que des améliorations sont possibles.

Vous pouvez obtenir cet outil comme suit:

$ [Sudo] gem install apt-spy2

Le cli est fourni avec listname__, checkname__, fixet help(avec des informations détaillées sur son utilisation).

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

La version actuelle est un 0.5.0 très conservateur.

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

4
Till

Personnellement, je pense que le meilleur moyen de sélectionner les meilleurs miroirs de référentiels Ubuntu est d'utiliser la méthode de l'interface graphique:

download server

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

  • dressez une liste des miroirs meilleurs/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é ou cassé parfois, cela signifie que ce n'est pas un bon miroir et vous devez le retirer de la liste.
  • vous pouvez utiliser netselect , apt-spy ou apt-fast
  • et d'autres, selon vos besoins.

Ensuite, pour voir comment vous pouvez travailler, 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 lequel vous vous trouvez à la place de mirrors.ubuntu.com/mirrors.txt (il existe pour chaque pays un fichier texte avec des miroirs associés; voir http://mirrors.ubuntu.com/ ):

  • Dans un terminal , exécutez mkdir -p bin - cette commande créera un répertoire bin dans votre dossier home si vous ne l'avez pas déjà.
  • Après avoir exécuté gedit ~/bin/change_sources.sh, le nouveau fichier change_sources.sh sera créé dans 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 que l'on peut trouver 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écharger de ici , installer les instructions ici ) en tant que izx a expliqué très Nice 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 un accès en exécution au script.
  • Juste pour tester, pour exécuter votre nouveau script, tapez le terminal ~/bin/change_sources.sh. Cela vous donnera une erreur, car vous n'avez pas le droit de modifier /etc/apt/sources.list. Donc, utilisez Sudo ~/bin/change_sources.sh
  • Editez le fichier crontab de l'utilisateur root à l'aide de la commande Sudo crontab -e 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 à votre guise ou selon votre avis. Voir http://en.wikipedia.org/wiki/Cron en ce sens.
  • Enregistrez le fichier et vérifiez la nouvelle entrée de la 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

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

10
Radu Rădeanu

Il y avait cette commande sur Debian 6.0.4:

apt-spy

Cela a permis de trouver automatiquement le prochain serveur disponible le plus proche et de générer un nouveau fichier sources.list.

Sous Ubuntu, cette commande semble ne 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 paquet * .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 modifié la liste de sources avec l’entrée:

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

Ensuite, après la mise à jour de Sudo apt-get, vous devriez simplement aspirer le code avec:

Sudo apt-get source apt-spy

2
dschinn1001

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 pourrait vouloir sacrifier un PC pour faire le cache et rendre le serveur moins occupé.

Procédure

Vous devriez pouvoir définir apt-cacher sur une machine disposant de beaucoup d’espace sur le disque dur (vous en aurez besoin). Vous pouvez le configurer en utilisant le guide du serveur Apt-cacher , mais faisons un résumé rapide.

  1. Installez apt-cacher

    Sudo apt-get installer apt-cacher Apache2

  2. Éditez /etc/default/apt-cacher et définissez la valeur autostart sur 1 afin que votre cache démarre à la mise sous tension de la machine.
  3. Redémarrez Apache Sudo /etc/init.d/Apache2 restart
  4. Testez votre cache en utilisant http://ip-of.your.cache:3142/apt-cacher.
  5. Vous devez autoriser Host à utiliser le cache. Editez donc /etc/apt-cacher/apt-cacher.conf et recherchez la ligne allowed_hosts. Vous pouvez définir des sous-réseaux tels que 192.168.0.0/24 ou simplement * pour tous les hôtes.
  6. Recherchez un serveur rapide et fiable autour de . Vous pouvez utiliser apt-spy pour cela (cette commande peut prendre des heures car elle teste également la vitesse de chaque serveur).
  7. Dans vos clients, vous avez deux options:

    • définissez le sources.list comme suit:

    deb http: //ip-of.votre.cache: 3142/le.serveur.vous aimez/ubuntu / multivers principal lucide restreint

    Modifiez le ip-of.your.cache pour l'ip de votre cache et the.server.you.like pour le 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/01proxy et ajoutez la ligne:

    Acquire :: http :: Proxy " http: //ip-of.votre.cache: 3142 ";

2
Braiam

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

Configurer votre propre miroir Ubuntu est très facile en utilisant apt-mirror.

1) allez dans le référentiel apt-mirror. Sauvegardez votre fichier sources.list comme suit:

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 le texte suivant sur une nouvelle ligne:

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

4) Mettons à jour l’index du paquet

Sudo apt-get update

5) Et installez apt-mirror

Sudo apt-get install apt-mirror

6) Apt-mirror est maintenant configuré. Dites-lui 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 paquets binaires, mais si vous voulez des paquets sources, 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, lancez apt-mirror. Cela va prendre un certain temps. Ne vous inquiétez pas si vous ne pouvez pas télécharger tous les fichiers d’un coup, apt-mirror peut reprendre les téléchargements (tuez-le avec le Ctrl+C combinaison de touches et relancez-la lorsque vous souhaitez continuer). OK, lancez 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: tilisez Apt-mirror pour créer votre propre miroir Ubunt

1
Mitch

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 vers les miroirs stdout avec la latence la plus faible et génère un nouveau fichier sources.list. De nombreuses options vous permettent également de choisir dans une liste de miroirs classés et de récupérer des informations telles que la date de la dernière mise à jour du miroir et sa capacité de bande passante.

1
John B