Bagaimana Anda memilih cermin tercepat dari baris perintah?

137

Saya ingin memperbarui sources.listfile saya dengan server tercepat dari baris perintah di instal Server Ubuntu baru. Saya tahu ini mudah dengan GUI, tapi sepertinya tidak ada cara sederhana untuk melakukannya dari baris perintah?

Evan
sumber
3
Dalam ekspresi reguler,. karakter berarti karakter apa saja. Jika Anda ingin mencocokkan a., Anda harus menghindarinya dengan \, jadi us.archive [..] haruslah kita \ .archive [..]
Egil
Terkait: askubuntu.com/questions/37753/…
Jorge Castro
2
Dalam kasus saya, saya harus mengganti #tanda - tanda dengan garis miring ( /). Kalau tidak, saya mendapat sed: -e expression #1, char 53: unterminated perintah 's'.
Ethan Leroy
@ EthanLeroy sama di sini dengan Ubuntu 12.04.3
logoff
Seharusnya slash bukan hash.
Matt H

Jawaban:

22
Pakket netselect-apt

    dapper (net): Pilih mirror Debian tercepat dengan netselect 
    [alam semesta]
    0.3.ds1-5: semua
    hardy (net): Pilih mirror Debian tercepat dengan netselect 
    [alam semesta]
    0.3.ds1-11: semua
Pakket apt-spy

    dapper (admin): menulis file sources.list berdasarkan tes bandwidth 
    [alam semesta]
    3.1-14: powerpc amd64 i386

Sepertinya tidak termasuk dalam Ubuntu yang lebih baru karena masalah sekuritas: lihat: Laporan bug

Tapi .. Saya biasanya hanya menggunakan ping untuk mengetahui kecepatan koneksi ke beberapa lokasi. Jumlah hop dan latensi.

Rinzwind
sumber
4
netselect-apt tampaknya tidak tersedia di Ubuntu 12.04
offby1
8
Ini bukan yang paling terunggulkan, atau jawaban terbaik lagi, periksa yang berikutnya
ntg
Jawaban mana yang "berikutnya" mungkin telah berubah.
gmatht
apt-spy hilang di debian 9, tetapi netselect-apt baik
netawater
147

Anda tidak perlu melakukan pencarian setiap lagi - sebagai ajmitch telah dijelaskan , Anda dapat menggunakan deb mirroruntuk memiliki cermin terbaik dipilih untuk Anda secara otomatis.

apt-get sekarang mendukung metode 'mirror' yang akan secara otomatis memilih mirror yang baik berdasarkan lokasi Anda. Menempatkan:

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

di bagian atas dalam /etc/apt/sources.listfile Anda harus semua yang diperlukan untuk membuatnya secara otomatis memilih mirror untuk Anda berdasarkan lokasi geografis Anda.

Pengguna Lucid (10.04), Maverick (10.10), Natty (11.04), dan Oneiric (11.10) dapat mengganti precisedengan nama yang sesuai.

badp
sumber
Tip yang bagus. Perhatikan bahwa setelah melakukan perubahan, Anda harus menjalankan sudo apt-get updatesebelum melakukan apa pun apt-get installuntuk menggunakan cermin terdekat.
Simon East
2
Terkait: askubuntu.com/q/319433/11244
Hingga
23
Tip yang bagus, tetapi tidak membantu dalam kasus saya. Ia bekerja pada geolokasi, memberi saya server lokal, yang waaaayy lebih lambat di mana saya berada. Jarak temporal jaringan adalah faktor penting di sini, bukan jarak spasial.
jarondl
1
@marathon memperbaiki setidaknya pada 18.04+
Pablo A
49

Inilah salah satu cara yang akan selalu berhasil, menggunakan sihir yang baik netselectdan lama grep:

Retasan "find best server" pecandu terminal!

  • Unduh dan dpkg -i netselectuntuk arsitektur Anda dari situs web Debian. (sekitar 125 KB, tidak ada dependensi)
  • Temukan mirror Ubuntu tercepat dari lokasi Anda, baik yang terbaru atau paling lambat enam jam dengan ini (saya akan jelaskan di bawah ini, maaf itu tidak berpisah dengan baik di 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 membuatnya sedikit bertele-tele - Anda ingin melihat titik-titik kemajuan dan pesan-pesan yang memberitahukan Anda tentang pemetaan cermin yang berbeda ke IP yang sama digabungkan :)
    2. -sN mengontrol berapa banyak mirror yang Anda inginkan di akhir (mis. 10 mirror teratas)
    3. -tN adalah berapa lama masing-masing mirror diuji kecepatan (standarnya adalah 10; semakin tinggi angkanya, semakin lama waktu yang dibutuhkan tetapi semakin dapat diandalkan hasilnya.)
  • Ini adalah hal-hal backquotes (jangan tempel, hanya untuk penjelasan)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 "status (UP | SIX)"
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetmenarik status mirror terbaru dari https://launchpad.net/ubuntu/+archivemirrors .
    2. grepEkstrak mirror pertama yang up-to-date atau enam jam di belakang, bersama dengan 8 baris konteks sebelumnya yang mencakup URL ftp / http aktual
    3. Yang kedua grepmengekstrak URL ftp / http ini
  • Berikut ini contoh keluaran dari California, AS:

    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/
    
    • "Jajaran" adalah metrik acak; lebih rendah biasanya lebih baik.
    • Jika Anda bertanya-tanya mengapa mirror.org Swedia-EU mirror dan NZ mirror berada di tiga teratas dari California , ya, saya juga ;-) Sebenarnya adalah bahwa netselecttidak selalu memilih URL yang paling tepat untuk ditampilkan ketika beberapa mirror memetakan ke IP tunggal; nomor 3 juga dikenal sebagai nz.archive.ubuntu.com!
ish
sumber
9
netselect memilih mirror yang memiliki latensi udp atau icmp rendah. Itu tidak selalu memilih mirror yang dapat memberikan lebih banyak bandwidth.
Tobu
@ix Saya menyetujui hasil edit Anda, tetapi itu bukan substitusi perintah yang mengakibatkan baris baru diganti. Ini pemisahan bidang berikutnya yang menghapus baris baru. Substitusi perintah hanya menghilangkan trailing newlines.
muru
25

Oneliner yang memilih mirror terbaik (berdasarkan kecepatan unduhan) berdasarkan mirror.ubuntu.com untuk ip Anda.

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
sumber
2
Untuk memiliki lebih banyak pilihan ganti di akhir: sort -gr | head -3.
Pablo A
1
Saat ini, curl -s http://mirrors.ubuntu.com/mirrors.txthanya mengembalikan satu baris: http://archive.ubuntu.com/ubuntu/yang mengalahkan tujuan memilih di antara beberapa baris . : - /
Stéphane Gourichon
ya, jadi metode ini adalah NG.
netawater
Saya menemukan curlbagian dari jawaban ini bermanfaat karena di curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzmana [server_url]URL mirror dasar terdaftar mirrors.txt, memungkinkan perbandingan kecepatan ~ 100K pertama dari file indeks dari mirror.
jamesc
Ini menguji kecepatan transfer, yang jelas merupakan peningkatan dari pada netselect. Ini hanya mengunduh 10k dari setiap server, yang mungkin bukan representasi yang bagus dari kecepatan transfer stabil pada koneksi yang lebih cepat. Tingkatkan 102400 untuk diuji dengan unduhan yang lebih besar
Phil Miller
17

Berikut ini adalah skrip Python yang saya tulis yang menemukan mirror dengan latensi TCP terendah.

Skrip juga menyediakan bandwidth dan data status yang diambil dari launchpad , dan akan menghasilkan sources.listfile baru secara otomatis atau menggunakan mirror yang dipilih dari daftar.

Contoh penggunaan yang memungkinkan Anda memilih dari 5 cermin AS dengan latensi terendah ke mesin Anda:

$ apt-select --country US -t 5 --choose
John B
sumber
5
Saya ingin memberi tahu Anda bahwa saya telah membuat paket debian dengan skrip Anda yang siap digunakan dengan cara yang sangat mudah dan langsung: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto
ini adalah solusi sempurna, karena saya sudah mencoba metode lain. untuk membuat noob friendly, saya telah menulis posting yang merinci metode ini :. blog.kmonsoor.com/...
kmonsoor
Ini bagus, karena netselecttidak tersedia dalam versi Ubuntu yang lebih baru
Tek
Tolong tunjukkan bagaimana menggunakannya di pos Anda
Jonathan
@ Jonathan selesai. Penggunaan penuh ada di READMEtautan pertama.
John B
5

Saya mengembangkan skrip nodejs berbasis ping sederhana yang menguji server yang terdaftar di mirrors.ubuntu.com/mirrors.txt dan mengembalikan yang tercepat:

sudo npm install -g ffum
ffum

Harap beri tahu saya jika Anda merasa itu berguna atau punya saran (=

tentaculo
sumber
ffum tidak berfungsi: Kesalahan koneksi.
James Fu
Tidak berfungsi: Output kosong.
Juan Simón
git clonerepo dan jalankannode ffum
Michael
Luar biasa, bekerja untuk saya! Saya punya bug di mana ia mencari node, bukan nodejs ... juga akan keren untuk memiliki beberapa verbose dari setiap kecepatan arsip yang diuji.
tweak2
4

Saya tahu ini tidak secara langsung menjawab pertanyaan OP, tetapi ada tombol di desktop / GUI versi Ubuntu yang menemukan mirror terbaik untuk Anda. Tampaknya bekerja dengan cukup baik, jadi saya memeriksanya sebentar, tetapi tidak punya waktu untuk menindaklanjutinya.

Alasan saya membawanya adalah karena saya pikir itu akan sangat mudah dan dapat digunakan untuk membuatnya menjadi utilitas baris perintah.

Jika ada yang tertarik, tes ini sepertinya berlokasi di:

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

Sekali lagi, itu tentang sejauh yang saya dapatkan, tapi saya pikir saya akan meninggalkan ini di sini kalau-kalau ada yang menginginkannya. Saya mungkin akan mengambil kembali ketika saya punya sedikit waktu.

copeland3300
sumber
Pada 18.04, skrip ini mendeteksi ketika dipanggil sebagai aplikasi (sebagai utama ) dari terminal .... dan hanya mencetak hasilnya ke terminal. Pastikan untuk memberikan waktu yang cukup untuk menyelesaikannya. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg
Sayangnya itu tidak berfungsi dengan benar. Script ini mengambil 5 server dengan ping terendah, lalu menskornya dengan bandwidth dengan mengunduh file ~ 1M (Packages.gz utama dari dist Anda) Jika Anda memodifikasi skrip untuk meningkatkannya menjadi 25 server dan mengunduh file 500 juta, Anda mendapatkan hasil yang sama sekali berbeda, yang benar kali ini.
Jocelyn
2

Perintah Yang Menemukan Cermin Cepat

Di Ubuntu 18.04 saya mendapat hasil yang baik dengan menjalankan

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

Itu mencetak daftar cermin yang diatur oleh "waktu" (tidak dijelaskan), dan kemudian saya menggunakan salah satu cermin yang berperingkat tertinggi.

Keterangan lebih lanjut

Bagi saya, berguna untuk menguji beberapa hasil atas keluaran dengan perintah itu dengan menetapkan mereka sebagai mirror saya /etc/apt/sources.listdan kemudian lakukan

time sudo apt update

untuk melihat berapa lama untuk mengunduh daftar paket dari mirror itu. Saya menguji tiga saran teratas dan semuanya cepat, tetapi salah satunya dua kali lebih cepat daripada dua lainnya dalam time sudo apt updateujian.

Berikut ini contoh keluaran dari 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
sumber
1
Sayangnya itu tidak berfungsi dengan benar. Script ini mengambil 5 server dengan ping terendah, lalu menskornya dengan bandwidth dengan mengunduh file ~ 1M (Packages.gz utama dari dist Anda) Jika Anda memodifikasi skrip untuk meningkatkannya menjadi 25 server dan mengunduh file 500 juta, Anda mendapatkan hasil yang sama sekali berbeda, yang benar kali ini.
Jocelyn
1

Untuk baris perintah, Anda dapat menggunakan alat Python yang disebut apt-smart

Contoh penggunaan yang memungkinkan Anda mencantumkan mirror peringkat di negara Anda (secara otomatis mendeteksi):

$ apt-smart -l

Dengan -l, atau --list-mirrors, Anda akan mendapatkan (contoh output dari server 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

Tentu saja, apt-smartdapat juga mengubah sumber Anda. Daftar jika Anda ingin:

$ apt-smart -a

Dengan -a, atau --auto-change-mirroruntuk menemukan mirror yang tersedia, beri peringkat mirror dengan kecepatan koneksi dan perbarui status dan perbarui /etc/apt/sources.list untuk menggunakan mirror terbaik yang tersedia.

Dengan -c, atau --change-mirror MIRROR_URLuntuk memperbarui /etc/apt/sources.list untuk menggunakan MIRROR_URL yang diberikan.

Dibandingkan dengan alat lain:

  • apt-smart secara otomatis menemukan di mana Anda berada sehingga Anda tidak perlu menentukan negara saat bepergian ke luar negeri.
  • apt-smarttidak mengunduh HTTP nyata dari setiap mirror untuk mendapatkan hasil yang lebih akurat (bandwidth & status) dan mendukung proxy HTTP, daripada menggunakan pingdan mengandalkan data yang tidak akurat launchpad.
  • apt-smart dipertahankan, sedangkan sebagian besar alat lainnya membiarkan masalah tidak bertahan lama.

Anda dapat dengan mudah menginstal apt-smartmelalui pip, untuk perintah instalasi dan penggunaan copy'n'paste rinci silakan lihat Project Readme .

Martin X
sumber
0

Saya menggunakan yang berikut ini untuk memilih mirror secara otomatis (dan menonaktifkan 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
iheggie
sumber
0

Jika Anda ingin utilitas melakukan ini, Anda bisa mengimplementasikan utilitas seperti skrip bash sederhana seperti berikut ini. Ini mungkin berguna jika Anda ingin menggunakan utilitas tanpa perlu 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
gmatht
sumber
0

Jawaban lain, termasuk jawaban yang diterima, tidak lagi valid (untuk Ubuntu 11.04 dan yang lebih baru) karena mereka merekomendasikan paket Debian seperti netselect-aptdan apt-spyyang tidak berfungsi dengan Ubuntu.

Ada dua yang berbeda kerja jawaban untuk pertanyaan di bawah ini:

  1. Menggunakan apt-get 's mirror:metode

    Metode ini meminta server Ubuntu untuk daftar mirror di dekat Anda berdasarkan IP Anda, dan memilih salah satunya. Alternatif termudah, dengan kelemahan kecil yang terkadang cermin terdekat mungkin bukan yang tercepat.

  2. Command-line foo using netselect
    Menunjukkan kepada Anda cara menggunakan alat netselect untuk menemukan server tercepat yang baru-baru ini diperbarui dari Anda - bijaksana jaringan, bukan secara geografis. Gunakan seduntuk mengganti mirror sources.list.

Gunakan seduntuk mengganti mirrorsources.list

Karena beberapa sumber menggunakan folder tambahan sebagai bagian dari jalurnya, mungkin lebih baik menggunakan sintaks pemisah alternatif.

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