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:
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:
/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 list
name__, check
name__, fix
et 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.
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:
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:
netselect
, apt-spy
ou apt-fast
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/ ):
mkdir -p bin
- cette commande créera un répertoire bin
dans votre dossier home
si vous ne l'avez pas déjà.gedit ~/bin/change_sources.sh
, le nouveau fichier change_sources.sh
sera créé dans gedit.#!/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
chmod +x ~/bin/change_sources.sh
- pour accorder un accès en exécution au script.~/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
Sudo crontab -e
et ajoutez la ligne suivante:@hourly /home/$USER/bin/change_sources.sh
#change $USER with your user name
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 .
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
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é.
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.
Installez apt-cacher
Sudo apt-get installer apt-cacher Apache2
/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.Sudo /etc/init.d/Apache2 restart
http://ip-of.your.cache:3142/apt-cacher
./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.apt-spy
pour cela (cette commande peut prendre des heures car elle teste également la vitesse de chaque serveur).Dans vos clients, vous avez deux options:
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.
/etc/apt/apt.conf.d/01proxy
et ajoutez la ligne:Acquire :: http :: Proxy " http: //ip-of.votre.cache: 3142 ";
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
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.