Wie wählt man den schnellsten Mirror in der Kommandozeile aus?

137

Ich möchte meine sources.listDatei mit dem schnellsten Server über die Befehlszeile in einer neuen Ubuntu Server-Installation aktualisieren . Ich weiß, dass dies mit der GUI trivial einfach ist, aber es scheint keine einfache Möglichkeit zu geben, dies von der Befehlszeile aus zu tun.

Evan
quelle
3
In regulären Ausdrücken wird die. Zeichen bedeutet ein beliebiges Zeichen. Wenn Sie möchten, dass es mit a. Übereinstimmt, müssen Sie es mit \ entkommen. Us.archive [..] sollte also us \ .archive [..] sein
Egil
Related: askubuntu.com/questions/37753/…
Jorge Castro
2
In meinem Fall musste ich die #Zeichen durch Schrägstriche ( /) ersetzen . Ansonsten habe ich sed: -e expression #1, char 53: unterminated s "Kommando" bekommen.
Ethan Leroy
@EthanLeroy hier dasselbe mit Ubuntu 12.04.3
Abmelden
Sollte kein Haschisch sein.
Matt H

Antworten:

22
Pakket netselect-apt

    dapper (net): Wählen Sie mit netselect den schnellsten Debian-Spiegel 
    [Universum]
    0,3.ds1-5: alle
    hardy (net): Wählen Sie mit netselect den schnellsten Debian-Spiegel 
    [Universum]
    0,3.ds1-11: alle
Pakket apt-spy

    dapper (admin): schreibt eine sources.list-Datei basierend auf Bandbreitentests 
    [Universum]
    3.1-14: amd64 i386 powerpc

Nicht in neueren Ubuntu enthalten aufgrund secturity Probleme scheint es: siehe: Bugreport

Aber ich benutze normalerweise nur Ping , um die Geschwindigkeit einer Verbindung zu einem bestimmten Ort herauszufinden. Hopfenanzahl und Latenz.

Rinzwind
quelle
4
netselect-apt scheint in Ubuntu 12.04
offby1
8
Dies ist nicht die upvoted oder die beste Antwort mehr, überprüfen nächste
ntg
Welche Antwort ist die "nächste" könnte sich geändert haben.
24.
apt-spy ist bei debian 9 weg, aber netselect-apt ist OK
netawater
147

Sie müssen nicht mehr jede Suche tun - wie ajmitch hat erklärt , können Sie deb mirrordie beste Spiegel automatisch für Sie ausgewählt haben.

apt-get unterstützt jetzt eine "Spiegel" -Methode, die automatisch einen guten Spiegel basierend auf Ihrem Standort auswählt. Putten:

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

Oben in Ihrer /etc/apt/sources.listDatei sollte sich alles befinden, was erforderlich ist, damit der Spiegel basierend auf Ihrem geografischen Standort automatisch für Sie ausgewählt wird.

Benutzer von Lucid (10.04), Maverick (10.10), Natty (11.04) und Oneiric (11.10) können durch preciseden entsprechenden Namen ersetzen .

badp
quelle
Toller Tipp. Beachten Sie einfach, dass Sie nach dem Vornehmen der Änderung eine Ausführung ausführen müssen, sudo apt-get updatebevor apt-get installSie die nächste Spiegelung verwenden können.
Simon East
2
Siehe auch
Bis zum
23
Netter Tipp, aber in meinem Fall nicht hilfreich. Es funktioniert mit Geolocation und gibt mir den lokalen Server, der dort, wo ich bin, langsamer ist. Der zeitliche Abstand des Netzwerks ist hier der wichtige Faktor, nicht der räumliche Abstand.
Jarondl
1
@marathon behoben mindestens am 18.04+
Pablo A
49

Hier ist eine Möglichkeit, die immer funktioniert und gute alte netselectund etwas grepMagie verwendet:

Der "Find Best Server" -Hack des Terminal-Süchtigen!

  • Laden Sie und dpkg -i netselectfür Ihre Architektur von der Debian-Website herunter. (es sind ungefähr 125 KB, keine Abhängigkeiten)
  • Finden Sie die schnellsten Ubuntu-Spiegel von Ihrem Standort aus, entweder aktuell oder höchstens sechs Stunden später.

    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 macht es ein wenig wortreich - Sie möchten Fortschrittspunkte sehen und Nachrichten, die Ihnen mitteilen, dass verschiedene Spiegel, die derselben IP zugeordnet sind, zusammengeführt wurden :)
    2. -sN Steuert, wie viele Spiegel am Ende angezeigt werden sollen (z. B. die 10 besten Spiegel)
    3. -tN gibt an, wie lange jeder Spiegel einer Geschwindigkeitsprüfung unterzogen wird (Standard ist 10; je höher die Zahl, desto länger dauert die Prüfung, desto zuverlässiger sind jedoch die Ergebnisse.)
  • Dies ist das Backquotes-Zeug (nicht einfügen, nur zur Erklärung)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 "Status (UP | SIX)"
    | grep -o -P (f | ht) tp: // [^ \ "] *
    
    1. wgetRuft den neuesten Spiegelstatus von https://launchpad.net/ubuntu/+archivemirrors ab .
    2. Die erste grepextrahiert Spiegel, die aktuell sind oder sechs Stunden zurückliegen, zusammen mit 8 Zeilen des vorherigen Kontexts, der die tatsächlichen FTP / HTTP-URLs enthält
    3. Die zweite grepextrahiert diese FTP / HTTP-URLs
  • Hier ist eine Beispielausgabe aus Kalifornien, 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/
    
    • Die "Ränge" sind eine willkürliche Metrik; niedriger ist normalerweise besser.
    • Wenn Sie sich fragen, warum der Schweden-EU-Spiegel von kernel.org und ein NZ-Spiegel aus Kalifornien unter den ersten drei sind, dann bin ich das auch ;-) Die Wahrheit ist, dass Sie netselectnicht immer die am besten geeignete URL für die Anzeige auswählen Mehrere Spiegel werden auf eine einzige IP abgebildet. Nummer 3 ist auch bekannt als nz.archive.ubuntu.com!
ish
quelle
9
netselect wählt spiegel mit geringer udp- oder icmp-latenz aus. Es müssen nicht unbedingt Spiegel ausgewählt werden, die mehr Bandbreite bieten.
Tobu
@pix Ich habe Ihre Bearbeitung genehmigt, aber es ist keine Befehlsersetzung, die dazu führt, dass Zeilenumbrüche ersetzt werden. Es ist die nachfolgende Feldaufteilung, die die Zeilenumbrüche entfernt hat. Die Befehlsersetzung entfernt nur nachfolgende Zeilenumbrüche.
muru
25

Oneliner, der den besten (nach Download-Geschwindigkeit) Spiegel basierend auf mirrors.ubuntu.com für Ihre IP-Adresse auswählt.

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  }'
KAndy
quelle
2
Um mehr Optionen am Ende ersetzen: sort -gr | head -3.
Pablo A
1
Derzeit wird curl -s http://mirrors.ubuntu.com/mirrors.txtnur eine Zeile zurückgegeben, http://archive.ubuntu.com/ubuntu/was den Zweck der Auswahl unter mehreren zunichte macht. : - /
Stéphane Gourichon
Ja, diese Methode ist also NG.
netawater
Ich fand den curlTeil dieser Antwort hilfreich , da , curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzwo [server_url]die URL in aufgelistet Basis Spiegel ist mirrors.txt, einen Geschwindigkeitsvergleich des ersten ~ 100K der Indexdatei aus dem Spiegel ermöglicht.
Jamesc
Dies testet die Übertragungsgeschwindigkeit, was definitiv eine Verbesserung gegenüber Netselect darstellt. Es werden nur 10 KB von jedem Server heruntergeladen, was jedoch möglicherweise nicht die konstante Übertragungsgeschwindigkeit bei schnelleren Verbindungen widerspiegelt. Erhöhen Sie diese 102400 mit einem größeren Download zu testen
Phil Miller
17

Hier ist ein Python-Skript, das ich geschrieben habe und das Spiegel mit der geringsten TCP-Latenz findet.

Das Skript stellt auch Bandbreiten- und Statusdaten bereit, die vom Launchpad stammen , und generiert sources.listautomatisch eine neue Datei oder verwendet einen Spiegel aus einer Liste.

Ein Anwendungsbeispiel, mit dem Sie aus 5 US-Spiegeln mit der geringsten Latenz für Ihren Computer auswählen können:

$ apt-select --country US -t 5 --choose
John B
quelle
5
Ich möchte Sie wissen lassen, dass ich mit Ihrem Skript ein Debian-Paket erstellt habe, das einfach und unkompliziert verwendet werden kann: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto
Dies ist eine perfekte Lösung, da ich die anderen Methoden ausprobiert habe. Um Noob freundlich zu machen, habe ich einen Post geschrieben, der diese Methode beschreibt: blog.kmonsoor.com/…
kmonsoor
Dies ist großartig, da netselectes in neueren Versionen von Ubuntu
Tek
Bitte zeigen Sie, wie es in Ihrem Beitrag verwendet wird
Jonathan
@ Jonathan fertig. Die vollständige Nutzung ist im READMEersten Link.
John B
5

Ich habe ein einfaches Ping-basiertes NodeJS-Skript entwickelt, das die in mirrors.ubuntu.com/mirrors.txt aufgelisteten Server testet und das schnellste zurückgibt:

sudo npm install -g ffum
ffum

Bitte lassen Sie mich wissen, wenn Sie es nützlich finden oder Vorschläge haben (=

tentaculo
quelle
ffum funktioniert nicht: Verbindungsfehler.
James Fu
Es funktioniert nicht: Leere Ausgabe.
Juan Simón
git clonedas Repo und laufennode ffum
Michael
Super, funktioniert bei mir! Ich hatte einen Fehler, bei dem nach Knoten anstelle von Knoten gesucht wurde. Wäre auch cool, wenn ich ein paar ausführliche Informationen zu jeder getesteten Archivierungsgeschwindigkeit hätte.
Tweak2
4

Ich weiß, dass dies die Frage des OP nicht direkt beantwortet, aber es gibt eine Schaltfläche in der Desktop- / GUI-Version von Ubuntu, die den besten Spiegel für Sie findet. Es schien ziemlich gut zu funktionieren, also habe ich es mir kurz angesehen, aber keine Zeit gehabt, es weiter zu verfolgen.

Der Grund, warum ich es anspreche, ist, dass ich denke, dass es ziemlich einfach und brauchbar wäre, es zu einem Befehlszeilen-Dienstprogramm zu machen.

Wenn jemand interessiert ist, scheint der Test in:

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

Nochmal, das ist ungefähr so ​​weit wie ich gekommen bin, aber ich dachte, ich lasse das hier, falls jemand es wollte. Ich werde es wahrscheinlich wieder aufnehmen, wenn ich etwas mehr Zeit habe.

copeland3300
quelle
Am 18.04. Erkennt dieses Skript, wenn es als Anwendung (als Hauptanwendung ) von einem Terminal aus aufgerufen wird. Es druckt nur die Ergebnisse auf dem Terminal aus. Stellen Sie sicher, dass Sie genügend Zeit für die Fertigstellung haben. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg
Leider funktioniert es nicht richtig. Dieses Skript nimmt die 5 Server mit dem niedrigsten Ping-Wert und bewertet sie nach Bandbreite, indem eine ~ 1M-Datei heruntergeladen wird (Packages.gz in main von Ihrer dist). Wenn Sie das Skript ändern, um es auf 25 Server zu erhöhen und eine 500-MB-Datei herunterzuladen, erhalten Sie völlig andere Ergebnisse, die dieses Mal korrekt sind.
Jocelyn
2

Befehl, der schnelle Spiegel findet

Unter Ubuntu 18.04 habe ich gute Ergebnisse erzielt, indem ich ausgeführt habe

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

Das gibt eine Liste von Spiegeln aus, die nach "Zeit" geordnet sind (nicht erklärt), und dann habe ich einen der Spiegel verwendet, die es am höchsten eingestuft hat.

Mehr Details

Für mich war es nützlich, einige der wichtigsten Ergebnisse dieses Befehls zu testen, indem Sie sie als Spiegelbild festlegen /etc/apt/sources.listund dann ausführen

time sudo apt update

um zu sehen, wie lange es gedauert hat, die Paketliste von diesem Spiegel herunterzuladen. Ich habe die drei besten Vorschläge getestet und sie waren alle schnell, aber einer von ihnen war doppelt so schnell wie die anderen beiden im time sudo apt updateTest.

Hier ist ein Beispiel für die Ausgabe von 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
ntc2
quelle
1
Leider funktioniert es nicht richtig. Dieses Skript nimmt die 5 Server mit dem niedrigsten Ping-Wert und bewertet sie nach Bandbreite, indem eine ~ 1M-Datei heruntergeladen wird (Packages.gz in main von Ihrer dist). Wenn Sie das Skript ändern, um es auf 25 Server zu erhöhen und eine 500-MB-Datei herunterzuladen, erhalten Sie völlig andere Ergebnisse, die dieses Mal korrekt sind.
Jocelyn
1

Für die Befehlszeile können Sie ein Python-Tool namens apt-smart verwenden

Ein Verwendungsbeispiel, mit dem Sie Ranglisten von Mirrors in Ihrem Land erstellen können (automatisch erkennen):

$ apt-smart -l

Mit -loder erhalten --list-mirrorsSie (Beispielausgabe vom Travis CI US-Server):

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

Natürlich apt-smartkönnen Sie auch Ihre sources.list ändern, wenn Sie Folgendes möchten:

$ apt-smart -a

Ordnen Sie mit -aoder --auto-change-mirror, um verfügbare Spiegel zu ermitteln, die Spiegel nach Verbindungsgeschwindigkeit und Aktualisierungsstatus und aktualisieren Sie /etc/apt/sources.list, um den besten verfügbaren Spiegel zu verwenden.

Mit -c, oder --change-mirror MIRROR_URL/etc/apt/sources.list aktualisieren, um die angegebene MIRROR_URL zu verwenden.

Im Vergleich zu anderen Tools:

  • apt-smart Findet automatisch, wo Sie sich befinden, sodass Sie bei Reisen ins Ausland kein Land angeben müssen.
  • apt-smartLädt echte HTTP- pingDaten von jedem Spiegel herunter, um genauere Ergebnisse (Bandbreite und Status) zu erhalten, und unterstützt HTTP-Proxy, anstatt die ungenauen Daten des Launchpads zu verwenden und sich darauf zu verlassen.
  • apt-smart wird beibehalten, während die meisten anderen Tools Probleme für eine lange Zeit offen lassen.

Sie können einfach apt-smartüber installieren. pipAusführliche Anweisungen und Verwendungen für die Installation von copy'n'paste finden Sie in der Projekt-Readme- Datei .

Martin X.
quelle
0

Ich benutze das Folgende, um Spiegel automatisch auszuwählen (und deb-src zu deaktivieren)

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
iheggie
quelle
0

Wenn Sie möchten, dass ein Hilfsprogramm dies ausführt, können Sie ein solches Hilfsprogramm wie das folgende als einfaches Bash-Skript implementieren. Dies kann nützlich sein, wenn Sie das Dienstprogramm verwenden möchten, ohne pip / nodejs zu benötigen.

#!/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
gmatht
quelle
0

Die anderen Antworten, einschließlich der akzeptierten Antwort, sind nicht mehr gültig (für Ubuntu 11.04 und neuer), weil sie Debian-Pakete wie netselect-aptund empfohlen apt-spyhaben, die mit Ubuntu nicht funktionieren.

Es gibt zwei verschiedene funktionierende Antworten auf diese Frage:

  1. Verwenden Sie die mirror:Methode von apt-get

    Diese Methode fragt den Ubuntu-Server nach einer Liste von Mirrors in Ihrer Nähe, basierend auf Ihrer IP-Adresse, und wählt eines davon aus. Die einfachste Alternative, mit dem kleinen Nachteil, dass manchmal der nächste Spiegel nicht der schnellste ist.

  2. Befehlszeile foo using netselect
    Zeigt Ihnen, wie Sie mit dem Tool netselect die schnellsten kürzlich aktualisierten Server von Ihnen finden - netzwerkmäßig und nicht geografisch. Verwenden Sie sed, um die Spiegel in zu ersetzen sources.list.

Verwenden Sie sed, um die Spiegel in zu ersetzensources.list

Da einige Quellen Additionsordner als Teil ihres Pfades verwenden, ist es möglicherweise besser, die alternative Trennzeichensyntax zu verwenden.

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