Comment sélectionnez-vous le miroir le plus rapide de la ligne de commande?


137

Je souhaite mettre à jour mon sources.listfichier avec le serveur le plus rapide à partir de la ligne de commande dans une nouvelle installation d'Ubuntu Server. Je sais que cela est trivialement facile avec l'interface graphique, mais il ne semble pas être un moyen simple de le faire à partir de la ligne de commande?


3
Dans les expressions régulières, le. caractère signifie n'importe quel caractère. Si vous voulez qu'il corresponde à un., Vous devez y échapper avec \, alors nous.archive [..] devrait être nous \ .archive [..]
Egil


2
Dans mon cas, j'ai dû remplacer les #panneaux par des barres obliques ( /). Sinon, j'ai sed: -e expression #1, char 53: unterminated s 'command`.
Ethan Leroy

@EthanLeroy idem ici avec Ubuntu 12.04.3
fermeture de session le

Devrait être slash pas hash.
Matt H

Réponses:


22
Pakket netselect-apt

    dapper (net): Choisissez le miroir Debian le plus rapide avec netselect 
    [univers]
    0.3.ds1-5: tous
    hardy (net): Choisissez le miroir Debian le plus rapide avec netselect 
    [univers]
    0.3.ds1-11: tous
Pakket apt-spy

    dapper (admin): écrit un fichier sources.list basé sur des tests de bande passante 
    [univers]
    3.1-14: amd64 i386 powerpc

Non inclus dans Ubuntu plus récent en raison de problèmes de sécurité, voir: rapport de bogue

Mais .. normalement, je me sers de ping pour connaître la vitesse d’une connexion à un endroit donné. Quantité de sauts et de latence.


4
netselect-apt ne semble pas être disponible dans Ubuntu 12.04
offby1


8
Ce n'est pas la réponse la plus élevée ou la meilleure réponse. Vérifiez la suivante
jeudi

Quelle réponse est la "prochaine" pourrait avoir changé.
Dimanche

apt-spy est parti à debian le 9, mais netselect-apt est OK
netawater

147

Vous n'avez plus besoin de chercher - comme l' a expliqué ajmitch , vous pouvez utiliser le meilleur miroir pour qu'il soit sélectionné automatiquement.deb mirror

apt-get supporte maintenant une méthode 'miroir' qui sélectionnera automatiquement un bon miroir en fonction de votre emplacement. En mettant:

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

tout en haut de votre /etc/apt/sources.listfichier devrait suffire à lui faire choisir automatiquement un miroir en fonction de votre situation géographique.

Les utilisateurs de Lucid (10.04), Maverick (10.10), Natty (11.04) et Oneiric (11.10) peuvent le remplacer precisepar le nom approprié.


Excellent conseil. Notez simplement qu'après avoir effectué le changement, vous devez exécuter sudo apt-get updateavant apt-get installde pouvoir utiliser votre miroir le plus proche.
Simon East


23
Bon conseil, mais inutile dans mon cas. Cela fonctionne sur la géolocalisation, en me donnant le serveur local, qui est waaaayy plus lent où je suis. La distance temporelle du réseau est le facteur important ici, pas la distance spatiale.
jarondl


1
@marathon fixé au moins à 18.04+
Pablo A

49

Voici une façon qui fonctionnera toujours, en utilisant du bon vieux netselectet de la grepmagie:

Le terminal-addict "trouve le meilleur serveur" bidouille!

  • Téléchargez et dpkg -i netselectpour votre architecture sur le site web Debian. (environ 125 Ko, pas de dépendances)
  • Trouvez les miroirs Ubuntu les plus rapides de chez vous, à jour ou avec un retard maximum de six heures (je l'expliquerai ci-dessous, je regrette que cela ne se divise pas très bien dans 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 le rend un peu bavard - vous voulez voir les points de progression et les messages vous indiquant que différents miroirs mappant vers la même adresse IP ont été fusionnés :)
    2. -sN contrôle le nombre de miroirs que vous voulez à la fin (par exemple 10 premiers miroirs)
    3. -tN est la durée pendant laquelle chaque miroir est soumis à un test de vitesse (la valeur par défaut est 10; plus le nombre est élevé, plus cela prend de temps, mais plus le résultat est fiable.)
  • Ceci est la substance des citations arrières (ne pas coller, juste pour une explication)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 "statut (UP | SIX)"
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetextrait le dernier statut de miroir depuis https://launchpad.net/ubuntu/+archivemirrors .
    2. Les premiers grepextraits contiennent des miroirs à jour ou six heures de retard, ainsi que 8 lignes de contexte précédent incluant les URL ftp / http réelles.
    3. La seconde grepextrait ces URLs ftp / http
  • Voici un exemple de sortie de Californie, USA:

    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/
    
    • Les "rangs" sont une métrique arbitraire; plus bas est généralement préférable.
    • Si vous vous demandez pourquoi le miroir Suède-UE de kernel.org et un miroir NZ figurent dans le trio de tête en Californie , eh bien, moi aussi ;-) La vérité est que vous netselectne choisissez pas toujours l'URL la plus appropriée à afficher lorsque plusieurs miroirs mappent sur une seule adresse IP; le numéro 3 est aussi connu sous le nom nz.archive.ubuntu.com!

9
netselect sélectionne les miroirs qui ont une faible latence udp ou icmp. Il ne choisit pas nécessairement des miroirs pouvant donner plus de bande passante.
Tobu

@pix J'ai approuvé votre modification, mais ce n'est pas la substitution de commande qui entraîne le remplacement des nouvelles lignes. C'est la division de champ suivante qui a supprimé les nouvelles lignes. La substitution de commande supprime uniquement les retours à la ligne.
muru

25

Oneliner qui sélectionne le meilleur miroir (en vitesse de téléchargement) sur la base de mirrors.ubuntu.com pour votre 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  }'

2
Pour avoir plus d' options remplacer à la fin: sort -gr | head -3.
Pablo Un

1
Actuellement, curl -s http://mirrors.ubuntu.com/mirrors.txtne renvoie qu'une ligne: http://archive.ubuntu.com/ubuntu/ce qui va à l'encontre de l'objectif de choisir parmi plusieurs. : - /
Stéphane Gourichon le

oui, donc cette méthode est NG.
netawater

J'ai trouvé la curlpartie de cette réponse utile, car curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzoù se [server_url]trouve l'URL de miroir de base répertoriée dans mirrors.txtpermet une comparaison de vitesse du premier ~ 100 000 du fichier d'index à partir du miroir.
Jamesc

Cela teste la vitesse de transfert, ce qui est définitivement une amélioration par rapport à netselect. Il ne télécharge que 10k de chaque serveur, ce qui peut ne pas être une bonne représentation de la vitesse de transfert stable sur les connexions plus rapides, cependant. Augmentez le 102400 pour le tester avec un téléchargement plus grand
Phil Miller

17

Voici un script Python que j'ai écrit qui trouve des miroirs avec la plus faible latence TCP.

Le script fournit également des données de bande passante et d'état extraites du tableau de bord et génère un nouveau sources.listfichier automatiquement ou à l'aide d'un miroir choisi dans une liste.

Un exemple d'utilisation qui vous permet de choisir parmi 5 miroirs US avec la latence la plus faible sur votre machine:

$ apt-select --country US -t 5 --choose

5
Je tiens à vous informer que j'ai créé un paquet Debian avec votre script qui est prêt à être utilisé de manière très simple et directe: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto

c'est une solution parfaite, comme j'ai essayé les autres méthodes. Pour rendre Noob amical, j'ai écrit un post détaillant cette méthode: blog.kmonsoor.com/…
kmonsoor

C’est génial, car netselectn’est pas disponible dans les nouvelles versions d’Ubuntu
Tek

S'il vous plaît montrer comment l'utiliser dans votre post
Jonathan

@ Jonathan fait. L'utilisation complète est dans READMEle premier lien.
John B

5

J'ai développé un script nodejs basé sur le ping qui teste les serveurs répertoriés sur mirrors.ubuntu.com/mirrors.txt et renvoie le plus rapide:

sudo npm install -g ffum
ffum

S'il vous plaît laissez-moi savoir si vous le trouvez utile ou avez des suggestions (=


ffum ne fonctionne pas: erreur de connexion.
James Fu

Cela ne fonctionne pas: sortie vide.
Juan Simón

git clonele repo et courirnode ffum
Michael

Génial, travaille pour moi! J'ai eu un bug où il cherchait node au lieu de nodejs.
tweak2

4

Je sais que cela ne répond pas directement à la question du PO, mais il y a un bouton dans la version de bureau / interface graphique d'Ubuntu qui trouve le meilleur miroir pour vous. Cela a semblé fonctionner assez bien, alors j'ai examiné la situation brièvement, mais je n'ai pas eu le temps de faire un suivi.

La raison pour laquelle j'en parle, c'est parce que je pense qu'il serait assez simple et utilisable de le transformer en un utilitaire de ligne de commande.

Si quelqu'un est intéressé, le test semble se situer dans:

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

Encore une fois, c’est à peu près tout ce que j’ai eu, mais j’ai pensé que je laisserais ça ici au cas où quelqu'un le voudrait. Je reviendrai probablement là-dessus quand il me restera un peu de temps.


Le 18.04, ce script détecte le moment où il est appelé en tant qu'application (en tant que principale ) à partir d'un terminal .... et imprime simplement ses résultats sur le terminal. Assurez-vous de lui donner assez de temps pour terminer. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg

Malheureusement, cela ne fonctionne pas correctement. Ce script prend les 5 serveurs avec le ping le plus faible, puis les marque par bande passante en téléchargeant un fichier de ~ 1M (Packages.gz in main depuis votre dist). Si vous modifiez le script pour l'augmenter à 25 serveurs et télécharger un fichier de 500M, vous obtenez des résultats complètement différents, qui sont corrects cette fois-ci.
Jocelyn

2

Commande qui trouve des miroirs rapides

Sur Ubuntu 18.04, j’ai eu de bons résultats en courant

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

Cela affiche une liste de miroirs organisée par "heure" (non expliquée), puis j’ai utilisé l’un des miroirs qu’il a classés au premier rang.

Plus de détails

Pour moi, il était utile de tester quelques-uns des meilleurs résultats générés par cette commande en les définissant comme mon miroir /etc/apt/sources.listpuis en effectuant

time sudo apt update

pour voir combien de temps il a fallu pour télécharger la liste de paquets à partir de ce miroir. J'ai testé les trois principales suggestions et elles étaient toutes rapides, mais l'une d'entre elles était deux fois plus rapide que les deux autres dans le time sudo apt updatetest.

Voici un exemple de sortie 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

1
Malheureusement, cela ne fonctionne pas correctement. Ce script prend les 5 serveurs avec le ping le plus faible, puis les marque par bande passante en téléchargeant un fichier de ~ 1M (Packages.gz in main depuis votre dist). Si vous modifiez le script pour l'augmenter à 25 serveurs et télécharger un fichier de 500M, vous obtenez des résultats complètement différents, qui sont corrects cette fois-ci.
Jocelyn

1

Pour la ligne de commande, vous pouvez utiliser un outil Python appelé apt-smart

Un exemple d'utilisation vous permettant de répertorier les miroirs classés dans votre pays (détecter automatiquement):

$ apt-smart -l

Avec -l, ou --list-mirrors, vous obtiendrez (exemple, sortie du serveur 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

Bien sûr, vous apt-smartpouvez aussi changer votre source.list si vous voulez:

$ apt-smart -a

Avec -aou --auto-change-mirrorpour découvrir les miroirs disponibles, classez-les par vitesse de connexion et statut de mise à jour, puis mettez à jour /etc/apt/sources.list pour utiliser le meilleur miroir disponible.

Avec -c, ou --change-mirror MIRROR_URLpour mettre à jour /etc/apt/sources.list afin d’utiliser la MIRROR_URL donnée.

Comparé à d'autres outils:

  • apt-smart trouve automatiquement où vous êtes afin que vous n'ayez pas besoin de spécifier le pays lorsque vous voyagez à l'étranger.
  • apt-smarteffectue un téléchargement HTTP réel à partir de chaque miroir pour obtenir des résultats plus précis (bande passante et statut) et prend en charge le proxy HTTP, plutôt que d'utiliser pinget de s'appuyer sur les données inexactes du tableau de bord.
  • apt-smart est maintenu, alors que la plupart des autres outils laissent des problèmes non résolus pendant longtemps.

Vous pouvez facilement installer apt-smartvia pip, pour les commandes détaillées copier'n'paste et les utilisations, veuillez consulter le fichier Lisezmoi .


0

J'utilise ce qui suit pour sélectionner automatiquement les miroirs (et désactiver 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

0

Si vous voulez qu'un utilitaire fasse cela, vous pouvez l'implémenter comme un script bash simple, comme suit. Cela peut être utile si vous souhaitez utiliser l'utilitaire sans avoir besoin 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

0

Les autres réponses, y compris la réponse acceptée, ne sont plus valides (pour Ubuntu 11.04 et les versions plus récentes) car elles recommandaient des paquets Debian tels que netselect-aptet apt-spyqui ne fonctionnent pas avec Ubuntu.

Il existe deux réponses de travail différentes à cette question ci-dessous:

  1. Utiliser la méthode d' apt-getmirror:

    Cette méthode demande au serveur Ubuntu une liste des miroirs proches de vous, en fonction de votre IP, et en sélectionne un. L'alternative la plus simple, avec comme inconvénient mineur, que parfois le miroir le plus proche ne soit pas forcément le plus rapide.

  2. Foo en ligne de commande à l'aide de netselect
    Vous indique comment utiliser l' outil netselect pour rechercher les serveurs les plus récemment mis à jour les plus rapides - en réseau, non géographiquement. Utilisez sedpour remplacer les miroirs dans sources.list.

Utiliser sedpour remplacer les miroirs danssources.list

Certaines sources utilisant des dossiers d’addition dans leur chemin, il serait peut-être préférable d’utiliser la syntaxe de séparateur alternatif.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.